diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 882c6a4889f..64b7b2e4d65 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,6 +11,9 @@ updates: interval: daily labels: - "topic: infrastructure" + commit-message: + prefix: "[skip changelog] " + rebase-strategy: disabled - package-ecosystem: gomod directory: / schedule: @@ -18,3 +21,6 @@ updates: open-pull-requests-limit: 10 labels: - "topic: infrastructure" + commit-message: + prefix: "[skip changelog] " + rebase-strategy: disabled diff --git a/.github/workflows/check-certificates.yml b/.github/workflows/check-certificates.yml index a3ecf724fd6..e91169ef7d5 100644 --- a/.github/workflows/check-certificates.yml +++ b/.github/workflows/check-certificates.yml @@ -36,9 +36,11 @@ jobs: - identifier: macOS signing certificate # Text used to identify certificate in notifications. certificate-secret: INSTALLER_CERT_MAC_P12 # Name of the secret that contains the certificate. password-secret: INSTALLER_CERT_MAC_PASSWORD # Name of the secret that contains the certificate password. + type: pkcs12 - identifier: Windows signing certificate - certificate-secret: INSTALLER_CERT_WINDOWS_PFX - password-secret: INSTALLER_CERT_WINDOWS_PASSWORD + certificate-secret: INSTALLER_CERT_WINDOWS_CER + # The password for the Windows certificate is not needed, because its not a container, but a single certificate. + type: x509 steps: - name: Set certificate path environment variable @@ -57,7 +59,7 @@ jobs: CERTIFICATE_PASSWORD: ${{ secrets[matrix.certificate.password-secret] }} run: | ( - openssl pkcs12 \ + openssl ${{ matrix.certificate.type }} \ -in "${{ env.CERTIFICATE_PATH }}" \ -legacy \ -noout \ @@ -84,26 +86,43 @@ jobs: CERTIFICATE_PASSWORD: ${{ secrets[matrix.certificate.password-secret] }} id: get-days-before-expiration run: | - EXPIRATION_DATE="$( - ( - openssl pkcs12 \ - -in "${{ env.CERTIFICATE_PATH }}" \ - -clcerts \ - -legacy \ - -nodes \ - -passin env:CERTIFICATE_PASSWORD - ) | ( - openssl x509 \ - -noout \ - -enddate - ) | ( - grep \ - --max-count=1 \ - --only-matching \ - --perl-regexp \ - 'notAfter=(\K.*)' - ) - )" + if [[ ${{ matrix.certificate.type }} == "pkcs12" ]]; then + EXPIRATION_DATE="$( + ( + openssl pkcs12 \ + -in ${{ env.CERTIFICATE_PATH }} \ + -clcerts \ + -legacy \ + -nodes \ + -passin env:CERTIFICATE_PASSWORD + ) | ( + openssl x509 \ + -noout \ + -enddate + ) | ( + grep \ + --max-count=1 \ + --only-matching \ + --perl-regexp \ + 'notAfter=(\K.*)' + ) + )" + elif [[ ${{ matrix.certificate.type }} == "x509" ]]; then + EXPIRATION_DATE="$( + ( + openssl x509 \ + -in ${{ env.CERTIFICATE_PATH }} \ + -noout \ + -enddate + ) | ( + grep \ + --max-count=1 \ + --only-matching \ + --perl-regexp \ + 'notAfter=(\K.*)' + ) + )" + fi DAYS_BEFORE_EXPIRATION="$((($(date --utc --date="$EXPIRATION_DATE" +%s) - $(date --utc +%s)) / 60 / 60 / 24))" diff --git a/.github/workflows/check-easyjson.yml b/.github/workflows/check-easyjson.yml index 89051e5b6da..419f736256a 100644 --- a/.github/workflows/check-easyjson.yml +++ b/.github/workflows/check-easyjson.yml @@ -2,7 +2,7 @@ name: Check easyjson generated files env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows on: @@ -32,12 +32,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-go-dependencies-task.yml b/.github/workflows/check-go-dependencies-task.yml index f2013d855e2..c3d31664168 100644 --- a/.github/workflows/check-go-dependencies-task.yml +++ b/.github/workflows/check-go-dependencies-task.yml @@ -3,7 +3,7 @@ name: Check Go Dependencies env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" # See: https://docs.github.com/actions/using-workflows/events-that-trigger-workflows on: @@ -76,12 +76,12 @@ jobs: version: 3.x - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -102,9 +102,10 @@ jobs: # Some might find it convenient to have CI generate the cache rather than setting up for it locally - name: Upload cache to workflow artifact if: failure() && steps.diff.outcome == 'failure' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: if-no-files-found: error + include-hidden-files: true name: dep-licenses-cache path: .licenses/ @@ -126,12 +127,12 @@ jobs: version: 3.x - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-go-task.yml b/.github/workflows/check-go-task.yml index 89443f77018..16b758f4304 100644 --- a/.github/workflows/check-go-task.yml +++ b/.github/workflows/check-go-task.yml @@ -3,7 +3,7 @@ name: Check Go env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows on: @@ -67,12 +67,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -103,20 +103,20 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x - name: golangci-lint - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v7 with: - version: v1.54 + version: v2.0.2 - name: Check style env: @@ -141,12 +141,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -177,7 +177,7 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} @@ -206,12 +206,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -235,16 +235,16 @@ jobs: matrix: module: - - path: arduino/discovery/discovery_client - - path: client_example - - path: commands/daemon/term_example + - path: internal/arduino/discovery/discovery_client + - path: rpc/internal/client_example + - path: commands/term_example steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} diff --git a/.github/workflows/check-i18n-task.yml b/.github/workflows/check-i18n-task.yml index 659f6e4a92c..0e000fe13b9 100644 --- a/.github/workflows/check-i18n-task.yml +++ b/.github/workflows/check-i18n-task.yml @@ -2,7 +2,7 @@ name: Check Internationalization env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows on: @@ -22,12 +22,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-markdown-task.yml b/.github/workflows/check-markdown-task.yml index 12dd65d6c2c..02ae36cb159 100644 --- a/.github/workflows/check-markdown-task.yml +++ b/.github/workflows/check-markdown-task.yml @@ -5,7 +5,7 @@ env: # See: https://github.com/actions/setup-node/#readme NODE_VERSION: 16.x # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" # See: https://docs.github.com/actions/using-workflows/events-that-trigger-workflows on: @@ -78,15 +78,15 @@ jobs: uses: actions/checkout@v4 - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - name: Initialize markdownlint-cli problem matcher - uses: xt0rted/markdownlint-problem-matcher@v2 + uses: xt0rted/markdownlint-problem-matcher@v3 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -104,25 +104,24 @@ jobs: uses: actions/checkout@v4 - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Go dependencies run: go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v1.4.1 - - name: Install protoc compiler - uses: arduino/setup-protoc@v2 + - uses: bufbuild/buf-action@v1 with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + setup_only: true - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-mkdocs-task.yml b/.github/workflows/check-mkdocs-task.yml index 6914212a928..18680faab36 100644 --- a/.github/workflows/check-mkdocs-task.yml +++ b/.github/workflows/check-mkdocs-task.yml @@ -3,7 +3,7 @@ name: Check Website env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python PYTHON_VERSION: "3.9" @@ -37,20 +37,19 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Go dependencies run: go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v1.4.1 - - name: Install protoc compiler - uses: arduino/setup-protoc@v2 + - uses: bufbuild/buf-action@v1 with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + setup_only: true - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} @@ -58,7 +57,7 @@ jobs: run: pip install poetry - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-prettier-formatting-task.yml b/.github/workflows/check-prettier-formatting-task.yml index 44f8365dc0a..5bb45e35d55 100644 --- a/.github/workflows/check-prettier-formatting-task.yml +++ b/.github/workflows/check-prettier-formatting-task.yml @@ -207,7 +207,7 @@ jobs: uses: actions/checkout@v4 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/check-protobuf-task.yml b/.github/workflows/check-protobuf-task.yml index 9e46bede483..c0ecd1cda3d 100644 --- a/.github/workflows/check-protobuf-task.yml +++ b/.github/workflows/check-protobuf-task.yml @@ -2,7 +2,7 @@ name: Check Protocol Buffers env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows on: @@ -53,24 +53,13 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Go - uses: actions/setup-go@v4 + - name: Install buf + uses: bufbuild/buf-action@v1 with: - go-version: ${{ env.GO_VERSION }} - - - name: Install protoc compiler - uses: arduino/setup-protoc@v2 - with: - version: v24.3 - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Install Go deps - run: | - go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31.0 - go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 + setup_only: true - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -90,43 +79,15 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Go - uses: actions/setup-go@v4 - with: - go-version: ${{ env.GO_VERSION }} - - - name: Install buf (protoc linter) + # used by the protobuf breaking change detector + - name: Fetch main branch run: | - go install github.com/bufbuild/buf/cmd/buf@v1.20.0 - go install github.com/bufbuild/buf/cmd/protoc-gen-buf-breaking@v1.20.0 - go install github.com/bufbuild/buf/cmd/protoc-gen-buf-lint@v1.20.0 - - - name: Install Task - uses: arduino/setup-task@v1 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - version: 3.x - - - name: Lint protocol buffers - run: task protoc:check + git fetch origin master - check-formatting: - needs: run-determination - if: needs.run-determination.outputs.result == 'true' - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Install Task - uses: arduino/setup-task@v1 + - uses: bufbuild/buf-action@v1 with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - version: 3.x - - - name: Format protocol buffers - run: task protoc:format - - - name: Check formatting - run: git diff --color --exit-code + pr_comment: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository }} + lint: ${{ github.event_name == 'pull_request' }} + format: ${{ github.event_name == 'pull_request' }} + breaking: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'buf skip breaking') }} + breaking_against: ".git#branch=origin/master,subdir=rpc" diff --git a/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml b/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml index 1f8902be25b..76f32ad3eaa 100644 --- a/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml +++ b/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml @@ -3,7 +3,7 @@ name: Deploy Website env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" # See: https://github.com/actions/setup-python/tree/main#available-versions-of-python PYTHON_VERSION: "3.9" @@ -21,7 +21,7 @@ on: - "go.sum" - "Taskfile.ya?ml" - "**.go" - - "docsgen/**" + - "internal/docsgen/**" - "rpc/**" - "mkdocs.ya?ml" - "poetry.lock" @@ -57,20 +57,19 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Go dependencies run: go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v1.4.1 - - name: Install protoc compiler - uses: arduino/setup-protoc@v2 + - uses: bufbuild/buf-action@v1 with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + setup_only: true - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} @@ -80,7 +79,7 @@ jobs: python -m pip install poetry - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/i18n-nightly-push.yaml b/.github/workflows/i18n-nightly-push.yaml index 6d1dd9b514f..0539549159d 100644 --- a/.github/workflows/i18n-nightly-push.yaml +++ b/.github/workflows/i18n-nightly-push.yaml @@ -16,12 +16,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: "${{ env.GO_VERSION }}" - name: Install Taskfile - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x diff --git a/.github/workflows/i18n-weekly-pull.yaml b/.github/workflows/i18n-weekly-pull.yaml index 1aac744870a..173d8070094 100644 --- a/.github/workflows/i18n-weekly-pull.yaml +++ b/.github/workflows/i18n-weekly-pull.yaml @@ -2,7 +2,7 @@ name: i18n-weekly-pull env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" COVERAGE_ARTIFACT: coverage-data on: @@ -23,12 +23,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: "${{ env.GO_VERSION }}" - name: Install Taskfile - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -42,7 +42,7 @@ jobs: TRANSIFEX_API_KEY: ${{ secrets.TRANSIFEX_API_KEY }} - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 + uses: peter-evans/create-pull-request@v6 with: commit-message: Updated translation files title: Updated translation files diff --git a/.github/workflows/publish-go-nightly-task.yml b/.github/workflows/publish-go-nightly-task.yml index c7dd591f2f9..46dd1089c13 100644 --- a/.github/workflows/publish-go-nightly-task.yml +++ b/.github/workflows/publish-go-nightly-task.yml @@ -8,6 +8,7 @@ env: DIST_DIR: dist # The project's folder on Arduino's download server for uploading builds AWS_PLUGIN_TARGET: /arduino-cli/ + AWS_REGION: "us-east-1" ARTIFACT_NAME: dist # See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows @@ -18,6 +19,10 @@ on: workflow_dispatch: repository_dispatch: +permissions: + id-token: write # This is required for requesting the JWT + contents: read # This is required for actions/checkout + jobs: create-nightly-artifacts: outputs: @@ -43,7 +48,7 @@ jobs: uses: actions/checkout@v4 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -60,10 +65,10 @@ jobs: run: echo "version=$(task general:get-version)" >> $GITHUB_OUTPUT - name: Upload artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: if-no-files-found: error - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-${{ matrix.os }} path: ${{ env.DIST_DIR }} notarize-macos: @@ -77,9 +82,11 @@ jobs: strategy: matrix: artifact: - - name: darwin_amd64 + - artifact-suffix: macOS_64bit + name: darwin_amd64 path: "macOS_64bit.tar.gz" - - name: darwin_arm64 + - artifact-suffix: macOS_ARM64 + name: darwin_arm64 path: "macOS_ARM64.tar.gz" steps: @@ -87,11 +94,16 @@ jobs: uses: actions/checkout@v4 - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-${{ matrix.artifact.artifact-suffix }} path: ${{ env.DIST_DIR }} + - name: Remove non-notarized artifact + uses: geekyeggo/delete-artifact@v5 + with: + name: ${{ env.ARTIFACT_NAME }}-${{ matrix.artifact.artifact-suffix }} + - name: Import Code-Signing Certificates env: KEYCHAIN: "sign.keychain" @@ -117,14 +129,14 @@ jobs: - name: Install gon for code signing and app notarization run: | - wget -q https://github.com/mitchellh/gon/releases/download/v0.2.3/gon_macos.zip + wget -q https://github.com/Bearer/gon/releases/download/v0.0.27/gon_macos.zip unzip gon_macos.zip -d /usr/local/bin - name: Write gon config to file # gon does not allow env variables in config file (https://github.com/mitchellh/gon/issues/20) run: | cat > "${{ env.GON_CONFIG_PATH }}" <> $GITHUB_ENV - - name: Upload artifact - uses: actions/upload-artifact@v3 + - name: Upload notarized artifact + uses: actions/upload-artifact@v4 with: if-no-files-found: error - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-${{ matrix.artifact.artifact-suffix }} path: ${{ env.DIST_DIR }}/${{ env.PACKAGE_FILENAME }} create-windows-installer: - runs-on: windows-latest + runs-on: windows-sign-pc needs: create-nightly-artifacts defaults: @@ -176,24 +189,23 @@ jobs: shell: bash env: - INSTALLER_CERT_WINDOWS_PFX: "/tmp/cert.pfx" + INSTALLER_CERT_WINDOWS_CER: "/tmp/cert.cer" # We are hardcoding the path for signtool because is not present on the windows PATH env var by default. # Keep in mind that this path could change when upgrading to a new runner version - # https://github.com/actions/runner-images/blob/main/images/win/Windows2022-Readme.md#installed-windows-sdks - SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x86/signtool.exe" + SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.19041.0/x86/signtool.exe" steps: - name: Checkout repository uses: actions/checkout@v4 - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-Windows_64bit path: ${{ env.DIST_DIR }} - name: Prepare PATH - uses: microsoft/setup-msbuild@v1 + uses: microsoft/setup-msbuild@v2 - name: Build MSI id: buildmsi @@ -205,47 +217,59 @@ jobs: MSBuild.exe ./installer/cli.wixproj -p:SourceDir="$SOURCE_DIR" -p:OutputPath="${GITHUB_WORKSPACE}/${{ env.DIST_DIR }}" -p:OutputName="$PACKAGE_FILENAME" -p:ProductVersion="$WIX_VERSION" - name: Save Win signing certificate to file - run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_PFX }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_PFX}} + run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_CER }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_CER}} - name: Sign MSI env: MSI_FILE: ${{ steps.buildmsi.outputs.msi }} # this comes from .installer/cli.wixproj CERT_PASSWORD: ${{ secrets.INSTALLER_CERT_WINDOWS_PASSWORD }} + CONTAINER_NAME: ${{ secrets.INSTALLER_CERT_WINDOWS_CONTAINER }} + # https://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing-with-safenet-etoken run: | - "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_PFX}} -p ${{ env.CERT_PASSWORD }} -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}" + "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_CER}} -csp "eToken Base Cryptographic Provider" -k "[{{${{ env.CERT_PASSWORD }}}}]=${{ env.CONTAINER_NAME }}" -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}" - name: Upload artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 env: MSI_FILE: ${{ steps.buildmsi.outputs.msi }} with: if-no-files-found: error - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-windows-installer path: ${{ env.MSI_FILE }} publish-nightly: runs-on: ubuntu-latest + environment: production needs: - create-nightly-artifacts - notarize-macos - create-windows-installer + permissions: + contents: write + id-token: write # This is required for requesting the JWT steps: - name: Checkout repository uses: actions/checkout@v4 - name: Download artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: ${{ env.ARTIFACT_NAME }} + pattern: ${{ env.ARTIFACT_NAME }}-* + merge-multiple: true path: ${{ env.DIST_DIR }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x + - name: Install buf + uses: bufbuild/buf-action@v1 + with: + setup_only: true + - name: Collect proto files env: NIGHTLY: true @@ -257,15 +281,15 @@ jobs: VERSION=${{ needs.create-nightly-artifacts.outputs.version }} sha256sum ${{ env.PROJECT_NAME }}_${VERSION}* > ${VERSION}-checksums.txt + - name: configure aws credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: "github_${{ env.PROJECT_NAME }}" + aws-region: ${{ env.AWS_REGION }} + - name: Upload release files on Arduino downloads servers - uses: docker://plugins/s3 - env: - PLUGIN_SOURCE: "${{ env.DIST_DIR }}/*" - PLUGIN_TARGET: "${{ env.AWS_PLUGIN_TARGET }}nightly" - PLUGIN_STRIP_PREFIX: "${{ env.DIST_DIR }}/" - PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + run: aws s3 sync ${{ env.DIST_DIR }} s3://${{ secrets.DOWNLOADS_BUCKET }}${{ env.AWS_PLUGIN_TARGET }}nightly report: runs-on: ubuntu-latest diff --git a/.github/workflows/publish-go-tester-task.yml b/.github/workflows/publish-go-tester-task.yml index f358a4fe4e7..82dfad0fff1 100644 --- a/.github/workflows/publish-go-tester-task.yml +++ b/.github/workflows/publish-go-tester-task.yml @@ -76,7 +76,7 @@ jobs: create-artifacts: needs: package-name-prefix name: Create artifact ${{ matrix.artifact.name }} - runs-on: ubuntu-latest + runs-on: ${{ matrix.artifact.runner }} strategy: matrix: @@ -84,36 +84,47 @@ jobs: - task: dist:Windows_32bit path: "*Windows_32bit.zip" name: Windows_X86-32 + runner: ubuntu-latest - task: dist:Windows_64bit path: "*Windows_64bit.zip" name: Windows_X86-64 + runner: ubuntu-latest - task: dist:Linux_32bit path: "*Linux_32bit.tar.gz" name: Linux_X86-32 + runner: ubuntu-latest - task: dist:Linux_64bit path: "*Linux_64bit.tar.gz" name: Linux_X86-64 + runner: ubuntu-latest - task: dist:Linux_ARMv6 path: "*Linux_ARMv6.tar.gz" name: Linux_ARMv6 + runner: ubuntu-latest - task: dist:Linux_ARMv7 path: "*Linux_ARMv7.tar.gz" name: Linux_ARMv7 + runner: ubuntu-latest - task: dist:Linux_ARM64 path: "*Linux_ARM64.tar.gz" name: Linux_ARM64 + runner: ubuntu-latest - task: dist:macOS_64bit path: "*macOS_64bit.tar.gz" name: macOS_64 + runner: ubuntu-latest - task: dist:macOS_ARM64 path: "*macOS_ARM64.tar.gz" name: macOS_ARM64 + runner: ubuntu-24.04-arm - task: protoc:collect path: "*_proto.zip" name: rpc-protocol-files + runner: ubuntu-latest - task: dist:jsonschema path: "*configuration.schema.json" name: configuration-schema + runner: ubuntu-latest steps: - name: Checkout repository @@ -122,11 +133,16 @@ jobs: fetch-depth: 0 - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x + - name: Install buf + uses: bufbuild/buf-action@v1 + with: + setup_only: true + - name: Build run: | PACKAGE_NAME_PREFIX=${{ needs.package-name-prefix.outputs.prefix }} @@ -135,7 +151,7 @@ jobs: # Transfer builds to artifacts job - name: Upload build artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: ${{ env.DIST_DIR }}/${{ matrix.artifact.path }} name: ${{ matrix.artifact.name }} @@ -148,7 +164,7 @@ jobs: steps: - name: Download build artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 - name: Output checksum run: | TAG="${{ needs.package-name-prefix.outputs.prefix }}git-snapshot" @@ -162,7 +178,7 @@ jobs: done - name: Upload checksum artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: ./*checksums.txt name: checksums diff --git a/.github/workflows/release-go-task.yml b/.github/workflows/release-go-task.yml index e6f103de132..fa9ed513bf7 100644 --- a/.github/workflows/release-go-task.yml +++ b/.github/workflows/release-go-task.yml @@ -8,6 +8,7 @@ env: DIST_DIR: dist # The project's folder on Arduino's download server for uploading builds AWS_PLUGIN_TARGET: /arduino-cli/ + AWS_REGION: "us-east-1" ARTIFACT_NAME: dist on: @@ -19,20 +20,29 @@ jobs: create-release-artifacts: outputs: version: ${{ steps.get-version.outputs.version }} - runs-on: ubuntu-latest + runs-on: ${{ matrix.env.runner }} strategy: matrix: - os: - - Windows_32bit - - Windows_64bit - - Linux_32bit - - Linux_64bit - - Linux_ARMv6 - - Linux_ARMv7 - - Linux_ARM64 - - macOS_64bit - - macOS_ARM64 + env: + - os: Windows_32bit + runner: ubuntu-latest + - os: Windows_64bit + runner: ubuntu-latest + - os: Linux_32bit + runner: ubuntu-latest + - os: Linux_64bit + runner: ubuntu-latest + - os: Linux_ARMv6 + runner: ubuntu-latest + - os: Linux_ARMv7 + runner: ubuntu-latest + - os: Linux_ARM64 + runner: ubuntu-latest + - os: macOS_64bit + runner: ubuntu-latest + - os: macOS_ARM64 + runner: ubuntu-24.04-arm steps: - name: Checkout repository @@ -42,7 +52,7 @@ jobs: - name: Create changelog # Avoid creating the same changelog for each os - if: matrix.os == 'Windows_32bit' + if: matrix.env.os == 'Windows_32bit' uses: arduino/create-changelog@v1 with: tag-regex: '^v[0-9]+\.[0-9]+\.[0-9]+.*$' @@ -51,23 +61,23 @@ jobs: changelog-file-path: "${{ env.DIST_DIR }}/CHANGELOG.md" - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x - name: Build - run: task dist:${{ matrix.os }} + run: task dist:${{ matrix.env.os }} - name: Output Version id: get-version run: echo "version=$(task general:get-version)" >> $GITHUB_OUTPUT - name: Upload artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: if-no-files-found: error - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-${{ matrix.env.os }} path: ${{ env.DIST_DIR }} notarize-macos: @@ -81,9 +91,11 @@ jobs: strategy: matrix: artifact: - - name: darwin_amd64 + - artifact-suffix: macOS_64bit + name: darwin_amd64 path: "macOS_64bit.tar.gz" - - name: darwin_arm64 + - artifact-suffix: macOS_ARM64 + name: darwin_arm64 path: "macOS_ARM64.tar.gz" steps: @@ -91,11 +103,16 @@ jobs: uses: actions/checkout@v4 - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-${{ matrix.artifact.artifact-suffix }} path: ${{ env.DIST_DIR }} + - name: Remove non-notarized artifact + uses: geekyeggo/delete-artifact@v5 + with: + name: ${{ env.ARTIFACT_NAME }}-${{ matrix.artifact.artifact-suffix }} + - name: Import Code-Signing Certificates env: KEYCHAIN: "sign.keychain" @@ -121,14 +138,14 @@ jobs: - name: Install gon for code signing and app notarization run: | - wget -q https://github.com/mitchellh/gon/releases/download/v0.2.3/gon_macos.zip + wget -q https://github.com/Bearer/gon/releases/download/v0.0.27/gon_macos.zip unzip gon_macos.zip -d /usr/local/bin - name: Write gon config to file # gon does not allow env variables in config file (https://github.com/mitchellh/gon/issues/20) run: | cat > "${{ env.GON_CONFIG_PATH }}" <> $GITHUB_ENV - - name: Upload artifact - uses: actions/upload-artifact@v3 + - name: Upload notarized artifact + uses: actions/upload-artifact@v4 with: if-no-files-found: error - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-${{ matrix.artifact.artifact-suffix }} path: ${{ env.DIST_DIR }}/${{ env.PACKAGE_FILENAME }} create-windows-installer: - runs-on: windows-latest + runs-on: windows-sign-pc needs: create-release-artifacts defaults: @@ -180,24 +198,23 @@ jobs: shell: bash env: - INSTALLER_CERT_WINDOWS_PFX: "/tmp/cert.pfx" + INSTALLER_CERT_WINDOWS_CER: "/tmp/cert.cer" # We are hardcoding the path for signtool because is not present on the windows PATH env var by default. # Keep in mind that this path could change when upgrading to a new runner version - # https://github.com/actions/runner-images/blob/main/images/win/Windows2022-Readme.md#installed-windows-sdks - SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x86/signtool.exe" + SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.19041.0/x86/signtool.exe" steps: - name: Checkout repository uses: actions/checkout@v4 - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-Windows_64bit path: ${{ env.DIST_DIR }} - name: Prepare PATH - uses: microsoft/setup-msbuild@v1 + uses: microsoft/setup-msbuild@v2 - name: Build MSI id: buildmsi @@ -209,47 +226,59 @@ jobs: MSBuild.exe ./installer/cli.wixproj -p:SourceDir="$SOURCE_DIR" -p:OutputPath="${GITHUB_WORKSPACE}/${{ env.DIST_DIR }}" -p:OutputName="$PACKAGE_FILENAME" -p:ProductVersion="$WIX_TAG" - name: Save Win signing certificate to file - run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_PFX }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_PFX}} + run: echo "${{ secrets.INSTALLER_CERT_WINDOWS_CER }}" | base64 --decode > ${{ env.INSTALLER_CERT_WINDOWS_CER}} - name: Sign MSI env: MSI_FILE: ${{ steps.buildmsi.outputs.msi }} # this comes from .installer/cli.wixproj CERT_PASSWORD: ${{ secrets.INSTALLER_CERT_WINDOWS_PASSWORD }} + CONTAINER_NAME: ${{ secrets.INSTALLER_CERT_WINDOWS_CONTAINER }} + # https://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing-with-safenet-etoken run: | - "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_PFX}} -p ${{ env.CERT_PASSWORD }} -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}" + "${{ env.SIGNTOOL_PATH }}" sign -d "Arduino CLI" -f ${{ env.INSTALLER_CERT_WINDOWS_CER}} -csp "eToken Base Cryptographic Provider" -k "[{{${{ env.CERT_PASSWORD }}}}]=${{ env.CONTAINER_NAME }}" -fd sha256 -tr http://timestamp.digicert.com -td SHA256 -v "${{ env.MSI_FILE }}" - name: Upload artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 env: MSI_FILE: ${{ steps.buildmsi.outputs.msi }} with: if-no-files-found: error - name: ${{ env.ARTIFACT_NAME }} + name: ${{ env.ARTIFACT_NAME }}-windows-installer path: ${{ env.MSI_FILE }} create-release: runs-on: ubuntu-latest + environment: production needs: - create-release-artifacts - notarize-macos - create-windows-installer + permissions: + contents: write + id-token: write # This is required for requesting the JWT steps: - name: Checkout repository uses: actions/checkout@v4 - name: Download artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: ${{ env.ARTIFACT_NAME }} + pattern: ${{ env.ARTIFACT_NAME }}-* + merge-multiple: true path: ${{ env.DIST_DIR }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x + - name: Install buf + uses: bufbuild/buf-action@v1 + with: + setup_only: true + - name: Collect proto files run: task protoc:collect @@ -282,19 +311,12 @@ jobs: # (all the files we need are in the DIST_DIR root) artifacts: ${{ env.DIST_DIR }}/* - - name: Upload release files on Arduino downloads servers - uses: docker://plugins/s3 - env: - PLUGIN_SOURCE: "${{ env.DIST_DIR }}/*" - PLUGIN_TARGET: ${{ env.AWS_PLUGIN_TARGET }} - PLUGIN_STRIP_PREFIX: "${{ env.DIST_DIR }}/" - PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - - - name: Update Homebrew formula - if: steps.prerelease.outputs.IS_PRE != 'true' - uses: dawidd6/action-homebrew-bump-formula@v3 + - name: configure aws credentials + uses: aws-actions/configure-aws-credentials@v4 with: - token: ${{ secrets.ARDUINOBOT_GITHUB_TOKEN }} - formula: arduino-cli + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: "github_${{ env.PROJECT_NAME }}" + aws-region: ${{ env.AWS_REGION }} + + - name: Upload release files on Arduino downloads servers + run: aws s3 sync ${{ env.DIST_DIR }} s3://${{ secrets.DOWNLOADS_BUCKET }}${{ env.AWS_PLUGIN_TARGET }} diff --git a/.github/workflows/sync-labels.yml b/.github/workflows/sync-labels.yml index 9ecf638e861..546ab8b4745 100644 --- a/.github/workflows/sync-labels.yml +++ b/.github/workflows/sync-labels.yml @@ -71,13 +71,13 @@ jobs: file-url: https://raw.githubusercontent.com/arduino/tooling-project-assets/main/workflow-templates/assets/sync-labels/${{ matrix.filename }} - name: Pass configuration files to next job via workflow artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: | *.yaml *.yml if-no-files-found: error - name: ${{ env.CONFIGURATIONS_ARTIFACT }} + name: ${{ env.CONFIGURATIONS_ARTIFACT }}-${{ matrix.filename }} sync: needs: download @@ -109,15 +109,16 @@ jobs: uses: actions/checkout@v4 - name: Download configuration files artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: ${{ env.CONFIGURATIONS_ARTIFACT }} + pattern: ${{ env.CONFIGURATIONS_ARTIFACT }}-* + merge-multiple: true path: ${{ env.CONFIGURATIONS_FOLDER }} - name: Remove unneeded artifact - uses: geekyeggo/delete-artifact@v2 + uses: geekyeggo/delete-artifact@v5 with: - name: ${{ env.CONFIGURATIONS_ARTIFACT }} + name: ${{ env.CONFIGURATIONS_ARTIFACT }}-* - name: Merge label configuration files run: | diff --git a/.github/workflows/test-go-task.yml b/.github/workflows/test-go-task.yml index 4b4c2865a4c..088e58669f7 100644 --- a/.github/workflows/test-go-task.yml +++ b/.github/workflows/test-go-task.yml @@ -3,7 +3,7 @@ name: Test Go env: # See: https://github.com/actions/setup-go/tree/main#supported-version-syntax - GO_VERSION: "1.21" + GO_VERSION: "1.24" COVERAGE_ARTIFACT: coverage-data # See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows @@ -70,8 +70,9 @@ jobs: - name: Collect tests id: collection + # jq flags must be "-cRn" see: https://stackoverflow.com/a/68859958/1655275 run: | - echo "tests-data=$(go list ./internal/integrationtest/... | grep integrationtest/ | tr "/" " " | cut -d " " -f 6 | jq -cR '[inputs]')" >> $GITHUB_OUTPUT + echo "tests-data=$(go list ./internal/integrationtest/... | grep integrationtest/ | tr "/" " " | cut -d " " -f 6 | jq -cRn '[inputs]')" >> $GITHUB_OUTPUT test-integration: needs: tests-collector @@ -79,9 +80,9 @@ jobs: fail-fast: false matrix: operating-system: - - ubuntu-latest - windows-latest - macos-latest + - ubuntu-latest tests: ${{ fromJSON(needs.tests-collector.outputs.tests-data) }} runs-on: ${{ matrix.operating-system }} @@ -95,12 +96,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -113,10 +114,10 @@ jobs: mv coverage_integration.txt coverage_integration_${{ matrix.operating-system }}_${{ matrix.tests }}.txt - name: Upload coverage data to workflow artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: if-no-files-found: error - name: ${{ env.COVERAGE_ARTIFACT }} + name: ${{ env.COVERAGE_ARTIFACT }}-test-integration-${{ matrix.operating-system }}-${{ matrix.tests }} path: | ./coverage_integration_*.txt @@ -126,9 +127,9 @@ jobs: fail-fast: false matrix: operating-system: - - ubuntu-latest - windows-latest - macos-latest + - ubuntu-latest runs-on: ${{ matrix.operating-system }} @@ -141,12 +142,12 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} version: 3.x @@ -156,10 +157,10 @@ jobs: - name: Upload coverage data to workflow artifact if: runner.os == 'Linux' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: if-no-files-found: error - name: ${{ env.COVERAGE_ARTIFACT }} + name: ${{ env.COVERAGE_ARTIFACT }}-test-${{ matrix.operating-system }} path: | ./coverage_unit.txt @@ -173,7 +174,7 @@ jobs: uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} @@ -181,9 +182,10 @@ jobs: run: go install github.com/wadey/gocovmerge@b5bfa59 - name: Download coverage data artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: ${{ env.COVERAGE_ARTIFACT }} + pattern: ${{ env.COVERAGE_ARTIFACT }}-* + merge-multiple: true - name: Merge all code coverage artifacts run: gocovmerge coverage*.txt > coverage.txt @@ -203,7 +205,7 @@ jobs: echo "CODECOV_TOKEN=$CODECOV_TOKEN" >> "$GITHUB_ENV" - name: Send unit tests coverage to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v5 with: token: ${{ env.CODECOV_TOKEN }} files: ./coverage.txt diff --git a/.gitignore b/.gitignore index 15f5060d5da..435016fb119 100644 --- a/.gitignore +++ b/.gitignore @@ -15,11 +15,12 @@ venv /.pytest-tmp-dir /node_modules/ __debug_bin* +.vscode # gRPC client example folder -/client_example/client_example -/client_example/**/*.bin -/client_example/**/*.elf +/rpc/internal/client_example/client_example +/rpc/internal/client_example/**/*.bin +/rpc/internal/client_example/**/*.elf # Misc. .DS_Store @@ -27,8 +28,8 @@ __debug_bin* # Mkdocs /site/ /public/ -/docsgen/arduino-cli -/docsgen/arduino-cli.exe +/internal/docsgen/arduino-cli +/internal/docsgen/arduino-cli.exe /docs/rpc/*.md /docs/commands/*.md /docs/configuration.schema.json diff --git a/.golangci.yml b/.golangci.yml index 7e9f18d1482..774ff649564 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,11 +1,11 @@ +version: "2" run: - timeout: 10m - go: "1.21" + go: "1.24" tests: true linters: # Disable all linters. - disable-all: true + default: none # Enable specific linter enable: # Nice to have @@ -13,125 +13,168 @@ linters: #- errcheck #- gocritic #- thelper - - errorlint + - copyloopvar - dupword - - exportloopref + - errorlint - forbidigo - - gofmt - - goimports - gosec - - gosimple - govet - ineffassign - misspell - revive - staticcheck - - tenv - - typecheck - unconvert + # We must disable this one because there is no support 'optional' protobuf fields yet: https://github.com/arduino/arduino-cli/pull/2570 + #- protogetter -linters-settings: - forbidigo: - forbid: - - p: ^(fmt\.Print(|f|ln)|print|println)$ - msg: in cli package use `feedback.*` instead - - p: (os\.(Stdout|Stderr|Stdin))(# )? - msg: in cli package use `feedback.*` instead - analyze-types: true - - revive: - confidence: 0.8 + settings: + errorlint: + errorf: false + asserts: false + comparison: true + forbidigo: + forbid: + - pattern: ^(fmt\.Print(|f|ln)|print|println)$ + msg: in cli package use `feedback.*` instead + - pattern: (os\.(Stdout|Stderr|Stdin))(# )? + msg: in cli package use `feedback.*` instead + analyze-types: true + govet: + enable: + - appends + - asmdecl + - assign + - atomic + - atomicalign + - bools + - buildtag + - cgocall + - composites + - copylocks + - deepequalerrors + - defers + - directive + - errorsas + - findcall + - framepointer + - httpresponse + - ifaceassert + - loopclosure + - lostcancel + - nilfunc + - nilness + - printf + - reflectvaluecompare + - shift + - sigchanyzer + - slog + - sortslice + - stdmethods + - stringintconv + - structtag + - testinggoroutine + - tests + - unmarshal + - unreachable + - unsafeptr + - unusedresult + - unusedwrite + revive: + confidence: 0.8 + rules: + - name: blank-imports + - name: context-as-argument + - name: context-keys-type + - name: dot-imports + - name: empty-block + - name: error-naming + - name: error-strings + - name: errorf + - name: exported + - name: increment-decrement + - name: package-comments + - name: range + - name: receiver-naming + - name: redefines-builtin-id + - name: superfluous-else + - name: time-naming + - name: unreachable-code + - name: var-declaration + - name: defer + - name: atomic + - name: waitgroup-by-value + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling rules: - #- name: error-return - #- name: unused-parameter - #- name: var-naming - - name: blank-imports - - name: context-as-argument - - name: context-keys-type - - name: dot-imports - - name: empty-block - - name: error-naming - - name: error-strings - - name: errorf - - name: exported - - name: increment-decrement - - name: indent-error-flow - - name: package-comments - - name: range - - name: receiver-naming - - name: redefines-builtin-id - - name: superfluous-else - - name: time-naming - - name: unexported-return - - name: unreachable-code - - name: var-declaration - - name: defer - - name: atomic - - name: waitgroup-by-value - - errorlint: - # Check for plain error comparisons. - comparison: true - - # We might evalute to allow the asserts and errofs in the future - # Do not check for plain type assertions and type switches. - asserts: false - # Do not check whether fmt.Errorf uses the %w verb for formatting errors. - errorf: false - + - linters: + - errcheck + - gosec + path: _test\.go + - linters: + - gosec + text: G401 + - linters: + - gosec + text: G501 + - linters: + - gosec + path: internal/integrationtest/ + text: G112 + - linters: + - gosec + path: executils/process.go + text: G204 + - linters: + - staticcheck + path: commands/lib/search.go + text: SA1019 + - linters: + - revive + path: arduino/libraries/loader.go + text: empty-block + - linters: + - revive + path: arduino/serialutils/serialutils.go + text: empty-block + - linters: + - revive + path: arduino/resources/download.go + text: empty-block + - linters: + - revive + path: arduino/builder/internal/progress/progress_test.go + text: empty-block + - linters: + - revive + path: internal/algorithms/channels.go + text: empty-block + - linters: + - forbidigo + path-except: internal/cli/ + - linters: + - forbidigo + path: internal/cli/.*_test.go + - linters: + - forbidigo + path: internal/cli/feedback/ + paths: + - third_party$ + - builtin$ + - examples$ issues: - # Fix found issues (if it's supported by the linter). - fix: true - # List of regexps of issue texts to exclude. - # - # But independently of this option we use default exclude patterns, - # it can be disabled by `exclude-use-default: false`. - # To list all excluded by default patterns execute `golangci-lint run --help` - # - # Default: https://golangci-lint.run/usage/false-positives/#default-exclusions - exclude-rules: - # Exclude some linters from running on tests files. - - path: _test\.go - linters: [gosec, errcheck] - # G401: Use of weak cryptographic primitive - - linters: [gosec] - text: "G401" - # G501: Blocklisted import crypto/md5: weak cryptographic primitive - - linters: [gosec] - text: "G501" - # G112: Potential Slowloris Attack because ReadHeaderTimeout is not configured in the http.Server - - linters: [gosec] - path: internal/integrationtest/ - text: "G112" - # G204: Subprocess launched with a potential tainted input or cmd arguments - - linters: [gosec] - path: executils/process.go - text: "G204" - # SA1019: req.GetQuery is deprecated: Marked as deprecated in cc/arduino/cli/commands/v1/lib.proto. - - linters: [staticcheck] - path: commands/lib/search.go - text: "SA1019" - - # Ignore revive emptyblock - - linters: [revive] - path: arduino/libraries/loader.go - text: "empty-block" - - linters: [revive] - path: arduino/serialutils/serialutils.go - text: "empty-block" - - linters: [revive] - path: arduino/resources/download.go - text: "empty-block" - - linters: [revive] - path: arduino/builder/internal/progress/progress_test.go - text: "empty-block" - - linters: [revive] - path: internal/algorithms/channels.go - text: "empty-block" - - # Run linters only on specific path - - path-except: internal/cli/ - linters: - - forbidigo - - path: internal/cli/feedback/ - linters: [forbidigo] + fix: false +formatters: + enable: + - gofmt + - goimports + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/.licensed.yml b/.licensed.yml index daba0633f27..1b775e1b797 100644 --- a/.licensed.yml +++ b/.licensed.yml @@ -10,8 +10,6 @@ apps: reviewed: go: - - google.golang.org/protobuf/encoding/protojson - - google.golang.org/protobuf/internal/encoding/json - github.com/ProtonMail/go-crypto/bitcurves - github.com/ProtonMail/go-crypto/brainpool - github.com/ProtonMail/go-crypto/eax @@ -22,14 +20,21 @@ reviewed: - github.com/ProtonMail/go-crypto/openpgp/armor - github.com/ProtonMail/go-crypto/openpgp/ecdh - github.com/ProtonMail/go-crypto/openpgp/ecdsa + - github.com/ProtonMail/go-crypto/openpgp/ed25519 + - github.com/ProtonMail/go-crypto/openpgp/ed448 - github.com/ProtonMail/go-crypto/openpgp/eddsa - github.com/ProtonMail/go-crypto/openpgp/elgamal - github.com/ProtonMail/go-crypto/openpgp/errors - github.com/ProtonMail/go-crypto/openpgp/internal/algorithm - github.com/ProtonMail/go-crypto/openpgp/internal/ecc + - github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve25519 + - github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve25519/field - github.com/ProtonMail/go-crypto/openpgp/internal/encoding - github.com/ProtonMail/go-crypto/openpgp/packet - github.com/ProtonMail/go-crypto/openpgp/s2k + - github.com/ProtonMail/go-crypto/openpgp/symmetric + - github.com/ProtonMail/go-crypto/openpgp/x25519 + - github.com/ProtonMail/go-crypto/openpgp/x448 - github.com/cloudflare/circl/dh/x25519 - github.com/cloudflare/circl/dh/x448 - github.com/cloudflare/circl/ecc/goldilocks @@ -42,27 +47,23 @@ reviewed: - github.com/cloudflare/circl/sign - github.com/cloudflare/circl/sign/ed25519 - github.com/cloudflare/circl/sign/ed448 - - golang.org/x/crypto/argon2 - - golang.org/x/crypto/blake2b - - golang.org/x/crypto/sha3 - - github.com/russross/blackfriday/v2 - github.com/go-git/gcfg - github.com/go-git/gcfg/scanner - github.com/go-git/gcfg/token - github.com/go-git/gcfg/types - - golang.org/x/crypto/openpgp - - golang.org/x/crypto/openpgp/armor - - golang.org/x/crypto/openpgp/elgamal - - golang.org/x/crypto/openpgp/errors - - golang.org/x/crypto/openpgp/packet - - golang.org/x/crypto/openpgp/s2k + - github.com/russross/blackfriday/v2 + - github.com/sagikazarmark/slog-shim + - golang.org/x/crypto/sha3 - golang.org/x/sys/execabs - golang.org/x/text/encoding - golang.org/x/text/encoding/internal - golang.org/x/text/encoding/internal/identifier - golang.org/x/text/encoding/unicode - golang.org/x/text/internal/utf8internal - - github.com/sagikazarmark/slog-shim + - google.golang.org/protobuf/encoding/protojson + - google.golang.org/protobuf/internal/encoding/json + - sigs.k8s.io/yaml + - sigs.k8s.io/yaml/goyaml.v2 # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-dependencies/GPL-3.0/.licensed.yml allowed: diff --git a/.licenses/go/github.com/imdario/mergo.dep.yml b/.licenses/go/dario.cat/mergo.dep.yml similarity index 95% rename from .licenses/go/github.com/imdario/mergo.dep.yml rename to .licenses/go/dario.cat/mergo.dep.yml index 5d739462a9e..45534cb4edc 100644 --- a/.licenses/go/github.com/imdario/mergo.dep.yml +++ b/.licenses/go/dario.cat/mergo.dep.yml @@ -1,9 +1,9 @@ --- -name: github.com/imdario/mergo -version: v0.3.12 +name: dario.cat/mergo +version: v1.0.0 type: go summary: A helper to merge structs and maps in Golang. -homepage: https://pkg.go.dev/github.com/imdario/mergo +homepage: https://pkg.go.dev/dario.cat/mergo license: bsd-3-clause licenses: - sources: LICENSE @@ -40,6 +40,5 @@ licenses: text: |- [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) license, as [Go language](http://golang.org/LICENSE). - [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fimdario%2Fmergo.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fimdario%2Fmergo?ref=badge_large) notices: [] diff --git a/.licenses/go/fortio.org/safecast.dep.yml b/.licenses/go/fortio.org/safecast.dep.yml new file mode 100644 index 00000000000..35c4304dcf1 --- /dev/null +++ b/.licenses/go/fortio.org/safecast.dep.yml @@ -0,0 +1,214 @@ +--- +name: fortio.org/safecast +version: v1.0.0 +type: go +summary: Package safecast allows you to safely cast between numeric types in Go and + return errors (or panic when using the Must* variants) when the cast would result + in a loss of precision, range or sign. +homepage: https://godoc.org/fortio.org/safecast +license: apache-2.0 +licenses: +- sources: LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/bitcurves.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/bitcurves.dep.yml index 20e7ba58f41..cbe841d417d 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/bitcurves.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/bitcurves.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/bitcurves -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/bitcurves license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/brainpool.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/brainpool.dep.yml index ed2f5e071e3..07cae41e25b 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/brainpool.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/brainpool.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/brainpool -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package brainpool implements Brainpool elliptic curves. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/brainpool license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/eax.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/eax.dep.yml index 9e7b3d73197..fde7c6e9d26 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/eax.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/eax.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/ProtonMail/go-crypto/eax -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: 'Package eax provides an implementation of the EAX (encrypt-authenticate-translate) mode of operation, as described in Bellare, Rogaway, and Wagner "THE EAX MODE OF @@ -9,7 +9,7 @@ summary: 'Package eax provides an implementation of the EAX (encrypt-authenticat homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/eax license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -38,7 +38,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/internal/byteutil.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/internal/byteutil.dep.yml index 995400394f5..381568efb23 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/internal/byteutil.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/internal/byteutil.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/internal/byteutil -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/internal/byteutil license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/ocb.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/ocb.dep.yml index 0d6c4c7c50e..d2328b5fb40 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/ocb.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/ocb.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/ProtonMail/go-crypto/ocb -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: 'Package ocb provides an implementation of the OCB (offset codebook) mode of operation, as described in RFC-7253 of the IRTF and in Rogaway, Bellare, Black @@ -9,7 +9,7 @@ summary: 'Package ocb provides an implementation of the OCB (offset codebook) mo homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/ocb license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -38,7 +38,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp.dep.yml index 359f7fc4c1b..efaf5b6bcd8 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package openpgp implements high level operations on OpenPGP messages. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap.dep.yml index 33615a04e43..8f944221e01 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/aes/keywrap -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package keywrap is an implementation of the RFC 3394 AES key wrapping algorithm. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/armor.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/armor.dep.yml index d0e40175e7c..4b6b8c0aecf 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/armor.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/armor.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/armor -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package armor implements OpenPGP ASCII Armor, see RFC 4880. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/armor license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdh.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdh.dep.yml index 33977600bd6..54449a47cd5 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdh.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdh.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/ecdh -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package ecdh implements ECDH encryption, suitable for OpenPGP, as specified in RFC 6637, section 8. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/ecdh license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdsa.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdsa.dep.yml index f8a012d41ea..642457665c3 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdsa.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ecdsa.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/ecdsa -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package ecdsa implements ECDSA signature, suitable for OpenPGP, as specified in RFC 6637, section 5. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/ecdsa license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed25519.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed25519.dep.yml new file mode 100644 index 00000000000..73c4e6e5512 --- /dev/null +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed25519.dep.yml @@ -0,0 +1,63 @@ +--- +name: github.com/ProtonMail/go-crypto/openpgp/ed25519 +version: v1.2.0 +type: go +summary: Package ed25519 implements the ed25519 signature algorithm for OpenPGP as + defined in the Open PGP crypto refresh. +homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/ed25519 +license: other +licenses: +- sources: go-crypto@v1.2.0/LICENSE + text: | + Copyright (c) 2009 The Go Authors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- sources: go-crypto@v1.2.0/PATENTS + text: | + Additional IP Rights Grant (Patents) + + "This implementation" means the copyrightable works distributed by + Google as part of the Go project. + + Google hereby grants to You a perpetual, worldwide, non-exclusive, + no-charge, royalty-free, irrevocable (except as stated in this section) + patent license to make, have made, use, offer to sell, sell, import, + transfer and otherwise run, modify and propagate the contents of this + implementation of Go, where such license applies only to those patent + claims, both currently owned or controlled by Google and acquired in + the future, licensable by Google that are necessarily infringed by this + implementation of Go. This grant does not include claims that would be + infringed only as a consequence of further modification of this + implementation. If you or your agent or exclusive licensee institute or + order or agree to the institution of patent litigation against any + entity (including a cross-claim or counterclaim in a lawsuit) alleging + that this implementation of Go or any code incorporated within this + implementation of Go constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any patent + rights granted to you under this License for this implementation of Go + shall terminate as of the date such litigation is filed. +notices: [] diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed448.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed448.dep.yml new file mode 100644 index 00000000000..043c48df85c --- /dev/null +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/ed448.dep.yml @@ -0,0 +1,63 @@ +--- +name: github.com/ProtonMail/go-crypto/openpgp/ed448 +version: v1.2.0 +type: go +summary: Package ed448 implements the ed448 signature algorithm for OpenPGP as defined + in the Open PGP crypto refresh. +homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/ed448 +license: other +licenses: +- sources: go-crypto@v1.2.0/LICENSE + text: | + Copyright (c) 2009 The Go Authors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- sources: go-crypto@v1.2.0/PATENTS + text: | + Additional IP Rights Grant (Patents) + + "This implementation" means the copyrightable works distributed by + Google as part of the Go project. + + Google hereby grants to You a perpetual, worldwide, non-exclusive, + no-charge, royalty-free, irrevocable (except as stated in this section) + patent license to make, have made, use, offer to sell, sell, import, + transfer and otherwise run, modify and propagate the contents of this + implementation of Go, where such license applies only to those patent + claims, both currently owned or controlled by Google and acquired in + the future, licensable by Google that are necessarily infringed by this + implementation of Go. This grant does not include claims that would be + infringed only as a consequence of further modification of this + implementation. If you or your agent or exclusive licensee institute or + order or agree to the institution of patent litigation against any + entity (including a cross-claim or counterclaim in a lawsuit) alleging + that this implementation of Go or any code incorporated within this + implementation of Go constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any patent + rights granted to you under this License for this implementation of Go + shall terminate as of the date such litigation is filed. +notices: [] diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/eddsa.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/eddsa.dep.yml index 381c3361444..c39a89e9150 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/eddsa.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/eddsa.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/eddsa -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package eddsa implements EdDSA signature, suitable for OpenPGP, as specified in https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-13.7 homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/eddsa license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/elgamal.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/elgamal.dep.yml index 11d83ce12ca..a8da261dddf 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/elgamal.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/elgamal.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/elgamal -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package elgamal implements ElGamal encryption, suitable for OpenPGP, as specified in "A Public-Key Cryptosystem and a Signature Scheme Based on Discrete Logarithms," @@ -8,7 +8,7 @@ summary: Package elgamal implements ElGamal encryption, suitable for OpenPGP, as homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/elgamal license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -37,7 +37,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/errors.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/errors.dep.yml index a37ac9e1c07..410d137e541 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/errors.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/errors.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/errors -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package errors contains common error types for the OpenPGP packages. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/errors license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm.dep.yml index c2078547025..0d701e406a2 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/internal/algorithm -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/ecc.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/ecc.dep.yml index 571a8c1c167..f2f26abb1a2 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/ecc.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/ecc.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/internal/ecc -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/internal/ecc license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/encoding.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/encoding.dep.yml index 10cecdbb7df..46147a172c3 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/encoding.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/internal/encoding.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/internal/encoding -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package encoding implements openpgp packet field encodings as specified in RFC 4880 and 6637. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/internal/encoding license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/packet.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/packet.dep.yml index 3b6bfe612b6..89196fbb262 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/packet.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/packet.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/packet -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package packet implements parsing and serialization of OpenPGP packets, as specified in RFC 4880. homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/packet license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/s2k.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/s2k.dep.yml index 2dcb0bd2351..8afba8fe0f5 100644 --- a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/s2k.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/s2k.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/ProtonMail/go-crypto/openpgp/s2k -version: v0.0.0-20230828082145-3c4c8a2d2371 +version: v1.2.0 type: go summary: Package s2k implements the various OpenPGP string-to-key transforms as specified in RFC 4800 section 3.7.1, and Argon2 specified in draft-ietf-openpgp-crypto-refresh-08 @@ -8,7 +8,7 @@ summary: Package s2k implements the various OpenPGP string-to-key transforms as homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/s2k license: other licenses: -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -37,7 +37,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: go-crypto@v0.0.0-20230828082145-3c4c8a2d2371/PATENTS +- sources: go-crypto@v1.2.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x25519.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x25519.dep.yml new file mode 100644 index 00000000000..36bfad817d3 --- /dev/null +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x25519.dep.yml @@ -0,0 +1,62 @@ +--- +name: github.com/ProtonMail/go-crypto/openpgp/x25519 +version: v1.2.0 +type: go +summary: +homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/x25519 +license: other +licenses: +- sources: go-crypto@v1.2.0/LICENSE + text: | + Copyright (c) 2009 The Go Authors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- sources: go-crypto@v1.2.0/PATENTS + text: | + Additional IP Rights Grant (Patents) + + "This implementation" means the copyrightable works distributed by + Google as part of the Go project. + + Google hereby grants to You a perpetual, worldwide, non-exclusive, + no-charge, royalty-free, irrevocable (except as stated in this section) + patent license to make, have made, use, offer to sell, sell, import, + transfer and otherwise run, modify and propagate the contents of this + implementation of Go, where such license applies only to those patent + claims, both currently owned or controlled by Google and acquired in + the future, licensable by Google that are necessarily infringed by this + implementation of Go. This grant does not include claims that would be + infringed only as a consequence of further modification of this + implementation. If you or your agent or exclusive licensee institute or + order or agree to the institution of patent litigation against any + entity (including a cross-claim or counterclaim in a lawsuit) alleging + that this implementation of Go or any code incorporated within this + implementation of Go constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any patent + rights granted to you under this License for this implementation of Go + shall terminate as of the date such litigation is filed. +notices: [] diff --git a/.licenses/go/github.com/sagikazarmark/slog-shim.dep.yml b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x448.dep.yml similarity index 50% rename from .licenses/go/github.com/sagikazarmark/slog-shim.dep.yml rename to .licenses/go/github.com/ProtonMail/go-crypto/openpgp/x448.dep.yml index 6ff17440f94..9fecfa6a582 100644 --- a/.licenses/go/github.com/sagikazarmark/slog-shim.dep.yml +++ b/.licenses/go/github.com/ProtonMail/go-crypto/openpgp/x448.dep.yml @@ -1,12 +1,12 @@ --- -name: github.com/sagikazarmark/slog-shim -version: v0.1.0 +name: github.com/ProtonMail/go-crypto/openpgp/x448 +version: v1.2.0 type: go -summary: -homepage: https://pkg.go.dev/github.com/sagikazarmark/slog-shim +summary: +homepage: https://pkg.go.dev/github.com/ProtonMail/go-crypto/openpgp/x448 license: other licenses: -- sources: LICENSE +- sources: go-crypto@v1.2.0/LICENSE text: | Copyright (c) 2009 The Go Authors. All rights reserved. @@ -35,6 +35,28 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: README.md - text: The project is licensed under a [BSD-style license](LICENSE). +- sources: go-crypto@v1.2.0/PATENTS + text: | + Additional IP Rights Grant (Patents) + + "This implementation" means the copyrightable works distributed by + Google as part of the Go project. + + Google hereby grants to You a perpetual, worldwide, non-exclusive, + no-charge, royalty-free, irrevocable (except as stated in this section) + patent license to make, have made, use, offer to sell, sell, import, + transfer and otherwise run, modify and propagate the contents of this + implementation of Go, where such license applies only to those patent + claims, both currently owned or controlled by Google and acquired in + the future, licensable by Google that are necessarily infringed by this + implementation of Go. This grant does not include claims that would be + infringed only as a consequence of further modification of this + implementation. If you or your agent or exclusive licensee institute or + order or agree to the institution of patent litigation against any + entity (including a cross-claim or counterclaim in a lawsuit) alleging + that this implementation of Go or any code incorporated within this + implementation of Go constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any patent + rights granted to you under this License for this implementation of Go + shall terminate as of the date such litigation is filed. notices: [] diff --git a/.licenses/go/github.com/arduino/go-paths-helper.dep.yml b/.licenses/go/github.com/arduino/go-paths-helper.dep.yml index bd4b949ac04..8a0611c2ee1 100644 --- a/.licenses/go/github.com/arduino/go-paths-helper.dep.yml +++ b/.licenses/go/github.com/arduino/go-paths-helper.dep.yml @@ -1,8 +1,8 @@ --- name: github.com/arduino/go-paths-helper -version: v1.9.2 +version: v1.13.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/arduino/go-paths-helper license: gpl-2.0-or-later licenses: diff --git a/.licenses/go/github.com/arduino/go-properties-orderedmap.dep.yml b/.licenses/go/github.com/arduino/go-properties-orderedmap.dep.yml index e8697bc995d..07b731adc7d 100644 --- a/.licenses/go/github.com/arduino/go-properties-orderedmap.dep.yml +++ b/.licenses/go/github.com/arduino/go-properties-orderedmap.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/arduino/go-properties-orderedmap -version: v1.8.0 +version: v1.8.1 type: go summary: Package properties is a library for handling maps of hierarchical properties. homepage: https://pkg.go.dev/github.com/arduino/go-properties-orderedmap diff --git a/.licenses/go/github.com/arduino/go-serial-utils.dep.yml b/.licenses/go/github.com/arduino/go-serial-utils.dep.yml new file mode 100644 index 00000000000..d80310c7746 --- /dev/null +++ b/.licenses/go/github.com/arduino/go-serial-utils.dep.yml @@ -0,0 +1,458 @@ +--- +name: github.com/arduino/go-serial-utils +version: v0.1.2 +type: go +summary: +homepage: https://pkg.go.dev/github.com/arduino/go-serial-utils +license: gpl-3.0 +licenses: +- sources: LICENSE.txt + text: "This file includes licensing information for \n\nCopyright (c) 2024 ARDUINO + SA (www.arduino.cc)\n\nThe software is released under the GNU General Public License, + which covers the main body\nof the arduino-cli code. The terms of this license + can be found at:\nhttps://www.gnu.org/licenses/gpl-3.0.en.html\n\nYou can be released + from the requirements of the above licenses by purchasing\na commercial license. + Buying such a license is mandatory if you want to modify or\notherwise use the + software for commercial activities involving the Arduino\nsoftware without disclosing + the source code of your own applications. To purchase\na commercial license, send + an email to license@arduino.cc\n\n GNU GENERAL PUBLIC LICENSE\n + \ Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software + Foundation, Inc. \n Everyone is permitted to copy and distribute + verbatim copies\n of this license document, but changing it is not allowed.\n\n + \ Preamble\n\n The GNU General Public License is a + free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses + for most software and other practical works are designed\nto take away your freedom + to share and change the works. By contrast,\nthe GNU General Public License is + intended to guarantee your freedom to\nshare and change all versions of a program--to + make sure it remains free\nsoftware for all its users. We, the Free Software + Foundation, use the\nGNU General Public License for most of our software; it applies + also to\nany other work released this way by its authors. You can apply it to\nyour + programs, too.\n\n When we speak of free software, we are referring to freedom, + not\nprice. Our General Public Licenses are designed to make sure that you\nhave + the freedom to distribute copies of free software (and charge for\nthem if you + wish), that you receive source code or can get it if you\nwant it, that you can + change the software or use pieces of it in new\nfree programs, and that you know + you can do these things.\n\n To protect your rights, we need to prevent others + from denying you\nthese rights or asking you to surrender the rights. Therefore, + you have\ncertain responsibilities if you distribute copies of the software, or + if\nyou modify it: responsibilities to respect the freedom of others.\n\n For + example, if you distribute copies of such a program, whether\ngratis or for a + fee, you must pass on to the recipients the same\nfreedoms that you received. + \ You must make sure that they, too, receive\nor can get the source code. And + you must show them these terms so they\nknow their rights.\n\n Developers that + use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the + software, and (2) offer you this License\ngiving you legal permission to copy, + distribute and/or modify it.\n\n For the developers' and authors' protection, + the GPL clearly explains\nthat there is no warranty for this free software. For + both users' and\nauthors' sake, the GPL requires that modified versions be marked + as\nchanged, so that their problems will not be attributed erroneously to\nauthors + of previous versions.\n\n Some devices are designed to deny users access to install + or run\nmodified versions of the software inside them, although the manufacturer\ncan + do so. This is fundamentally incompatible with the aim of\nprotecting users' + freedom to change the software. The systematic\npattern of such abuse occurs + in the area of products for individuals to\nuse, which is precisely where it is + most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit + the practice for those\nproducts. If such problems arise substantially in other + domains, we\nstand ready to extend this provision to those domains in future versions\nof + the GPL, as needed to protect the freedom of users.\n\n Finally, every program + is threatened constantly by software patents.\nStates should not allow patents + to restrict development and use of\nsoftware on general-purpose computers, but + in those that do, we wish to\navoid the special danger that patents applied to + a free program could\nmake it effectively proprietary. To prevent this, the GPL + assures that\npatents cannot be used to render the program non-free.\n\n The + precise terms and conditions for copying, distribution and\nmodification follow.\n\n + \ TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" + refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also + means copyright-like laws that apply to other kinds of\nworks, such as semiconductor + masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. + \ Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may + be individuals or organizations.\n\n To \"modify\" a work means to copy from + or adapt all or part of the work\nin a fashion requiring copyright permission, + other than the making of an\nexact copy. The resulting work is called a \"modified + version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A + \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n + \ To \"propagate\" a work means to do anything with it that, without\npermission, + would make you directly or secondarily liable for\ninfringement under applicable + copyright law, except executing it on a\ncomputer or modifying a private copy. + \ Propagation includes copying,\ndistribution (with or without modification), + making available to the\npublic, and in some countries other activities as well.\n\n + \ To \"convey\" a work means any kind of propagation that enables other\nparties + to make or receive copies. Mere interaction with a user through\na computer network, + with no transfer of a copy, is not conveying.\n\n An interactive user interface + displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient + and prominently visible\nfeature that (1) displays an appropriate copyright notice, + and (2)\ntells the user that there is no warranty for the work (except to the\nextent + that warranties are provided), that licensees may convey the\nwork under this + License, and how to view a copy of this License. If\nthe interface presents a + list of user commands or options, such as a\nmenu, a prominent item in the list + meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work + means the preferred form of the work\nfor making modifications to it. \"Object + code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means + an interface that either is an official\nstandard defined by a recognized standards + body, or, in the case of\ninterfaces specified for a particular programming language, + one that\nis widely used among developers working in that language.\n\n The \"System + Libraries\" of an executable work include anything, other\nthan the work as a + whole, that (a) is included in the normal form of\npackaging a Major Component, + but which is not part of that Major\nComponent, and (b) serves only to enable + use of the work with that\nMajor Component, or to implement a Standard Interface + for which an\nimplementation is available to the public in source code form. A\n\"Major + Component\", in this context, means a major essential component\n(kernel, window + system, and so on) of the specific operating system\n(if any) on which the executable + work runs, or a compiler used to\nproduce the work, or an object code interpreter + used to run it.\n\n The \"Corresponding Source\" for a work in object code form + means all\nthe source code needed to generate, install, and (for an executable\nwork) + run the object code and to modify the work, including scripts to\ncontrol those + activities. However, it does not include the work's\nSystem Libraries, or general-purpose + tools or generally available free\nprograms which are used unmodified in performing + those activities but\nwhich are not part of the work. For example, Corresponding + Source\nincludes interface definition files associated with source files for\nthe + work, and the source code for shared libraries and dynamically\nlinked subprograms + that the work is specifically designed to require,\nsuch as by intimate data communication + or control flow between those\nsubprograms and other parts of the work.\n\n The + Corresponding Source need not include anything that users\ncan regenerate automatically + from other parts of the Corresponding\nSource.\n\n The Corresponding Source for + a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n + \ All rights granted under this License are granted for the term of\ncopyright + on the Program, and are irrevocable provided the stated\nconditions are met. This + License explicitly affirms your unlimited\npermission to run the unmodified Program. + \ The output from running a\ncovered work is covered by this License only if the + output, given its\ncontent, constitutes a covered work. This License acknowledges + your\nrights of fair use or other equivalent, as provided by copyright law.\n\n + \ You may make, run and propagate covered works that you do not\nconvey, without + conditions so long as your license otherwise remains\nin force. You may convey + covered works to others for the sole purpose\nof having them make modifications + exclusively for you, or provide you\nwith facilities for running those works, + provided that you comply with\nthe terms of this License in conveying all material + for which you do\nnot control copyright. Those thus making or running the covered + works\nfor you must do so exclusively on your behalf, under your direction\nand + control, on terms that prohibit them from making any copies of\nyour copyrighted + material outside their relationship with you.\n\n Conveying under any other circumstances + is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; + section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From + Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective + technological\nmeasure under any applicable law fulfilling obligations under article\n11 + of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting + or restricting circumvention of such\nmeasures.\n\n When you convey a covered + work, you waive any legal power to forbid\ncircumvention of technological measures + to the extent such circumvention\nis effected by exercising rights under this + License with respect to\nthe covered work, and you disclaim any intention to limit + operation or\nmodification of the work as a means of enforcing, against the work's\nusers, + your or third parties' legal rights to forbid circumvention of\ntechnological + measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies + of the Program's source code as you\nreceive it, in any medium, provided that + you conspicuously and\nappropriately publish on each copy an appropriate copyright + notice;\nkeep intact all notices stating that this License and any\nnon-permissive + terms added in accord with section 7 apply to the code;\nkeep intact all notices + of the absence of any warranty; and give all\nrecipients a copy of this License + along with the Program.\n\n You may charge any price or no price for each copy + that you convey,\nand you may offer support or warranty protection for a fee.\n\n + \ 5. Conveying Modified Source Versions.\n\n You may convey a work based on the + Program, or the modifications to\nproduce it from the Program, in the form of + source code under the\nterms of section 4, provided that you also meet all of + these conditions:\n\n a) The work must carry prominent notices stating that + you modified\n it, and giving a relevant date.\n\n b) The work must carry + prominent notices stating that it is\n released under this License and any + conditions added under section\n 7. This requirement modifies the requirement + in section 4 to\n \"keep intact all notices\".\n\n c) You must license the + entire work, as a whole, under this\n License to anyone who comes into possession + of a copy. This\n License will therefore apply, along with any applicable + section 7\n additional terms, to the whole of the work, and all its parts,\n + \ regardless of how they are packaged. This License gives no\n permission + to license the work in any other way, but it does not\n invalidate such permission + if you have separately received it.\n\n d) If the work has interactive user + interfaces, each must display\n Appropriate Legal Notices; however, if the + Program has interactive\n interfaces that do not display Appropriate Legal + Notices, your\n work need not make them do so.\n\n A compilation of a covered + work with other separate and independent\nworks, which are not by their nature + extensions of the covered work,\nand which are not combined with it such as to + form a larger program,\nin or on a volume of a storage or distribution medium, + is called an\n\"aggregate\" if the compilation and its resulting copyright are + not\nused to limit the access or legal rights of the compilation's users\nbeyond + what the individual works permit. Inclusion of a covered work\nin an aggregate + does not cause this License to apply to the other\nparts of the aggregate.\n\n + \ 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object + code form under the terms\nof sections 4 and 5, provided that you also convey + the\nmachine-readable Corresponding Source under the terms of this License,\nin + one of these ways:\n\n a) Convey the object code in, or embodied in, a physical + product\n (including a physical distribution medium), accompanied by the\n + \ Corresponding Source fixed on a durable physical medium\n customarily used + for software interchange.\n\n b) Convey the object code in, or embodied in, + a physical product\n (including a physical distribution medium), accompanied + by a\n written offer, valid for at least three years and valid for as\n long + as you offer spare parts or customer support for that product\n model, to give + anyone who possesses the object code either (1) a\n copy of the Corresponding + Source for all the software in the\n product that is covered by this License, + on a durable physical\n medium customarily used for software interchange, for + a price no\n more than your reasonable cost of physically performing this\n + \ conveying of source, or (2) access to copy the\n Corresponding Source from + a network server at no charge.\n\n c) Convey individual copies of the object + code with a copy of the\n written offer to provide the Corresponding Source. + \ This\n alternative is allowed only occasionally and noncommercially, and\n + \ only if you received the object code with such an offer, in accord\n with + subsection 6b.\n\n d) Convey the object code by offering access from a designated\n + \ place (gratis or for a charge), and offer equivalent access to the\n Corresponding + Source in the same way through the same place at no\n further charge. You + need not require recipients to copy the\n Corresponding Source along with the + object code. If the place to\n copy the object code is a network server, the + Corresponding Source\n may be on a different server (operated by you or a third + party)\n that supports equivalent copying facilities, provided you maintain\n + \ clear directions next to the object code saying where to find the\n Corresponding + Source. Regardless of what server hosts the\n Corresponding Source, you remain + obligated to ensure that it is\n available for as long as needed to satisfy + these requirements.\n\n e) Convey the object code using peer-to-peer transmission, + provided\n you inform other peers where the object code and Corresponding\n + \ Source of the work are being offered to the general public at no\n charge + under subsection 6d.\n\n A separable portion of the object code, whose source + code is excluded\nfrom the Corresponding Source as a System Library, need not + be\nincluded in conveying the object code work.\n\n A \"User Product\" is either + (1) a \"consumer product\", which means any\ntangible personal property which + is normally used for personal, family,\nor household purposes, or (2) anything + designed or sold for incorporation\ninto a dwelling. In determining whether a + product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. + \ For a particular\nproduct received by a particular user, \"normally used\" refers + to a\ntypical or common use of that class of product, regardless of the status\nof + the particular user or of the way in which the particular user\nactually uses, + or expects or is expected to use, the product. A product\nis a consumer product + regardless of whether the product has substantial\ncommercial, industrial or non-consumer + uses, unless such uses represent\nthe only significant mode of use of the product.\n\n + \ \"Installation Information\" for a User Product means any methods,\nprocedures, + authorization keys, or other information required to install\nand execute modified + versions of a covered work in that User Product from\na modified version of its + Corresponding Source. The information must\nsuffice to ensure that the continued + functioning of the modified object\ncode is in no case prevented or interfered + with solely because\nmodification has been made.\n\n If you convey an object + code work under this section in, or with, or\nspecifically for use in, a User + Product, and the conveying occurs as\npart of a transaction in which the right + of possession and use of the\nUser Product is transferred to the recipient in + perpetuity or for a\nfixed term (regardless of how the transaction is characterized), + the\nCorresponding Source conveyed under this section must be accompanied\nby + the Installation Information. But this requirement does not apply\nif neither + you nor any third party retains the ability to install\nmodified object code on + the User Product (for example, the work has\nbeen installed in ROM).\n\n The + requirement to provide Installation Information does not include a\nrequirement + to continue to provide support service, warranty, or updates\nfor a work that + has been modified or installed by the recipient, or for\nthe User Product in which + it has been modified or installed. Access to a\nnetwork may be denied when the + modification itself materially and\nadversely affects the operation of the network + or violates the rules and\nprotocols for communication across the network.\n\n + \ Corresponding Source conveyed, and Installation Information provided,\nin accord + with this section must be in a format that is publicly\ndocumented (and with an + implementation available to the public in\nsource code form), and must require + no special password or key for\nunpacking, reading or copying.\n\n 7. Additional + Terms.\n\n \"Additional permissions\" are terms that supplement the terms of + this\nLicense by making exceptions from one or more of its conditions.\nAdditional + permissions that are applicable to the entire Program shall\nbe treated as though + they were included in this License, to the extent\nthat they are valid under applicable + law. If additional permissions\napply only to part of the Program, that part + may be used separately\nunder those permissions, but the entire Program remains + governed by\nthis License without regard to the additional permissions.\n\n When + you convey a copy of a covered work, you may at your option\nremove any additional + permissions from that copy, or from any part of\nit. (Additional permissions + may be written to require their own\nremoval in certain cases when you modify + the work.) You may place\nadditional permissions on material, added by you to + a covered work,\nfor which you have or can give appropriate copyright permission.\n\n + \ Notwithstanding any other provision of this License, for material you\nadd to + a covered work, you may (if authorized by the copyright holders of\nthat material) + supplement the terms of this License with terms:\n\n a) Disclaiming warranty + or limiting liability differently from the\n terms of sections 15 and 16 of + this License; or\n\n b) Requiring preservation of specified reasonable legal + notices or\n author attributions in that material or in the Appropriate Legal\n + \ Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation + of the origin of that material, or\n requiring that modified versions of such + material be marked in\n reasonable ways as different from the original version; + or\n\n d) Limiting the use for publicity purposes of names of licensors or\n + \ authors of the material; or\n\n e) Declining to grant rights under trademark + law for use of some\n trade names, trademarks, or service marks; or\n\n f) + Requiring indemnification of licensors and authors of that\n material by anyone + who conveys the material (or modified versions of\n it) with contractual assumptions + of liability to the recipient, for\n any liability that these contractual assumptions + directly impose on\n those licensors and authors.\n\n All other non-permissive + additional terms are considered \"further\nrestrictions\" within the meaning of + section 10. If the Program as you\nreceived it, or any part of it, contains a + notice stating that it is\ngoverned by this License along with a term that is + a further\nrestriction, you may remove that term. If a license document contains\na + further restriction but permits relicensing or conveying under this\nLicense, + you may add to a covered work material governed by the terms\nof that license + document, provided that the further restriction does\nnot survive such relicensing + or conveying.\n\n If you add terms to a covered work in accord with this section, + you\nmust place, in the relevant source files, a statement of the\nadditional + terms that apply to those files, or a notice indicating\nwhere to find the applicable + terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform + of a separately written license, or stated as exceptions;\nthe above requirements + apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a + covered work except as expressly\nprovided under this License. Any attempt otherwise + to propagate or\nmodify it is void, and will automatically terminate your rights + under\nthis License (including any patent licenses granted under the third\nparagraph + of section 11).\n\n However, if you cease all violation of this License, then + your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, + unless and until the copyright holder explicitly and\nfinally terminates your + license, and (b) permanently, if the copyright\nholder fails to notify you of + the violation by some reasonable means\nprior to 60 days after the cessation.\n\n + \ Moreover, your license from a particular copyright holder is\nreinstated permanently + if the copyright holder notifies you of the\nviolation by some reasonable means, + this is the first time you have\nreceived notice of violation of this License + (for any work) from that\ncopyright holder, and you cure the violation prior to + 30 days after\nyour receipt of the notice.\n\n Termination of your rights under + this section does not terminate the\nlicenses of parties who have received copies + or rights from you under\nthis License. If your rights have been terminated and + not permanently\nreinstated, you do not qualify to receive new licenses for the + same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n + \ You are not required to accept this License in order to receive or\nrun a copy + of the Program. Ancillary propagation of a covered work\noccurring solely as + a consequence of using peer-to-peer transmission\nto receive a copy likewise does + not require acceptance. However,\nnothing other than this License grants you + permission to propagate or\nmodify any covered work. These actions infringe copyright + if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered + work, you indicate your acceptance of this License to do so.\n\n 10. Automatic + Licensing of Downstream Recipients.\n\n Each time you convey a covered work, + the recipient automatically\nreceives a license from the original licensors, to + run, modify and\npropagate that work, subject to this License. You are not responsible\nfor + enforcing compliance by third parties with this License.\n\n An \"entity transaction\" + is a transaction transferring control of an\norganization, or substantially all + assets of one, or subdividing an\norganization, or merging organizations. If + propagation of a covered\nwork results from an entity transaction, each party + to that\ntransaction who receives a copy of the work also receives whatever\nlicenses + to the work the party's predecessor in interest had or could\ngive under the previous + paragraph, plus a right to possession of the\nCorresponding Source of the work + from the predecessor in interest, if\nthe predecessor has it or can get it with + reasonable efforts.\n\n You may not impose any further restrictions on the exercise + of the\nrights granted or affirmed under this License. For example, you may\nnot + impose a license fee, royalty, or other charge for exercise of\nrights granted + under this License, and you may not initiate litigation\n(including a cross-claim + or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by + making, using, selling, offering for\nsale, or importing the Program or any portion + of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes + use under this\nLicense of the Program or a work on which the Program is based. + \ The\nwork thus licensed is called the contributor's \"contributor version\".\n\n + \ A contributor's \"essential patent claims\" are all patent claims\nowned or + controlled by the contributor, whether already acquired or\nhereafter acquired, + that would be infringed by some manner, permitted\nby this License, of making, + using, or selling its contributor version,\nbut do not include claims that would + be infringed only as a\nconsequence of further modification of the contributor + version. For\npurposes of this definition, \"control\" includes the right to + grant\npatent sublicenses in a manner consistent with the requirements of\nthis + License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent + license under the contributor's essential patent claims, to\nmake, use, sell, + offer for sale, import and otherwise run, modify and\npropagate the contents of + its contributor version.\n\n In the following three paragraphs, a \"patent license\" + is any express\nagreement or commitment, however denominated, not to enforce a + patent\n(such as an express permission to practice a patent or covenant not to\nsue + for patent infringement). To \"grant\" such a patent license to a\nparty means + to make such an agreement or commitment not to enforce a\npatent against the party.\n\n + \ If you convey a covered work, knowingly relying on a patent license,\nand the + Corresponding Source of the work is not available for anyone\nto copy, free of + charge and under the terms of this License, through a\npublicly available network + server or other readily accessible means,\nthen you must either (1) cause the + Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of + the benefit of the\npatent license for this particular work, or (3) arrange, in + a manner\nconsistent with the requirements of this License, to extend the patent\nlicense + to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge + that, but for the patent license, your conveying the\ncovered work in a country, + or your recipient's use of the covered work\nin a country, would infringe one + or more identifiable patents in that\ncountry that you have reason to believe + are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, + you convey, or propagate by procuring conveyance of, a\ncovered work, and grant + a patent license to some of the parties\nreceiving the covered work authorizing + them to use, propagate, modify\nor convey a specific copy of the covered work, + then the patent license\nyou grant is automatically extended to all recipients + of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" + if it does not include within\nthe scope of its coverage, prohibits the exercise + of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically + granted under this License. You may not convey a covered\nwork if you are a party + to an arrangement with a third party that is\nin the business of distributing + software, under which you make payment\nto the third party based on the extent + of your activity of conveying\nthe work, and under which the third party grants, + to any of the\nparties who would receive the covered work from you, a discriminatory\npatent + license (a) in connection with copies of the covered work\nconveyed by you (or + copies made from those copies), or (b) primarily\nfor and in connection with specific + products or compilations that\ncontain the covered work, unless you entered into + that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n + \ Nothing in this License shall be construed as excluding or limiting\nany implied + license or other defenses to infringement that may\notherwise be available to + you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n + \ If conditions are imposed on you (whether by court order, agreement or\notherwise) + that contradict the conditions of this License, they do not\nexcuse you from the + conditions of this License. If you cannot convey a\ncovered work so as to satisfy + simultaneously your obligations under this\nLicense and any other pertinent obligations, + then as a consequence you may\nnot convey it at all. For example, if you agree + to terms that obligate you\nto collect a royalty for further conveying from those + to whom you convey\nthe Program, the only way you could satisfy both those terms + and this\nLicense would be to refrain entirely from conveying the Program.\n\n + \ 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any + other provision of this License, you have\npermission to link or combine any covered + work with a work licensed\nunder version 3 of the GNU Affero General Public License + into a single\ncombined work, and to convey the resulting work. The terms of + this\nLicense will continue to apply to the part which is the covered work,\nbut + the special requirements of the GNU Affero General Public License,\nsection 13, + concerning interaction through a network will apply to the\ncombination as such.\n\n + \ 14. Revised Versions of this License.\n\n The Free Software Foundation may + publish revised and/or new versions of\nthe GNU General Public License from time + to time. Such new versions will\nbe similar in spirit to the present version, + but may differ in detail to\naddress new problems or concerns.\n\n Each version + is given a distinguishing version number. If the\nProgram specifies that a certain + numbered version of the GNU General\nPublic License \"or any later version\" applies + to it, you have the\noption of following the terms and conditions either of that + numbered\nversion or of any later version published by the Free Software\nFoundation. + \ If the Program does not specify a version number of the\nGNU General Public + License, you may choose any version ever published\nby the Free Software Foundation.\n\n + \ If the Program specifies that a proxy can decide which future\nversions of the + GNU General Public License can be used, that proxy's\npublic statement of acceptance + of a version permanently authorizes you\nto choose that version for the Program.\n\n + \ Later license versions may give you additional or different\npermissions. However, + no additional obligations are imposed on any\nauthor or copyright holder as a + result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n + \ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE + LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER + PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED + OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND + PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, + YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. + Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR + AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES + AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, + INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT + OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS + OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES + OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH + HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n + \ 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty + and limitation of liability provided\nabove cannot be given local legal effect + according to their terms,\nreviewing courts shall apply local law that most closely + approximates\nan absolute waiver of all civil liability in connection with the\nProgram, + unless a warranty or assumption of liability accompanies a\ncopy of the Program + in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How + to Apply These Terms to Your New Programs\n\n If you develop a new program, and + you want it to be of the greatest\npossible use to the public, the best way to + achieve this is to make it\nfree software which everyone can redistribute and + change under these terms.\n\n To do so, attach the following notices to the program. + \ It is safest\nto attach them to the start of each source file to most effectively\nstate + the exclusion of warranty; and each file should have at least\nthe \"copyright\" + line and a pointer to where the full notice is found.\n\n \n Copyright (C) + \ \n\n This program is free software: you can redistribute + it and/or modify\n it under the terms of the GNU General Public License as + published by\n the Free Software Foundation, either version 3 of the License, + or\n (at your option) any later version.\n\n This program is distributed + in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even + the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + \ See the\n GNU General Public License for more details.\n\n You should + have received a copy of the GNU General Public License\n along with this program. + \ If not, see .\n\nAlso add information on how + to contact you by electronic and paper mail.\n\n If the program does terminal + interaction, make it output a short\nnotice like this when it starts in an interactive + mode:\n\n Copyright (C) \n This program + comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n This is free + software, and you are welcome to redistribute it\n under certain conditions; + type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' + should show the appropriate\nparts of the General Public License. Of course, + your program's commands\nmight be different; for a GUI interface, you would use + an \"about box\".\n\n You should also get your employer (if you work as a programmer) + or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor + more information on this, and how to apply and follow the GNU GPL, see\n.\n\n + \ The GNU General Public License does not permit incorporating your program\ninto + proprietary programs. If your program is a subroutine library, you\nmay consider + it more useful to permit linking proprietary applications with\nthe library. If + this is what you want to do, use the GNU Lesser General\nPublic License instead + of this License. But first, please read\n.\n" +notices: [] diff --git a/.licenses/go/github.com/arduino/pluggable-discovery-protocol-handler/v2.dep.yml b/.licenses/go/github.com/arduino/pluggable-discovery-protocol-handler/v2.dep.yml new file mode 100644 index 00000000000..0825582ba52 --- /dev/null +++ b/.licenses/go/github.com/arduino/pluggable-discovery-protocol-handler/v2.dep.yml @@ -0,0 +1,709 @@ +--- +name: github.com/arduino/pluggable-discovery-protocol-handler/v2 +version: v2.2.1 +type: go +summary: Package discovery is a library for handling the Arduino Pluggable-Discovery + protocol (https://github.com/arduino/tooling-rfcs/blob/main/RFCs/0002-pluggable-discovery.md#pluggable-discovery-api-via-stdinstdout) +homepage: https://pkg.go.dev/github.com/arduino/pluggable-discovery-protocol-handler/v2 +license: other +licenses: +- sources: LICENSE.txt + text: | + This file includes licensing information for serial-discovery + + Copyright (c) 2018 ARDUINO SA (www.arduino.cc) + + The software is released under the GNU General Public License, which covers the main body + of the serial-discovery code. The terms of this license can be found at: + https://www.gnu.org/licenses/gpl-3.0.en.html + + You can be released from the requirements of the above licenses by purchasing + a commercial license. Buying such a license is mandatory if you want to modify or + otherwise use the software for commercial activities involving the Arduino + software without disclosing the source code of your own applications. To purchase + a commercial license, send an email to license@arduino.cc + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for + software and other kinds of works. + + The licenses for most software and other practical works are designed + to take away your freedom to share and change the works. By contrast, + the GNU General Public License is intended to guarantee your freedom to + share and change all versions of a program--to make sure it remains free + software for all its users. We, the Free Software Foundation, use the + GNU General Public License for most of our software; it applies also to + any other work released this way by its authors. You can apply it to + your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for + them if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you + these rights or asking you to surrender the rights. Therefore, you have + certain responsibilities if you distribute copies of the software, or if + you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether + gratis or for a fee, you must pass on to the recipients the same + freedoms that you received. You must make sure that they, too, receive + or can get the source code. And you must show them these terms so they + know their rights. + + Developers that use the GNU GPL protect your rights with two steps: + (1) assert copyright on the software, and (2) offer you this License + giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains + that there is no warranty for this free software. For both users' and + authors' sake, the GPL requires that modified versions be marked as + changed, so that their problems will not be attributed erroneously to + authors of previous versions. + + Some devices are designed to deny users access to install or run + modified versions of the software inside them, although the manufacturer + can do so. This is fundamentally incompatible with the aim of + protecting users' freedom to change the software. The systematic + pattern of such abuse occurs in the area of products for individuals to + use, which is precisely where it is most unacceptable. Therefore, we + have designed this version of the GPL to prohibit the practice for those + products. If such problems arise substantially in other domains, we + stand ready to extend this provision to those domains in future versions + of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. + States should not allow patents to restrict development and use of + software on general-purpose computers, but in those that do, we wish to + avoid the special danger that patents applied to a free program could + make it effectively proprietary. To prevent this, the GPL assures that + patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of + works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this + License. Each licensee is addressed as "you". "Licensees" and + "recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work + in a fashion requiring copyright permission, other than the making of an + exact copy. The resulting work is called a "modified version" of the + earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based + on the Program. + + To "propagate" a work means to do anything with it that, without + permission, would make you directly or secondarily liable for + infringement under applicable copyright law, except executing it on a + computer or modifying a private copy. Propagation includes copying, + distribution (with or without modification), making available to the + public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other + parties to make or receive copies. Mere interaction with a user through + a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" + to the extent that it includes a convenient and prominently visible + feature that (1) displays an appropriate copyright notice, and (2) + tells the user that there is no warranty for the work (except to the + extent that warranties are provided), that licensees may convey the + work under this License, and how to view a copy of this License. If + the interface presents a list of user commands or options, such as a + menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work + for making modifications to it. "Object code" means any non-source + form of a work. + + A "Standard Interface" means an interface that either is an official + standard defined by a recognized standards body, or, in the case of + interfaces specified for a particular programming language, one that + is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other + than the work as a whole, that (a) is included in the normal form of + packaging a Major Component, but which is not part of that Major + Component, and (b) serves only to enable use of the work with that + Major Component, or to implement a Standard Interface for which an + implementation is available to the public in source code form. A + "Major Component", in this context, means a major essential component + (kernel, window system, and so on) of the specific operating system + (if any) on which the executable work runs, or a compiler used to + produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all + the source code needed to generate, install, and (for an executable + work) run the object code and to modify the work, including scripts to + control those activities. However, it does not include the work's + System Libraries, or general-purpose tools or generally available free + programs which are used unmodified in performing those activities but + which are not part of the work. For example, Corresponding Source + includes interface definition files associated with source files for + the work, and the source code for shared libraries and dynamically + linked subprograms that the work is specifically designed to require, + such as by intimate data communication or control flow between those + subprograms and other parts of the work. + + The Corresponding Source need not include anything that users + can regenerate automatically from other parts of the Corresponding + Source. + + The Corresponding Source for a work in source code form is that + same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of + copyright on the Program, and are irrevocable provided the stated + conditions are met. This License explicitly affirms your unlimited + permission to run the unmodified Program. The output from running a + covered work is covered by this License only if the output, given its + content, constitutes a covered work. This License acknowledges your + rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not + convey, without conditions so long as your license otherwise remains + in force. You may convey covered works to others for the sole purpose + of having them make modifications exclusively for you, or provide you + with facilities for running those works, provided that you comply with + the terms of this License in conveying all material for which you do + not control copyright. Those thus making or running the covered works + for you must do so exclusively on your behalf, under your direction + and control, on terms that prohibit them from making any copies of + your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section 10 + makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological + measure under any applicable law fulfilling obligations under article + 11 of the WIPO copyright treaty adopted on 20 December 1996, or + similar laws prohibiting or restricting circumvention of such + measures. + + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such circumvention + is effected by exercising rights under this License with respect to + the covered work, and you disclaim any intention to limit operation or + modification of the work as a means of enforcing, against the work's + users, your or third parties' legal rights to forbid circumvention of + technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you + receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice; + keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the code; + keep intact all notices of the absence of any warranty; and give all + recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, + and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to + produce it from the Program, in the form of source code under the + terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent + works, which are not by their nature extensions of the covered work, + and which are not combined with it such as to form a larger program, + in or on a volume of a storage or distribution medium, is called an + "aggregate" if the compilation and its resulting copyright are not + used to limit the access or legal rights of the compilation's users + beyond what the individual works permit. Inclusion of a covered work + in an aggregate does not cause this License to apply to the other + parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms + of sections 4 and 5, provided that you also convey the + machine-readable Corresponding Source under the terms of this License, + in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded + from the Corresponding Source as a System Library, need not be + included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any + tangible personal property which is normally used for personal, family, + or household purposes, or (2) anything designed or sold for incorporation + into a dwelling. In determining whether a product is a consumer product, + doubtful cases shall be resolved in favor of coverage. For a particular + product received by a particular user, "normally used" refers to a + typical or common use of that class of product, regardless of the status + of the particular user or of the way in which the particular user + actually uses, or expects or is expected to use, the product. A product + is a consumer product regardless of whether the product has substantial + commercial, industrial or non-consumer uses, unless such uses represent + the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, + procedures, authorization keys, or other information required to install + and execute modified versions of a covered work in that User Product from + a modified version of its Corresponding Source. The information must + suffice to ensure that the continued functioning of the modified object + code is in no case prevented or interfered with solely because + modification has been made. + + If you convey an object code work under this section in, or with, or + specifically for use in, a User Product, and the conveying occurs as + part of a transaction in which the right of possession and use of the + User Product is transferred to the recipient in perpetuity or for a + fixed term (regardless of how the transaction is characterized), the + Corresponding Source conveyed under this section must be accompanied + by the Installation Information. But this requirement does not apply + if neither you nor any third party retains the ability to install + modified object code on the User Product (for example, the work has + been installed in ROM). + + The requirement to provide Installation Information does not include a + requirement to continue to provide support service, warranty, or updates + for a work that has been modified or installed by the recipient, or for + the User Product in which it has been modified or installed. Access to a + network may be denied when the modification itself materially and + adversely affects the operation of the network or violates the rules and + protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, + in accord with this section must be in a format that is publicly + documented (and with an implementation available to the public in + source code form), and must require no special password or key for + unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this + License by making exceptions from one or more of its conditions. + Additional permissions that are applicable to the entire Program shall + be treated as though they were included in this License, to the extent + that they are valid under applicable law. If additional permissions + apply only to part of the Program, that part may be used separately + under those permissions, but the entire Program remains governed by + this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option + remove any additional permissions from that copy, or from any part of + it. (Additional permissions may be written to require their own + removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, + for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you + add to a covered work, you may (if authorized by the copyright holders of + that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as you + received it, or any part of it, contains a notice stating that it is + governed by this License along with a term that is a further + restriction, you may remove that term. If a license document contains + a further restriction but permits relicensing or conveying under this + License, you may add to a covered work material governed by the terms + of that license document, provided that the further restriction does + not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you + must place, in the relevant source files, a statement of the + additional terms that apply to those files, or a notice indicating + where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the + form of a separately written license, or stated as exceptions; + the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly + provided under this License. Any attempt otherwise to propagate or + modify it is void, and will automatically terminate your rights under + this License (including any patent licenses granted under the third + paragraph of section 11). + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the copyright + holder fails to notify you of the violation by some reasonable means + prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from that + copyright holder, and you cure the violation prior to 30 days after + your receipt of the notice. + + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under + this License. If your rights have been terminated and not permanently + reinstated, you do not qualify to receive new licenses for the same + material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or + run a copy of the Program. Ancillary propagation of a covered work + occurring solely as a consequence of using peer-to-peer transmission + to receive a copy likewise does not require acceptance. However, + nothing other than this License grants you permission to propagate or + modify any covered work. These actions infringe copyright if you do + not accept this License. Therefore, by modifying or propagating a + covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically + receives a license from the original licensors, to run, modify and + propagate that work, subject to this License. You are not responsible + for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a covered + work results from an entity transaction, each party to that + transaction who receives a copy of the work also receives whatever + licenses to the work the party's predecessor in interest had or could + give under the previous paragraph, plus a right to possession of the + Corresponding Source of the work from the predecessor in interest, if + the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the + rights granted or affirmed under this License. For example, you may + not impose a license fee, royalty, or other charge for exercise of + rights granted under this License, and you may not initiate litigation + (including a cross-claim or counterclaim in a lawsuit) alleging that + any patent claim is infringed by making, using, selling, offering for + sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this + License of the Program or a work on which the Program is based. The + work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims + owned or controlled by the contributor, whether already acquired or + hereafter acquired, that would be infringed by some manner, permitted + by this License, of making, using, or selling its contributor version, + but do not include claims that would be infringed only as a + consequence of further modification of the contributor version. For + purposes of this definition, "control" includes the right to grant + patent sublicenses in a manner consistent with the requirements of + this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free + patent license under the contributor's essential patent claims, to + make, use, sell, offer for sale, import and otherwise run, modify and + propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express + agreement or commitment, however denominated, not to enforce a patent + (such as an express permission to practice a patent or covenant not to + sue for patent infringement). To "grant" such a patent license to a + party means to make such an agreement or commitment not to enforce a + patent against the party. + + If you convey a covered work, knowingly relying on a patent license, + and the Corresponding Source of the work is not available for anyone + to copy, free of charge and under the terms of this License, through a + publicly available network server or other readily accessible means, + then you must either (1) cause the Corresponding Source to be so + available, or (2) arrange to deprive yourself of the benefit of the + patent license for this particular work, or (3) arrange, in a manner + consistent with the requirements of this License, to extend the patent + license to downstream recipients. "Knowingly relying" means you have + actual knowledge that, but for the patent license, your conveying the + covered work in a country, or your recipient's use of the covered work + in a country, would infringe one or more identifiable patents in that + country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or + arrangement, you convey, or propagate by procuring conveyance of, a + covered work, and grant a patent license to some of the parties + receiving the covered work authorizing them to use, propagate, modify + or convey a specific copy of the covered work, then the patent license + you grant is automatically extended to all recipients of the covered + work and works based on it. + + A patent license is "discriminatory" if it does not include within + the scope of its coverage, prohibits the exercise of, or is + conditioned on the non-exercise of one or more of the rights that are + specifically granted under this License. You may not convey a covered + work if you are a party to an arrangement with a third party that is + in the business of distributing software, under which you make payment + to the third party based on the extent of your activity of conveying + the work, and under which the third party grants, to any of the + parties who would receive the covered work from you, a discriminatory + patent license (a) in connection with copies of the covered work + conveyed by you (or copies made from those copies), or (b) primarily + for and in connection with specific products or compilations that + contain the covered work, unless you entered into that arrangement, + or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting + any implied license or other defenses to infringement that may + otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot convey a + covered work so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you may + not convey it at all. For example, if you agree to terms that obligate you + to collect a royalty for further conveying from those to whom you convey + the Program, the only way you could satisfy both those terms and this + License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have + permission to link or combine any covered work with a work licensed + under version 3 of the GNU Affero General Public License into a single + combined work, and to convey the resulting work. The terms of this + License will continue to apply to the part which is the covered work, + but the special requirements of the GNU Affero General Public License, + section 13, concerning interaction through a network will apply to the + combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of + the GNU General Public License from time to time. Such new versions will + be similar in spirit to the present version, but may differ in detail to + address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies that a certain numbered version of the GNU General + Public License "or any later version" applies to it, you have the + option of following the terms and conditions either of that numbered + version or of any later version published by the Free Software + Foundation. If the Program does not specify a version number of the + GNU General Public License, you may choose any version ever published + by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future + versions of the GNU General Public License can be used, that proxy's + public statement of acceptance of a version permanently authorizes you + to choose that version for the Program. + + Later license versions may give you additional or different + permissions. However, no additional obligations are imposed on any + author or copyright holder as a result of your choosing to follow a + later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY + OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM + IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF + ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS + THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY + GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE + USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), + EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided + above cannot be given local legal effect according to their terms, + reviewing courts shall apply local law that most closely approximates + an absolute waiver of all civil liability in connection with the + Program, unless a warranty or assumption of liability accompanies a + copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively + state the exclusion of warranty; and each file should have at least + the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short + notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the appropriate + parts of the General Public License. Of course, your program's commands + might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, + if any, to sign a "copyright disclaimer" for the program, if necessary. + For more information on this, and how to apply and follow the GNU GPL, see + . + + The GNU General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications with + the library. If this is what you want to do, use the GNU Lesser General + Public License instead of this License. But first, please read + . +- sources: README.md + text: |- + Copyright (c) 2021 ARDUINO SA (www.arduino.cc) + + The software is released under the GNU General Public License, which covers the main body + of the serial-discovery code. The terms of this license can be found at: + https://www.gnu.org/licenses/gpl-3.0.en.html + + See [LICENSE.txt](https://github.com/arduino/pluggable-discovery-protocol-handler/blob/master/LICENSE.txt) for details. +notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/dh/x25519.dep.yml b/.licenses/go/github.com/cloudflare/circl/dh/x25519.dep.yml index 77b9b07f0d1..fd3120d3677 100644 --- a/.licenses/go/github.com/cloudflare/circl/dh/x25519.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/dh/x25519.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/dh/x25519 -version: v1.3.3 +version: v1.6.1 type: go summary: Package x25519 provides Diffie-Hellman functions as specified in RFC-7748. homepage: https://pkg.go.dev/github.com/cloudflare/circl/dh/x25519 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/dh/x448.dep.yml b/.licenses/go/github.com/cloudflare/circl/dh/x448.dep.yml index 77717903ce6..f86fe6dd093 100644 --- a/.licenses/go/github.com/cloudflare/circl/dh/x448.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/dh/x448.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/dh/x448 -version: v1.3.3 +version: v1.6.1 type: go summary: Package x448 provides Diffie-Hellman functions as specified in RFC-7748. homepage: https://pkg.go.dev/github.com/cloudflare/circl/dh/x448 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/ecc/goldilocks.dep.yml b/.licenses/go/github.com/cloudflare/circl/ecc/goldilocks.dep.yml index 8a0c15834f9..b2fdae77357 100644 --- a/.licenses/go/github.com/cloudflare/circl/ecc/goldilocks.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/ecc/goldilocks.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/cloudflare/circl/ecc/goldilocks -version: v1.3.3 +version: v1.6.1 type: go summary: Package goldilocks provides elliptic curve operations over the goldilocks curve. homepage: https://pkg.go.dev/github.com/cloudflare/circl/ecc/goldilocks license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -66,6 +66,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/internal/conv.dep.yml b/.licenses/go/github.com/cloudflare/circl/internal/conv.dep.yml index 06a42797314..b86614ebdf0 100644 --- a/.licenses/go/github.com/cloudflare/circl/internal/conv.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/internal/conv.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/internal/conv -version: v1.3.3 +version: v1.6.1 type: go summary: homepage: https://pkg.go.dev/github.com/cloudflare/circl/internal/conv license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/internal/sha3.dep.yml b/.licenses/go/github.com/cloudflare/circl/internal/sha3.dep.yml index 2c8ed2788fd..c065af5cfd2 100644 --- a/.licenses/go/github.com/cloudflare/circl/internal/sha3.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/internal/sha3.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/cloudflare/circl/internal/sha3 -version: v1.3.3 +version: v1.6.1 type: go summary: Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202. homepage: https://pkg.go.dev/github.com/cloudflare/circl/internal/sha3 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -66,6 +66,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/math.dep.yml b/.licenses/go/github.com/cloudflare/circl/math.dep.yml index 4eea3a9b5ba..867a95442bd 100644 --- a/.licenses/go/github.com/cloudflare/circl/math.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/math.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/math -version: v1.3.3 +version: v1.6.1 type: go summary: Package math provides some utility functions for big integers. homepage: https://pkg.go.dev/github.com/cloudflare/circl/math license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/math/fp25519.dep.yml b/.licenses/go/github.com/cloudflare/circl/math/fp25519.dep.yml index c83e3e70004..fd7c532d5ee 100644 --- a/.licenses/go/github.com/cloudflare/circl/math/fp25519.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/math/fp25519.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/math/fp25519 -version: v1.3.3 +version: v1.6.1 type: go summary: Package fp25519 provides prime field arithmetic over GF(2^255-19). homepage: https://pkg.go.dev/github.com/cloudflare/circl/math/fp25519 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/math/fp448.dep.yml b/.licenses/go/github.com/cloudflare/circl/math/fp448.dep.yml index b88b20cae0a..a0449597c0f 100644 --- a/.licenses/go/github.com/cloudflare/circl/math/fp448.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/math/fp448.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/math/fp448 -version: v1.3.3 +version: v1.6.1 type: go summary: Package fp448 provides prime field arithmetic over GF(2^448-2^224-1). homepage: https://pkg.go.dev/github.com/cloudflare/circl/math/fp448 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/math/mlsbset.dep.yml b/.licenses/go/github.com/cloudflare/circl/math/mlsbset.dep.yml index e3eccd73248..5ab6f36f848 100644 --- a/.licenses/go/github.com/cloudflare/circl/math/mlsbset.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/math/mlsbset.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/math/mlsbset -version: v1.3.3 +version: v1.6.1 type: go summary: Package mlsbset provides a constant-time exponentiation method with precomputation. homepage: https://pkg.go.dev/github.com/cloudflare/circl/math/mlsbset license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/sign.dep.yml b/.licenses/go/github.com/cloudflare/circl/sign.dep.yml index d1a2b2ddc6d..bbed7b93929 100644 --- a/.licenses/go/github.com/cloudflare/circl/sign.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/sign.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/sign -version: v1.3.3 +version: v1.6.1 type: go summary: Package sign provides unified interfaces for signature schemes. homepage: https://pkg.go.dev/github.com/cloudflare/circl/sign license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/sign/ed25519.dep.yml b/.licenses/go/github.com/cloudflare/circl/sign/ed25519.dep.yml index 00dee398327..ce8545230c1 100644 --- a/.licenses/go/github.com/cloudflare/circl/sign/ed25519.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/sign/ed25519.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/sign/ed25519 -version: v1.3.3 +version: v1.6.1 type: go summary: Package ed25519 implements Ed25519 signature scheme as described in RFC-8032. homepage: https://pkg.go.dev/github.com/cloudflare/circl/sign/ed25519 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/cloudflare/circl/sign/ed448.dep.yml b/.licenses/go/github.com/cloudflare/circl/sign/ed448.dep.yml index fbfdd35c65e..a18f71b59cf 100644 --- a/.licenses/go/github.com/cloudflare/circl/sign/ed448.dep.yml +++ b/.licenses/go/github.com/cloudflare/circl/sign/ed448.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cloudflare/circl/sign/ed448 -version: v1.3.3 +version: v1.6.1 type: go summary: Package ed448 implements Ed448 signature scheme as described in RFC-8032. homepage: https://pkg.go.dev/github.com/cloudflare/circl/sign/ed448 license: other licenses: -- sources: circl@v1.3.3/LICENSE +- sources: circl@v1.6.1/LICENSE text: | Copyright (c) 2019 Cloudflare. All rights reserved. @@ -65,6 +65,6 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: circl@v1.3.3/README.md +- sources: circl@v1.6.1/README.md text: The project is licensed under the [BSD-3-Clause License](./LICENSE). notices: [] diff --git a/.licenses/go/github.com/codeclysm/extract/v3.dep.yml b/.licenses/go/github.com/codeclysm/extract/v4.dep.yml similarity index 91% rename from .licenses/go/github.com/codeclysm/extract/v3.dep.yml rename to .licenses/go/github.com/codeclysm/extract/v4.dep.yml index 0c6f99746ad..9defe5f88fd 100644 --- a/.licenses/go/github.com/codeclysm/extract/v3.dep.yml +++ b/.licenses/go/github.com/codeclysm/extract/v4.dep.yml @@ -1,10 +1,10 @@ --- -name: github.com/codeclysm/extract/v3 -version: v3.1.1 +name: github.com/codeclysm/extract/v4 +version: v4.0.0 type: go summary: Package extract allows to extract archives in zip, tar.gz or tar.bz2 formats easily. -homepage: https://pkg.go.dev/github.com/codeclysm/extract/v3 +homepage: https://pkg.go.dev/github.com/codeclysm/extract/v4 license: mit licenses: - sources: LICENSE diff --git a/.licenses/go/github.com/cpuguy83/go-md2man/v2/md2man.dep.yml b/.licenses/go/github.com/cpuguy83/go-md2man/v2/md2man.dep.yml index 2aacfd18c50..64115882aeb 100644 --- a/.licenses/go/github.com/cpuguy83/go-md2man/v2/md2man.dep.yml +++ b/.licenses/go/github.com/cpuguy83/go-md2man/v2/md2man.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/cpuguy83/go-md2man/v2/md2man -version: v2.0.2 +version: v2.0.6 type: go summary: homepage: https://pkg.go.dev/github.com/cpuguy83/go-md2man/v2/md2man license: mit licenses: -- sources: v2@v2.0.2/LICENSE.md +- sources: v2@v2.0.6/LICENSE.md text: | The MIT License (MIT) diff --git a/.licenses/go/github.com/cyphar/filepath-securejoin.dep.yml b/.licenses/go/github.com/cyphar/filepath-securejoin.dep.yml index 8f76b76fd35..868b96d40a5 100644 --- a/.licenses/go/github.com/cyphar/filepath-securejoin.dep.yml +++ b/.licenses/go/github.com/cyphar/filepath-securejoin.dep.yml @@ -1,16 +1,16 @@ --- name: github.com/cyphar/filepath-securejoin -version: v0.2.4 +version: v0.4.1 type: go -summary: Package securejoin is an implementation of the hopefully-soon-to-be-included - SecureJoin helper that is meant to be part of the "path/filepath" package. +summary: Package securejoin implements a set of helpers to make it easier to write + Go code that is safe against symlink-related escape attacks. homepage: https://pkg.go.dev/github.com/cyphar/filepath-securejoin license: bsd-3-clause licenses: - sources: LICENSE text: | Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved. - Copyright (C) 2017 SUSE LLC. All rights reserved. + Copyright (C) 2017-2024 SUSE LLC. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/.licenses/go/github.com/fatih/color.dep.yml b/.licenses/go/github.com/fatih/color.dep.yml index fa66af7e9d0..3c49fefa0e5 100644 --- a/.licenses/go/github.com/fatih/color.dep.yml +++ b/.licenses/go/github.com/fatih/color.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/fatih/color -version: v1.15.0 +version: v1.18.0 type: go summary: Package color is an ANSI color package to output colorized or SGR defined output to the standard output. diff --git a/.licenses/go/github.com/fsnotify/fsnotify.dep.yml b/.licenses/go/github.com/fsnotify/fsnotify.dep.yml index 5cb2ddc7c33..a26cfe1088d 100644 --- a/.licenses/go/github.com/fsnotify/fsnotify.dep.yml +++ b/.licenses/go/github.com/fsnotify/fsnotify.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/fsnotify/fsnotify -version: v1.6.0 +version: v1.8.0 type: go summary: Package fsnotify provides a cross-platform interface for file system notifications. homepage: https://pkg.go.dev/github.com/fsnotify/fsnotify diff --git a/.licenses/go/github.com/fsnotify/fsnotify/internal.dep.yml b/.licenses/go/github.com/fsnotify/fsnotify/internal.dep.yml new file mode 100644 index 00000000000..d9a708111a0 --- /dev/null +++ b/.licenses/go/github.com/fsnotify/fsnotify/internal.dep.yml @@ -0,0 +1,36 @@ +--- +name: github.com/fsnotify/fsnotify/internal +version: v1.8.0 +type: go +summary: Package internal contains some helpers. +homepage: https://pkg.go.dev/github.com/fsnotify/fsnotify/internal +license: bsd-3-clause +licenses: +- sources: fsnotify@v1.8.0/LICENSE + text: | + Copyright © 2012 The Go Authors. All rights reserved. + Copyright © fsnotify Authors. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + * Neither the name of Google Inc. nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +notices: [] diff --git a/.licenses/go/github.com/go-git/go-billy/v5.dep.yml b/.licenses/go/github.com/go-git/go-billy/v5.dep.yml index 837015de539..e9a2fb4e896 100644 --- a/.licenses/go/github.com/go-git/go-billy/v5.dep.yml +++ b/.licenses/go/github.com/go-git/go-billy/v5.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/go-git/go-billy/v5 -version: v5.5.0 +version: v5.6.2 type: go summary: homepage: https://pkg.go.dev/github.com/go-git/go-billy/v5 diff --git a/.licenses/go/github.com/go-git/go-billy/v5/helper/chroot.dep.yml b/.licenses/go/github.com/go-git/go-billy/v5/helper/chroot.dep.yml index a4d1640e4e7..59bf81f4477 100644 --- a/.licenses/go/github.com/go-git/go-billy/v5/helper/chroot.dep.yml +++ b/.licenses/go/github.com/go-git/go-billy/v5/helper/chroot.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-billy/v5/helper/chroot -version: v5.5.0 +version: v5.6.2 type: go summary: homepage: https://pkg.go.dev/github.com/go-git/go-billy/v5/helper/chroot license: apache-2.0 licenses: -- sources: v5@v5.5.0/LICENSE +- sources: v5@v5.6.2/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.5.0/README.md +- sources: v5@v5.6.2/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-billy/v5/helper/polyfill.dep.yml b/.licenses/go/github.com/go-git/go-billy/v5/helper/polyfill.dep.yml index 674f8705ace..9734d1379b0 100644 --- a/.licenses/go/github.com/go-git/go-billy/v5/helper/polyfill.dep.yml +++ b/.licenses/go/github.com/go-git/go-billy/v5/helper/polyfill.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-billy/v5/helper/polyfill -version: v5.5.0 +version: v5.6.2 type: go summary: homepage: https://pkg.go.dev/github.com/go-git/go-billy/v5/helper/polyfill license: apache-2.0 licenses: -- sources: v5@v5.5.0/LICENSE +- sources: v5@v5.6.2/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.5.0/README.md +- sources: v5@v5.6.2/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-billy/v5/osfs.dep.yml b/.licenses/go/github.com/go-git/go-billy/v5/osfs.dep.yml index 041506546b9..931014d3906 100644 --- a/.licenses/go/github.com/go-git/go-billy/v5/osfs.dep.yml +++ b/.licenses/go/github.com/go-git/go-billy/v5/osfs.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-billy/v5/osfs -version: v5.5.0 +version: v5.6.2 type: go summary: Package osfs provides a billy filesystem for the OS. homepage: https://pkg.go.dev/github.com/go-git/go-billy/v5/osfs license: apache-2.0 licenses: -- sources: v5@v5.5.0/LICENSE +- sources: v5@v5.6.2/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.5.0/README.md +- sources: v5@v5.6.2/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-billy/v5/util.dep.yml b/.licenses/go/github.com/go-git/go-billy/v5/util.dep.yml index 1d54d0647fc..743ba6eb11c 100644 --- a/.licenses/go/github.com/go-git/go-billy/v5/util.dep.yml +++ b/.licenses/go/github.com/go-git/go-billy/v5/util.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-billy/v5/util -version: v5.5.0 +version: v5.6.2 type: go summary: homepage: https://pkg.go.dev/github.com/go-git/go-billy/v5/util license: apache-2.0 licenses: -- sources: v5@v5.5.0/LICENSE +- sources: v5@v5.6.2/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.5.0/README.md +- sources: v5@v5.6.2/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5.dep.yml b/.licenses/go/github.com/go-git/go-git/v5.dep.yml index e578fe0864b..c52acf256e0 100644 --- a/.licenses/go/github.com/go-git/go-git/v5.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/go-git/go-git/v5 -version: v5.4.2 +version: v5.16.0 type: go summary: A highly extensible git implementation in pure Go. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5 diff --git a/.licenses/go/github.com/go-git/go-git/v5/config.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/config.dep.yml index bd3dea9b8d8..3dfe6bf1a69 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/config.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/config.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/config -version: v5.4.2 +version: v5.16.0 type: go summary: Package config contains the abstraction of multiple config files homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/config license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/internal/path_util.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/internal/path_util.dep.yml new file mode 100644 index 00000000000..97ef2cec190 --- /dev/null +++ b/.licenses/go/github.com/go-git/go-git/v5/internal/path_util.dep.yml @@ -0,0 +1,214 @@ +--- +name: github.com/go-git/go-git/v5/internal/path_util +version: v5.16.0 +type: go +summary: +homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/internal/path_util +license: apache-2.0 +licenses: +- sources: v5@v5.16.0/LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Sourced Technologies, S.L. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +- sources: v5@v5.16.0/README.md + text: Apache License Version 2.0, see [LICENSE](LICENSE) +notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/internal/revision.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/internal/revision.dep.yml index d9fba01d89c..2318bc714bd 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/internal/revision.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/internal/revision.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/go-git/go-git/v5/internal/revision -version: v5.4.2 +version: v5.16.0 type: go summary: 'Package revision extracts git revision from string More information about revision : https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html' homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/internal/revision license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -210,6 +210,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/internal/url.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/internal/url.dep.yml index b590f0c011d..b12e6554740 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/internal/url.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/internal/url.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/internal/url -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/internal/url license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing.dep.yml index 8832bedbeef..9b8a49f107e 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing -version: v5.4.2 +version: v5.16.0 type: go summary: package plumbing implement the core interfaces and structs used by go-git homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/cache.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/cache.dep.yml index 6c6402d47a3..79aa3b6bb91 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/cache.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/cache.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/cache -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/cache license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/color.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/color.dep.yml index c3bd3a53026..3a84f54412d 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/color.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/color.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/color -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/color license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/filemode.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/filemode.dep.yml index 64866671642..9f6ef9b16ce 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/filemode.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/filemode.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/filemode -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/filemode license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/config.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/config.dep.yml index ef3cc2ff2f2..3c6a36d20c4 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/config.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/config.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/format/config -version: v5.4.2 +version: v5.16.0 type: go summary: Package config implements encoding and decoding of git config files. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/format/config license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/diff.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/diff.dep.yml index 4e3018fedfa..13a4fda9d62 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/diff.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/diff.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/format/diff -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/format/diff license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/gitignore.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/gitignore.dep.yml index 9790e2368c1..fd2cba88c78 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/gitignore.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/gitignore.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/go-git/go-git/v5/plumbing/format/gitignore -version: v5.4.2 +version: v5.16.0 type: go summary: Package gitignore implements matching file system paths to gitignore patterns that can be automatically read from a git repository tree in the order of definition @@ -8,7 +8,7 @@ summary: Package gitignore implements matching file system paths to gitignore pa homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/format/gitignore license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -211,6 +211,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/idxfile.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/idxfile.dep.yml index f46c7348e5e..0e373f69535 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/idxfile.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/idxfile.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/format/idxfile -version: v5.4.2 +version: v5.16.0 type: go summary: Package idxfile implements encoding and decoding of packfile idx files. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/format/idxfile license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/index.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/index.dep.yml index a27872fa31a..48408f33602 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/index.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/index.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/format/index -version: v5.4.2 +version: v5.16.0 type: go summary: Package index implements encoding and decoding of index format files. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/format/index license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/objfile.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/objfile.dep.yml index d24eecbff58..b3a2579f38a 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/objfile.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/objfile.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/format/objfile -version: v5.4.2 +version: v5.16.0 type: go summary: Package objfile implements encoding and decoding of object files. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/format/objfile license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/packfile.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/packfile.dep.yml index eaf5827a5b0..0df36340c9a 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/packfile.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/packfile.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/format/packfile -version: v5.4.2 +version: v5.16.0 type: go summary: Package packfile implements encoding and decoding of packfile format. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/format/packfile license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/pktline.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/pktline.dep.yml index 3a47f94dbc0..c1ea32247cd 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/pktline.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/format/pktline.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/go-git/go-git/v5/plumbing/format/pktline -version: v5.4.2 +version: v5.16.0 type: go summary: Package pktline implements reading payloads form pkt-lines and encoding pkt-lines from payloads. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/format/pktline license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -210,6 +210,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/hash.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/hash.dep.yml new file mode 100644 index 00000000000..8dbce4e6fa9 --- /dev/null +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/hash.dep.yml @@ -0,0 +1,215 @@ +--- +name: github.com/go-git/go-git/v5/plumbing/hash +version: v5.16.0 +type: go +summary: package hash provides a way for managing the underlying hash implementations + used across go-git. +homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/hash +license: apache-2.0 +licenses: +- sources: v5@v5.16.0/LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Sourced Technologies, S.L. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +- sources: v5@v5.16.0/README.md + text: Apache License Version 2.0, see [LICENSE](LICENSE) +notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/object.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/object.dep.yml index 623d786d6a1..d52efcf1be4 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/object.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/object.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/go-git/go-git/v5/plumbing/object -version: v5.4.2 +version: v5.16.0 type: go summary: Package object contains implementations of all Git objects and utility functions to work with them. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/object license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -210,6 +210,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp.dep.yml index cf33fda3c6c..62ce11c1972 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/protocol/packp -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/protocol/packp license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp/capability.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp/capability.dep.yml index 7b3893f0d92..53c4215f7b4 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp/capability.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp/capability.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/protocol/packp/capability -version: v5.4.2 +version: v5.16.0 type: go summary: Package capability defines the server and client capabilities. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/protocol/packp/capability license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband.dep.yml index 45783530e22..d8bde849aac 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband -version: v5.4.2 +version: v5.16.0 type: go summary: Package sideband implements a sideband mutiplex/demultiplexer homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/revlist.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/revlist.dep.yml index dd05d9e90a5..3c6d32c4257 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/revlist.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/revlist.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/go-git/go-git/v5/plumbing/revlist -version: v5.4.2 +version: v5.16.0 type: go summary: Package revlist provides support to access the ancestors of commits, in a similar way as the git-rev-list command. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/revlist license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -210,6 +210,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/storer.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/storer.dep.yml index 001fc8bae87..2bd8f5ddcf6 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/storer.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/storer.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/storer -version: v5.4.2 +version: v5.16.0 type: go summary: Package storer defines the interfaces to store objects, references, etc. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/storer license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport.dep.yml index a8100155f7e..2b31553cda6 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/transport -version: v5.4.2 +version: v5.16.0 type: go summary: Package transport includes the implementation for different transport protocols. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/transport license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/client.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/client.dep.yml index dcaa6c28757..92211f50bf1 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/client.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/client.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/go-git/go-git/v5/plumbing/transport/client -version: v5.4.2 +version: v5.16.0 type: go summary: Package client contains helper function to deal with the different client protocols. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/transport/client license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -210,6 +210,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/file.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/file.dep.yml index 9dd61d1175b..9e8fce34d9f 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/file.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/file.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/transport/file -version: v5.4.2 +version: v5.16.0 type: go summary: Package file implements the file transport protocol. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/transport/file license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/git.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/git.dep.yml index 5cbfc424a95..fe0589e2d11 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/git.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/git.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/transport/git -version: v5.4.2 +version: v5.16.0 type: go summary: Package git implements the git transport protocol. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/transport/git license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/http.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/http.dep.yml index 0761d31f079..659c88f9421 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/http.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/http.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/transport/http -version: v5.4.2 +version: v5.16.0 type: go summary: Package http implements the HTTP transport protocol. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/transport/http license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/internal/common.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/internal/common.dep.yml index c2551eba8c2..af75a9caedb 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/internal/common.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/internal/common.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/transport/internal/common -version: v5.4.2 +version: v5.16.0 type: go summary: Package common implements the git pack protocol with a pluggable transport. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/transport/internal/common license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/server.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/server.dep.yml index a0101bea695..e8c9645297e 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/server.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/server.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/transport/server -version: v5.4.2 +version: v5.16.0 type: go summary: Package server implements the git server protocol. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/transport/server license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/ssh.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/ssh.dep.yml index 93e9cc28ecb..d7e176a6de2 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/ssh.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/plumbing/transport/ssh.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/plumbing/transport/ssh -version: v5.4.2 +version: v5.16.0 type: go summary: Package ssh implements the SSH transport protocol. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/plumbing/transport/ssh license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/storage.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/storage.dep.yml index 57afd5c8acc..32fa1f6baf8 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/storage.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/storage.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/storage -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/storage license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/storage/filesystem.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/storage/filesystem.dep.yml index 785fe51d342..ff4325de3e2 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/storage/filesystem.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/storage/filesystem.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/storage/filesystem -version: v5.4.2 +version: v5.16.0 type: go summary: Package filesystem is a storage backend base on filesystems homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/storage/filesystem license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/storage/filesystem/dotgit.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/storage/filesystem/dotgit.dep.yml index 56572727e88..8e386df1f45 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/storage/filesystem/dotgit.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/storage/filesystem/dotgit.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/storage/filesystem/dotgit -version: v5.4.2 +version: v5.16.0 type: go summary: https://github.com/git/git/blob/master/Documentation/gitrepository-layout.txt homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/storage/filesystem/dotgit license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/storage/memory.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/storage/memory.dep.yml index 5090c08296b..c188fb3b6d8 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/storage/memory.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/storage/memory.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/storage/memory -version: v5.4.2 +version: v5.16.0 type: go summary: Package memory is a storage backend base on memory homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/storage/memory license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/binary.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/binary.dep.yml index 78d1fda9e5b..d16531ee042 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/utils/binary.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/binary.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/go-git/go-git/v5/utils/binary -version: v5.4.2 +version: v5.16.0 type: go -summary: Package binary implements sintax-sugar functions on top of the standard library +summary: Package binary implements syntax-sugar functions on top of the standard library binary package homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/binary license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -210,6 +210,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/diff.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/diff.dep.yml index 30b5b63ed42..e2a00197bf4 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/utils/diff.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/diff.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/go-git/go-git/v5/utils/diff -version: v5.4.2 +version: v5.16.0 type: go summary: Package diff implements line oriented diffs, similar to the ancient Unix diff command. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/diff license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -210,6 +210,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/ioutil.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/ioutil.dep.yml index c99f6f1f8f9..9447f2d5c10 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/utils/ioutil.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/ioutil.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/utils/ioutil -version: v5.4.2 +version: v5.16.0 type: go summary: Package ioutil implements some I/O utility functions. homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/ioutil license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie.dep.yml index 265d420847b..ab1807f53b4 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/go-git/go-git/v5/utils/merkletrie -version: v5.4.2 +version: v5.16.0 type: go summary: Package merkletrie provides support for n-ary trees that are at the same time Merkle trees and Radix trees (tries). homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/merkletrie license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -210,6 +210,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/filesystem.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/filesystem.dep.yml index fc4c222f2de..5f43c47d8d3 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/filesystem.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/filesystem.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/utils/merkletrie/filesystem -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/merkletrie/filesystem license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/index.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/index.dep.yml index 6a55e655e34..3c8cb9529dd 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/index.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/index.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/utils/merkletrie/index -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/merkletrie/index license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/internal/frame.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/internal/frame.dep.yml index f00790b93fb..2730a57ce7b 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/internal/frame.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/internal/frame.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/go-git/go-git/v5/utils/merkletrie/internal/frame -version: v5.4.2 +version: v5.16.0 type: go -summary: +summary: homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/merkletrie/internal/frame license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -209,6 +209,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/noder.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/noder.dep.yml index c42d860de69..02e2df5a64c 100644 --- a/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/noder.dep.yml +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/merkletrie/noder.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/go-git/go-git/v5/utils/merkletrie/noder -version: v5.4.2 +version: v5.16.0 type: go summary: Package noder provide an interface for defining nodes in a merkletrie, their hashes and their paths (a noders and its ancestors). homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/merkletrie/noder license: apache-2.0 licenses: -- sources: v5@v5.4.2/LICENSE +- sources: v5@v5.16.0/LICENSE text: |2 Apache License Version 2.0, January 2004 @@ -210,6 +210,6 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: v5@v5.4.2/README.md +- sources: v5@v5.16.0/README.md text: Apache License Version 2.0, see [LICENSE](LICENSE) notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/sync.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/sync.dep.yml new file mode 100644 index 00000000000..9335b5126cd --- /dev/null +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/sync.dep.yml @@ -0,0 +1,214 @@ +--- +name: github.com/go-git/go-git/v5/utils/sync +version: v5.16.0 +type: go +summary: +homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/sync +license: apache-2.0 +licenses: +- sources: v5@v5.16.0/LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Sourced Technologies, S.L. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +- sources: v5@v5.16.0/README.md + text: Apache License Version 2.0, see [LICENSE](LICENSE) +notices: [] diff --git a/.licenses/go/github.com/go-git/go-git/v5/utils/trace.dep.yml b/.licenses/go/github.com/go-git/go-git/v5/utils/trace.dep.yml new file mode 100644 index 00000000000..abb2b9fec2e --- /dev/null +++ b/.licenses/go/github.com/go-git/go-git/v5/utils/trace.dep.yml @@ -0,0 +1,214 @@ +--- +name: github.com/go-git/go-git/v5/utils/trace +version: v5.16.0 +type: go +summary: +homepage: https://pkg.go.dev/github.com/go-git/go-git/v5/utils/trace +license: apache-2.0 +licenses: +- sources: v5@v5.16.0/LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Sourced Technologies, S.L. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +- sources: v5@v5.16.0/README.md + text: Apache License Version 2.0, see [LICENSE](LICENSE) +notices: [] diff --git a/.licenses/go/github.com/mitchellh/mapstructure.dep.yml b/.licenses/go/github.com/go-viper/mapstructure/v2.dep.yml similarity index 86% rename from .licenses/go/github.com/mitchellh/mapstructure.dep.yml rename to .licenses/go/github.com/go-viper/mapstructure/v2.dep.yml index 073c6eabcd7..aa4e7760c61 100644 --- a/.licenses/go/github.com/mitchellh/mapstructure.dep.yml +++ b/.licenses/go/github.com/go-viper/mapstructure/v2.dep.yml @@ -1,10 +1,10 @@ --- -name: github.com/mitchellh/mapstructure -version: v1.5.0 +name: github.com/go-viper/mapstructure/v2 +version: v2.2.1 type: go summary: Package mapstructure exposes functionality to convert one arbitrary Go type into another, typically to convert a map[string]interface{} into a native Go structure. -homepage: https://pkg.go.dev/github.com/mitchellh/mapstructure +homepage: https://pkg.go.dev/github.com/go-viper/mapstructure/v2 license: mit licenses: - sources: LICENSE @@ -30,4 +30,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +- sources: README.md + text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/mitchellh/go-homedir.dep.yml b/.licenses/go/github.com/go-viper/mapstructure/v2/internal/errors.dep.yml similarity index 81% rename from .licenses/go/github.com/mitchellh/go-homedir.dep.yml rename to .licenses/go/github.com/go-viper/mapstructure/v2/internal/errors.dep.yml index 40d6bcdb08a..4156e692500 100644 --- a/.licenses/go/github.com/mitchellh/go-homedir.dep.yml +++ b/.licenses/go/github.com/go-viper/mapstructure/v2/internal/errors.dep.yml @@ -1,12 +1,12 @@ --- -name: github.com/mitchellh/go-homedir -version: v1.1.0 +name: github.com/go-viper/mapstructure/v2/internal/errors +version: v2.2.1 type: go summary: -homepage: https://pkg.go.dev/github.com/mitchellh/go-homedir +homepage: https://pkg.go.dev/github.com/go-viper/mapstructure/v2/internal/errors license: mit licenses: -- sources: LICENSE +- sources: v2@v2.2.1/LICENSE text: | The MIT License (MIT) @@ -29,4 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +- sources: v2@v2.2.1/README.md + text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/gofrs/uuid/v5.dep.yml b/.licenses/go/github.com/gofrs/uuid/v5.dep.yml index 06b74d71a62..fe507a6e480 100644 --- a/.licenses/go/github.com/gofrs/uuid/v5.dep.yml +++ b/.licenses/go/github.com/gofrs/uuid/v5.dep.yml @@ -1,9 +1,9 @@ --- name: github.com/gofrs/uuid/v5 -version: v5.0.0 +version: v5.3.2 type: go summary: Package uuid provides implementations of the Universally Unique Identifier - (UUID), as specified in RFC-4122 and the Peabody RFC Draft (revision 03). + (UUID), as specified in RFC-9562 (formerly RFC-4122). homepage: https://pkg.go.dev/github.com/gofrs/uuid/v5 license: mit licenses: diff --git a/.licenses/go/gopkg.in/ini.v1.dep.yml b/.licenses/go/github.com/golang/groupcache/lru.dep.yml similarity index 96% rename from .licenses/go/gopkg.in/ini.v1.dep.yml rename to .licenses/go/github.com/golang/groupcache/lru.dep.yml index a34309de360..11dad64f329 100644 --- a/.licenses/go/gopkg.in/ini.v1.dep.yml +++ b/.licenses/go/github.com/golang/groupcache/lru.dep.yml @@ -1,12 +1,12 @@ --- -name: gopkg.in/ini.v1 -version: v1.67.0 +name: github.com/golang/groupcache/lru +version: v0.0.0-20241129210726-2c02b8208cf8 type: go -summary: Package ini provides INI file read and write functionality in Go. -homepage: https://pkg.go.dev/gopkg.in/ini.v1 +summary: Package lru implements an LRU cache. +homepage: https://pkg.go.dev/github.com/golang/groupcache/lru license: apache-2.0 licenses: -- sources: LICENSE +- sources: groupcache@v0.0.0-20241129210726-2c02b8208cf8/LICENSE text: | Apache License Version 2.0, January 2004 @@ -186,7 +186,7 @@ licenses: the same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2014 Unknwon + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -199,7 +199,4 @@ licenses: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -- sources: README.md - text: This project is under Apache v2 License. See the [LICENSE](LICENSE) file for - the full license text. notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/jsonpb.dep.yml b/.licenses/go/github.com/golang/protobuf/jsonpb.dep.yml deleted file mode 100644 index a45a8343420..00000000000 --- a/.licenses/go/github.com/golang/protobuf/jsonpb.dep.yml +++ /dev/null @@ -1,40 +0,0 @@ ---- -name: github.com/golang/protobuf/jsonpb -version: v1.5.3 -type: go -summary: Package jsonpb provides functionality to marshal and unmarshal between a - protocol buffer message and JSON. -homepage: https://pkg.go.dev/github.com/golang/protobuf/jsonpb -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/proto.dep.yml b/.licenses/go/github.com/golang/protobuf/proto.dep.yml deleted file mode 100644 index bf2a2ba4901..00000000000 --- a/.licenses/go/github.com/golang/protobuf/proto.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/proto -version: v1.5.3 -type: go -summary: Package proto provides functionality for handling protocol buffer messages. -homepage: https://pkg.go.dev/github.com/golang/protobuf/proto -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/ptypes.dep.yml b/.licenses/go/github.com/golang/protobuf/ptypes.dep.yml deleted file mode 100644 index 48e471769d5..00000000000 --- a/.licenses/go/github.com/golang/protobuf/ptypes.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/ptypes -version: v1.5.3 -type: go -summary: Package ptypes provides functionality for interacting with well-known types. -homepage: https://pkg.go.dev/github.com/golang/protobuf/ptypes -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/ptypes/any.dep.yml b/.licenses/go/github.com/golang/protobuf/ptypes/any.dep.yml deleted file mode 100644 index 7aa8349dc6c..00000000000 --- a/.licenses/go/github.com/golang/protobuf/ptypes/any.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/ptypes/any -version: v1.5.3 -type: go -summary: -homepage: https://pkg.go.dev/github.com/golang/protobuf/ptypes/any -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/ptypes/duration.dep.yml b/.licenses/go/github.com/golang/protobuf/ptypes/duration.dep.yml deleted file mode 100644 index 094a5c2f120..00000000000 --- a/.licenses/go/github.com/golang/protobuf/ptypes/duration.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/ptypes/duration -version: v1.5.3 -type: go -summary: -homepage: https://pkg.go.dev/github.com/golang/protobuf/ptypes/duration -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/golang/protobuf/ptypes/timestamp.dep.yml b/.licenses/go/github.com/golang/protobuf/ptypes/timestamp.dep.yml deleted file mode 100644 index 3fe208c942e..00000000000 --- a/.licenses/go/github.com/golang/protobuf/ptypes/timestamp.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/golang/protobuf/ptypes/timestamp -version: v1.5.3 -type: go -summary: -homepage: https://pkg.go.dev/github.com/golang/protobuf/ptypes/timestamp -license: bsd-3-clause -licenses: -- sources: protobuf@v1.5.3/LICENSE - text: |+ - Copyright 2010 The Go Authors. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl.dep.yml b/.licenses/go/github.com/hashicorp/hcl.dep.yml deleted file mode 100644 index 5aeb06dd53a..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl.dep.yml +++ /dev/null @@ -1,365 +0,0 @@ ---- -name: github.com/hashicorp/hcl -version: v1.0.0 -type: go -summary: Package hcl decodes HCL into usable Go structures. -homepage: https://pkg.go.dev/github.com/hashicorp/hcl -license: mpl-2.0 -licenses: -- sources: LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl/hcl/ast.dep.yml b/.licenses/go/github.com/hashicorp/hcl/hcl/ast.dep.yml deleted file mode 100644 index ce823de2d46..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl/hcl/ast.dep.yml +++ /dev/null @@ -1,366 +0,0 @@ ---- -name: github.com/hashicorp/hcl/hcl/ast -version: v1.0.0 -type: go -summary: Package ast declares the types used to represent syntax trees for HCL (HashiCorp - Configuration Language) -homepage: https://pkg.go.dev/github.com/hashicorp/hcl/hcl/ast -license: mpl-2.0 -licenses: -- sources: hcl@v1.0.0/LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl/hcl/parser.dep.yml b/.licenses/go/github.com/hashicorp/hcl/hcl/parser.dep.yml deleted file mode 100644 index 4d54adcda3a..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl/hcl/parser.dep.yml +++ /dev/null @@ -1,365 +0,0 @@ ---- -name: github.com/hashicorp/hcl/hcl/parser -version: v1.0.0 -type: go -summary: Package parser implements a parser for HCL (HashiCorp Configuration Language) -homepage: https://pkg.go.dev/github.com/hashicorp/hcl/hcl/parser -license: mpl-2.0 -licenses: -- sources: hcl@v1.0.0/LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl/hcl/printer.dep.yml b/.licenses/go/github.com/hashicorp/hcl/hcl/printer.dep.yml deleted file mode 100644 index 51a38c946fb..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl/hcl/printer.dep.yml +++ /dev/null @@ -1,365 +0,0 @@ ---- -name: github.com/hashicorp/hcl/hcl/printer -version: v1.0.0 -type: go -summary: Package printer implements printing of AST nodes to HCL format. -homepage: https://pkg.go.dev/github.com/hashicorp/hcl/hcl/printer -license: mpl-2.0 -licenses: -- sources: hcl@v1.0.0/LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl/hcl/scanner.dep.yml b/.licenses/go/github.com/hashicorp/hcl/hcl/scanner.dep.yml deleted file mode 100644 index a3312d03414..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl/hcl/scanner.dep.yml +++ /dev/null @@ -1,366 +0,0 @@ ---- -name: github.com/hashicorp/hcl/hcl/scanner -version: v1.0.0 -type: go -summary: Package scanner implements a scanner for HCL (HashiCorp Configuration Language) - source text. -homepage: https://pkg.go.dev/github.com/hashicorp/hcl/hcl/scanner -license: mpl-2.0 -licenses: -- sources: hcl@v1.0.0/LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl/hcl/strconv.dep.yml b/.licenses/go/github.com/hashicorp/hcl/hcl/strconv.dep.yml deleted file mode 100644 index 313c4501f51..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl/hcl/strconv.dep.yml +++ /dev/null @@ -1,365 +0,0 @@ ---- -name: github.com/hashicorp/hcl/hcl/strconv -version: v1.0.0 -type: go -summary: -homepage: https://pkg.go.dev/github.com/hashicorp/hcl/hcl/strconv -license: mpl-2.0 -licenses: -- sources: hcl@v1.0.0/LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl/hcl/token.dep.yml b/.licenses/go/github.com/hashicorp/hcl/hcl/token.dep.yml deleted file mode 100644 index c2f6e60074c..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl/hcl/token.dep.yml +++ /dev/null @@ -1,366 +0,0 @@ ---- -name: github.com/hashicorp/hcl/hcl/token -version: v1.0.0 -type: go -summary: Package token defines constants representing the lexical tokens for HCL (HashiCorp - Configuration Language) -homepage: https://pkg.go.dev/github.com/hashicorp/hcl/hcl/token -license: mpl-2.0 -licenses: -- sources: hcl@v1.0.0/LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl/json/parser.dep.yml b/.licenses/go/github.com/hashicorp/hcl/json/parser.dep.yml deleted file mode 100644 index 913fb5bb0ba..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl/json/parser.dep.yml +++ /dev/null @@ -1,365 +0,0 @@ ---- -name: github.com/hashicorp/hcl/json/parser -version: v1.0.0 -type: go -summary: -homepage: https://pkg.go.dev/github.com/hashicorp/hcl/json/parser -license: mpl-2.0 -licenses: -- sources: hcl@v1.0.0/LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl/json/scanner.dep.yml b/.licenses/go/github.com/hashicorp/hcl/json/scanner.dep.yml deleted file mode 100644 index 27f5acdf6e1..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl/json/scanner.dep.yml +++ /dev/null @@ -1,365 +0,0 @@ ---- -name: github.com/hashicorp/hcl/json/scanner -version: v1.0.0 -type: go -summary: -homepage: https://pkg.go.dev/github.com/hashicorp/hcl/json/scanner -license: mpl-2.0 -licenses: -- sources: hcl@v1.0.0/LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/hashicorp/hcl/json/token.dep.yml b/.licenses/go/github.com/hashicorp/hcl/json/token.dep.yml deleted file mode 100644 index 3e3939f095d..00000000000 --- a/.licenses/go/github.com/hashicorp/hcl/json/token.dep.yml +++ /dev/null @@ -1,365 +0,0 @@ ---- -name: github.com/hashicorp/hcl/json/token -version: v1.0.0 -type: go -summary: -homepage: https://pkg.go.dev/github.com/hashicorp/hcl/json/token -license: mpl-2.0 -licenses: -- sources: hcl@v1.0.0/LICENSE - text: |+ - Mozilla Public License, version 2.0 - - 1. Definitions - - 1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - - 1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - - 1.3. “Contribution” - - means Covered Software of a particular Contributor. - - 1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - - 1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - - 1.6. “Executable Form” - - means any form of the work other than Source Code Form. - - 1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - - 1.8. “License” - - means this document. - - 1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - - 1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - - 1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - - 1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - - 1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - - 1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - - 2. License Grants and Conditions - - 2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - - 2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - - 2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - - 2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - - 2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - - 2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - - 2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - - 3. Responsibilities - - 3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - - 3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - - 3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - - 3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - - 3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - - 4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - - 5. Termination - - 5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - - 5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - - 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - - 6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - - 7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - - 8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - - 9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - - 10. Versions of the License - - 10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - - 10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - - 10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - - 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - - Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - - If it is not possible or desirable to put the notice in a particular file, then - You may include the notice in a location (such as a LICENSE file in a relevant - directory) where a recipient would be likely to look for such a notice. - - You may add additional accurate notices of copyright ownership. - - Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - -notices: [] diff --git a/.licenses/go/github.com/klauspost/compress.dep.yml b/.licenses/go/github.com/klauspost/compress.dep.yml index 85648ebe677..54f385749ed 100644 --- a/.licenses/go/github.com/klauspost/compress.dep.yml +++ b/.licenses/go/github.com/klauspost/compress.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/klauspost/compress -version: v1.17.0 +version: v1.17.2 type: go summary: homepage: https://pkg.go.dev/github.com/klauspost/compress diff --git a/.licenses/go/github.com/klauspost/compress/fse.dep.yml b/.licenses/go/github.com/klauspost/compress/fse.dep.yml index 8d885e97e21..72db71a77bb 100644 --- a/.licenses/go/github.com/klauspost/compress/fse.dep.yml +++ b/.licenses/go/github.com/klauspost/compress/fse.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/klauspost/compress/fse -version: v1.17.0 +version: v1.17.2 type: go summary: Package fse provides Finite State Entropy encoding and decoding. homepage: https://pkg.go.dev/github.com/klauspost/compress/fse license: bsd-3-clause licenses: -- sources: compress@v1.17.0/LICENSE +- sources: compress@v1.17.2/LICENSE text: | Copyright (c) 2012 The Go Authors. All rights reserved. Copyright (c) 2019 Klaus Post. All rights reserved. diff --git a/.licenses/go/github.com/klauspost/compress/huff0.dep.yml b/.licenses/go/github.com/klauspost/compress/huff0.dep.yml index 30901b04745..4b7c82482d6 100644 --- a/.licenses/go/github.com/klauspost/compress/huff0.dep.yml +++ b/.licenses/go/github.com/klauspost/compress/huff0.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/klauspost/compress/huff0 -version: v1.17.0 +version: v1.17.2 type: go summary: This file contains the specialisation of Decoder.Decompress4X and Decoder.Decompress1X that use an asm implementation of thir main loops. homepage: https://pkg.go.dev/github.com/klauspost/compress/huff0 license: bsd-3-clause licenses: -- sources: compress@v1.17.0/LICENSE +- sources: compress@v1.17.2/LICENSE text: | Copyright (c) 2012 The Go Authors. All rights reserved. Copyright (c) 2019 Klaus Post. All rights reserved. diff --git a/.licenses/go/github.com/klauspost/compress/internal/cpuinfo.dep.yml b/.licenses/go/github.com/klauspost/compress/internal/cpuinfo.dep.yml index 9b692399722..15353f866d5 100644 --- a/.licenses/go/github.com/klauspost/compress/internal/cpuinfo.dep.yml +++ b/.licenses/go/github.com/klauspost/compress/internal/cpuinfo.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/klauspost/compress/internal/cpuinfo -version: v1.17.0 +version: v1.17.2 type: go summary: Package cpuinfo gives runtime info about the current CPU. homepage: https://pkg.go.dev/github.com/klauspost/compress/internal/cpuinfo license: bsd-3-clause licenses: -- sources: compress@v1.17.0/LICENSE +- sources: compress@v1.17.2/LICENSE text: | Copyright (c) 2012 The Go Authors. All rights reserved. Copyright (c) 2019 Klaus Post. All rights reserved. @@ -312,7 +312,7 @@ licenses: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: compress@v1.17.0/README.md +- sources: compress@v1.17.2/README.md text: This code is licensed under the same conditions as the original Go code. See LICENSE file. notices: [] diff --git a/.licenses/go/github.com/klauspost/compress/internal/snapref.dep.yml b/.licenses/go/github.com/klauspost/compress/internal/snapref.dep.yml index 76d6e002574..743aded1b59 100644 --- a/.licenses/go/github.com/klauspost/compress/internal/snapref.dep.yml +++ b/.licenses/go/github.com/klauspost/compress/internal/snapref.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/klauspost/compress/internal/snapref -version: v1.17.0 +version: v1.17.2 type: go summary: Package snapref implements the Snappy compression format. homepage: https://pkg.go.dev/github.com/klauspost/compress/internal/snapref @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: compress@v1.17.0/LICENSE +- sources: compress@v1.17.2/LICENSE text: | Copyright (c) 2012 The Go Authors. All rights reserved. Copyright (c) 2019 Klaus Post. All rights reserved. @@ -341,7 +341,7 @@ licenses: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: compress@v1.17.0/README.md +- sources: compress@v1.17.2/README.md text: This code is licensed under the same conditions as the original Go code. See LICENSE file. notices: [] diff --git a/.licenses/go/github.com/klauspost/compress/zstd.dep.yml b/.licenses/go/github.com/klauspost/compress/zstd.dep.yml index e7dc8db6705..595224e9168 100644 --- a/.licenses/go/github.com/klauspost/compress/zstd.dep.yml +++ b/.licenses/go/github.com/klauspost/compress/zstd.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/klauspost/compress/zstd -version: v1.17.0 +version: v1.17.2 type: go summary: Package zstd provides decompression of zstandard files. homepage: https://pkg.go.dev/github.com/klauspost/compress/zstd license: bsd-3-clause licenses: -- sources: compress@v1.17.0/LICENSE +- sources: compress@v1.17.2/LICENSE text: | Copyright (c) 2012 The Go Authors. All rights reserved. Copyright (c) 2019 Klaus Post. All rights reserved. diff --git a/.licenses/go/github.com/klauspost/compress/zstd/internal/xxhash.dep.yml b/.licenses/go/github.com/klauspost/compress/zstd/internal/xxhash.dep.yml index 7f59a3f916b..f29df57f494 100644 --- a/.licenses/go/github.com/klauspost/compress/zstd/internal/xxhash.dep.yml +++ b/.licenses/go/github.com/klauspost/compress/zstd/internal/xxhash.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/klauspost/compress/zstd/internal/xxhash -version: v1.17.0 +version: v1.17.2 type: go summary: homepage: https://pkg.go.dev/github.com/klauspost/compress/zstd/internal/xxhash license: other licenses: -- sources: compress@v1.17.0/LICENSE +- sources: compress@v1.17.2/LICENSE text: | Copyright (c) 2012 The Go Authors. All rights reserved. Copyright (c) 2019 Klaus Post. All rights reserved. diff --git a/.licenses/go/github.com/leonelquinteros/gotext.dep.yml b/.licenses/go/github.com/leonelquinteros/gotext.dep.yml index 9f13e6e9ab4..a2ef6431056 100644 --- a/.licenses/go/github.com/leonelquinteros/gotext.dep.yml +++ b/.licenses/go/github.com/leonelquinteros/gotext.dep.yml @@ -1,10 +1,10 @@ --- name: github.com/leonelquinteros/gotext -version: v1.4.0 +version: v1.7.1 type: go summary: Package gotext implements GNU gettext utilities. homepage: https://pkg.go.dev/github.com/leonelquinteros/gotext -license: mit +license: other licenses: - sources: LICENSE text: | @@ -29,6 +29,40 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + Package `plurals` + + Original: + https://github.com/ojii/gettext.go/tree/b6dae1d7af8a8441285e42661565760b530a8a57/pluralforms + + License: + https://raw.githubusercontent.com/ojii/gettext.go/b6dae1d7af8a8441285e42661565760b530a8a57/LICENSE + + Copyright (c) 2016, Jonas Obrist + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Jonas Obrist nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL JONAS OBRIST BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - sources: README.md text: "[MIT license](LICENSE)" notices: [] diff --git a/.licenses/go/github.com/leonelquinteros/gotext/plurals.dep.yml b/.licenses/go/github.com/leonelquinteros/gotext/plurals.dep.yml index e80ad4e09f5..508d984c518 100644 --- a/.licenses/go/github.com/leonelquinteros/gotext/plurals.dep.yml +++ b/.licenses/go/github.com/leonelquinteros/gotext/plurals.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/leonelquinteros/gotext/plurals -version: v1.4.0 +version: v1.7.1 type: go summary: Package plurals is the pluralform compiler to get the correct translation id of the plural string homepage: https://pkg.go.dev/github.com/leonelquinteros/gotext/plurals -license: mit +license: other licenses: -- sources: gotext@v1.4.0/LICENSE +- sources: gotext@v1.7.1/LICENSE text: | The MIT License (MIT) @@ -30,6 +30,40 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: gotext@v1.4.0/README.md + + + Package `plurals` + + Original: + https://github.com/ojii/gettext.go/tree/b6dae1d7af8a8441285e42661565760b530a8a57/pluralforms + + License: + https://raw.githubusercontent.com/ojii/gettext.go/b6dae1d7af8a8441285e42661565760b530a8a57/LICENSE + + Copyright (c) 2016, Jonas Obrist + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Jonas Obrist nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL JONAS OBRIST BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- sources: gotext@v1.7.1/README.md text: "[MIT license](LICENSE)" notices: [] diff --git a/.licenses/go/github.com/magiconair/properties.dep.yml b/.licenses/go/github.com/magiconair/properties.dep.yml deleted file mode 100644 index ef04e0f92b3..00000000000 --- a/.licenses/go/github.com/magiconair/properties.dep.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: github.com/magiconair/properties -version: v1.8.7 -type: go -summary: Package properties provides functions for reading and writing ISO-8859-1 - and UTF-8 encoded .properties files and has support for recursive property expansion. -homepage: https://pkg.go.dev/github.com/magiconair/properties -license: bsd-2-clause -licenses: -- sources: LICENSE.md - text: | - Copyright (c) 2013-2020, Frank Schroeder - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: README.md - text: 2 clause BSD license. See [LICENSE](https://github.com/magiconair/properties/blob/master/LICENSE) - file for details. -notices: [] diff --git a/.licenses/go/github.com/mattn/go-colorable.dep.yml b/.licenses/go/github.com/mattn/go-colorable.dep.yml index dab73bc8865..be6df443687 100644 --- a/.licenses/go/github.com/mattn/go-colorable.dep.yml +++ b/.licenses/go/github.com/mattn/go-colorable.dep.yml @@ -1,9 +1,9 @@ --- name: github.com/mattn/go-colorable -version: v0.1.13 +version: v0.1.14 type: go -summary: -homepage: https://pkg.go.dev/github.com/mattn/go-colorable +summary: +homepage: https://godoc.org/github.com/mattn/go-colorable license: mit licenses: - sources: LICENSE diff --git a/.licenses/go/github.com/pelletier/go-toml/v2.dep.yml b/.licenses/go/github.com/pelletier/go-toml/v2.dep.yml index 57fb6f41659..3460ed72598 100644 --- a/.licenses/go/github.com/pelletier/go-toml/v2.dep.yml +++ b/.licenses/go/github.com/pelletier/go-toml/v2.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/pelletier/go-toml/v2 -version: v2.1.0 +version: v2.2.3 type: go summary: Package toml is a library to read and write TOML documents. homepage: https://pkg.go.dev/github.com/pelletier/go-toml/v2 diff --git a/.licenses/go/github.com/pelletier/go-toml/v2/internal/characters.dep.yml b/.licenses/go/github.com/pelletier/go-toml/v2/internal/characters.dep.yml index 7fa750d2dfc..f481041fa66 100644 --- a/.licenses/go/github.com/pelletier/go-toml/v2/internal/characters.dep.yml +++ b/.licenses/go/github.com/pelletier/go-toml/v2/internal/characters.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/pelletier/go-toml/v2/internal/characters -version: v2.1.0 +version: v2.2.3 type: go summary: homepage: https://pkg.go.dev/github.com/pelletier/go-toml/v2/internal/characters license: other licenses: -- sources: v2@v2.1.0/LICENSE +- sources: v2@v2.2.3/LICENSE text: | The MIT License (MIT) @@ -30,6 +30,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: v2@v2.1.0/README.md +- sources: v2@v2.2.3/README.md text: The MIT License (MIT). Read [LICENSE](LICENSE). notices: [] diff --git a/.licenses/go/github.com/pelletier/go-toml/v2/internal/danger.dep.yml b/.licenses/go/github.com/pelletier/go-toml/v2/internal/danger.dep.yml index efe373edd23..7e2f86e2e9f 100644 --- a/.licenses/go/github.com/pelletier/go-toml/v2/internal/danger.dep.yml +++ b/.licenses/go/github.com/pelletier/go-toml/v2/internal/danger.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/pelletier/go-toml/v2/internal/danger -version: v2.1.0 +version: v2.2.3 type: go summary: homepage: https://pkg.go.dev/github.com/pelletier/go-toml/v2/internal/danger license: other licenses: -- sources: v2@v2.1.0/LICENSE +- sources: v2@v2.2.3/LICENSE text: | The MIT License (MIT) @@ -30,6 +30,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: v2@v2.1.0/README.md +- sources: v2@v2.2.3/README.md text: The MIT License (MIT). Read [LICENSE](LICENSE). notices: [] diff --git a/.licenses/go/github.com/pelletier/go-toml/v2/internal/tracker.dep.yml b/.licenses/go/github.com/pelletier/go-toml/v2/internal/tracker.dep.yml index 80f5141e3ea..8452277d00a 100644 --- a/.licenses/go/github.com/pelletier/go-toml/v2/internal/tracker.dep.yml +++ b/.licenses/go/github.com/pelletier/go-toml/v2/internal/tracker.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/pelletier/go-toml/v2/internal/tracker -version: v2.1.0 +version: v2.2.3 type: go summary: homepage: https://pkg.go.dev/github.com/pelletier/go-toml/v2/internal/tracker license: other licenses: -- sources: v2@v2.1.0/LICENSE +- sources: v2@v2.2.3/LICENSE text: | The MIT License (MIT) @@ -30,6 +30,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: v2@v2.1.0/README.md +- sources: v2@v2.2.3/README.md text: The MIT License (MIT). Read [LICENSE](LICENSE). notices: [] diff --git a/.licenses/go/github.com/pelletier/go-toml/v2/unstable.dep.yml b/.licenses/go/github.com/pelletier/go-toml/v2/unstable.dep.yml index cae3f2e7d7f..c224d7079af 100644 --- a/.licenses/go/github.com/pelletier/go-toml/v2/unstable.dep.yml +++ b/.licenses/go/github.com/pelletier/go-toml/v2/unstable.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/pelletier/go-toml/v2/unstable -version: v2.1.0 +version: v2.2.3 type: go summary: Package unstable provides APIs that do not meet the backward compatibility guarantees yet. homepage: https://pkg.go.dev/github.com/pelletier/go-toml/v2/unstable license: other licenses: -- sources: v2@v2.1.0/LICENSE +- sources: v2@v2.2.3/LICENSE text: | The MIT License (MIT) @@ -31,6 +31,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: v2@v2.1.0/README.md +- sources: v2@v2.2.3/README.md text: The MIT License (MIT). Read [LICENSE](LICENSE). notices: [] diff --git a/.licenses/go/github.com/pjbgf/sha1cd.dep.yml b/.licenses/go/github.com/pjbgf/sha1cd.dep.yml new file mode 100644 index 00000000000..fbe273662bb --- /dev/null +++ b/.licenses/go/github.com/pjbgf/sha1cd.dep.yml @@ -0,0 +1,213 @@ +--- +name: github.com/pjbgf/sha1cd +version: v0.3.2 +type: go +summary: Package sha1cd implements collision detection based on the whitepaper Counter-cryptanalysis + from Marc Stevens. +homepage: https://pkg.go.dev/github.com/pjbgf/sha1cd +license: apache-2.0 +licenses: +- sources: LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023 pjbgf + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/github.com/pjbgf/sha1cd/internal.dep.yml b/.licenses/go/github.com/pjbgf/sha1cd/internal.dep.yml new file mode 100644 index 00000000000..0117afa6425 --- /dev/null +++ b/.licenses/go/github.com/pjbgf/sha1cd/internal.dep.yml @@ -0,0 +1,212 @@ +--- +name: github.com/pjbgf/sha1cd/internal +version: v0.3.2 +type: go +summary: +homepage: https://pkg.go.dev/github.com/pjbgf/sha1cd/internal +license: apache-2.0 +licenses: +- sources: sha1cd@v0.3.2/LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023 pjbgf + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/github.com/pjbgf/sha1cd/ubc.dep.yml b/.licenses/go/github.com/pjbgf/sha1cd/ubc.dep.yml new file mode 100644 index 00000000000..493675f8e28 --- /dev/null +++ b/.licenses/go/github.com/pjbgf/sha1cd/ubc.dep.yml @@ -0,0 +1,213 @@ +--- +name: github.com/pjbgf/sha1cd/ubc +version: v0.3.2 +type: go +summary: ubc package provides ways for SHA1 blocks to be checked for Unavoidable Bit + Conditions that arise from crypto analysis attacks. +homepage: https://pkg.go.dev/github.com/pjbgf/sha1cd/ubc +license: apache-2.0 +licenses: +- sources: sha1cd@v0.3.2/LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023 pjbgf + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/github.com/pkg/errors.dep.yml b/.licenses/go/github.com/pkg/errors.dep.yml deleted file mode 100644 index a9b72bc4b04..00000000000 --- a/.licenses/go/github.com/pkg/errors.dep.yml +++ /dev/null @@ -1,36 +0,0 @@ ---- -name: github.com/pkg/errors -version: v0.9.1 -type: go -summary: Package errors provides simple error handling primitives. -homepage: https://pkg.go.dev/github.com/pkg/errors -license: bsd-2-clause -licenses: -- sources: LICENSE - text: | - Copyright (c) 2015, Dave Cheney - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: README.md - text: BSD-2-Clause -notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/javaproperties.dep.yml b/.licenses/go/github.com/sagikazarmark/locafero.dep.yml similarity index 72% rename from .licenses/go/github.com/spf13/viper/internal/encoding/javaproperties.dep.yml rename to .licenses/go/github.com/sagikazarmark/locafero.dep.yml index eb799d46183..d159fe8a4b6 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/javaproperties.dep.yml +++ b/.licenses/go/github.com/sagikazarmark/locafero.dep.yml @@ -1,23 +1,21 @@ --- -name: github.com/spf13/viper/internal/encoding/javaproperties -version: v1.17.0 +name: github.com/sagikazarmark/locafero +version: v0.7.0 type: go -summary: -homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/javaproperties +summary: Package finder looks for files and directories in an {fs.Fs} filesystem. +homepage: https://pkg.go.dev/github.com/sagikazarmark/locafero license: mit licenses: -- sources: viper@v1.17.0/LICENSE - text: |- - The MIT License (MIT) - - Copyright (c) 2014 Steve Francia +- sources: LICENSE + text: | + Copyright (c) 2023 Márk Sági-Kazár Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + copies of the Software, and to permit persons to whom the Software is furnished + to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. @@ -27,8 +25,8 @@ licenses: FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -- sources: viper@v1.17.0/README.md + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +- sources: README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/sergi/go-diff/diffmatchpatch.dep.yml b/.licenses/go/github.com/sergi/go-diff/diffmatchpatch.dep.yml index 3ab4bd653d9..ee155766e7e 100644 --- a/.licenses/go/github.com/sergi/go-diff/diffmatchpatch.dep.yml +++ b/.licenses/go/github.com/sergi/go-diff/diffmatchpatch.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/sergi/go-diff/diffmatchpatch -version: v1.3.1 +version: v1.3.2-0.20230802210424-5b0b94c5c0d3 type: go summary: Package diffmatchpatch offers robust algorithms to perform the operations required for synchronizing plain text. homepage: https://pkg.go.dev/github.com/sergi/go-diff/diffmatchpatch license: apache-2.0 licenses: -- sources: go-diff@v1.3.1/LICENSE +- sources: go-diff@v1.3.2-0.20230802210424-5b0b94c5c0d3/LICENSE text: |+ Copyright (c) 2012-2016 The go-diff Authors. All rights reserved. @@ -29,7 +29,7 @@ licenses: FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: go-diff@v1.3.1/APACHE-LICENSE-2.0 +- sources: go-diff@v1.3.2-0.20230802210424-5b0b94c5c0d3/APACHE-LICENSE-2.0 text: |2 Apache License diff --git a/.licenses/go/github.com/skeema/knownhosts.dep.yml b/.licenses/go/github.com/skeema/knownhosts.dep.yml new file mode 100644 index 00000000000..61e2ba7dd9e --- /dev/null +++ b/.licenses/go/github.com/skeema/knownhosts.dep.yml @@ -0,0 +1,245 @@ +--- +name: github.com/skeema/knownhosts +version: v1.3.1 +type: go +summary: Package knownhosts is a thin wrapper around golang.org/x/crypto/ssh/knownhosts, + adding the ability to obtain the list of host key algorithms for a known host. +homepage: https://pkg.go.dev/github.com/skeema/knownhosts +license: apache-2.0 +licenses: +- sources: LICENSE + text: |2 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +- sources: README.md + text: |- + **Source code copyright 2025 Skeema LLC and the Skeema Knownhosts authors** + + ```text + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ``` +notices: +- sources: NOTICE + text: |- + Copyright 2025 Skeema LLC and the Skeema Knownhosts authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/hcl.dep.yml b/.licenses/go/github.com/sourcegraph/conc.dep.yml similarity index 76% rename from .licenses/go/github.com/spf13/viper/internal/encoding/hcl.dep.yml rename to .licenses/go/github.com/sourcegraph/conc.dep.yml index 30fb1375ca4..0bc689af1ea 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/hcl.dep.yml +++ b/.licenses/go/github.com/sourcegraph/conc.dep.yml @@ -1,16 +1,16 @@ --- -name: github.com/spf13/viper/internal/encoding/hcl -version: v1.17.0 +name: github.com/sourcegraph/conc +version: v0.3.0 type: go summary: -homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/hcl +homepage: https://pkg.go.dev/github.com/sourcegraph/conc license: mit licenses: -- sources: viper@v1.17.0/LICENSE - text: |- - The MIT License (MIT) +- sources: LICENSE + text: | + MIT License - Copyright (c) 2014 Steve Francia + Copyright (c) 2023 Sourcegraph Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -29,6 +29,4 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md - text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/ini.dep.yml b/.licenses/go/github.com/sourcegraph/conc/internal/multierror.dep.yml similarity index 76% rename from .licenses/go/github.com/spf13/viper/internal/encoding/ini.dep.yml rename to .licenses/go/github.com/sourcegraph/conc/internal/multierror.dep.yml index 7eb677cf34c..141e969d89e 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/ini.dep.yml +++ b/.licenses/go/github.com/sourcegraph/conc/internal/multierror.dep.yml @@ -1,16 +1,16 @@ --- -name: github.com/spf13/viper/internal/encoding/ini -version: v1.17.0 +name: github.com/sourcegraph/conc/internal/multierror +version: v0.3.0 type: go summary: -homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/ini +homepage: https://pkg.go.dev/github.com/sourcegraph/conc/internal/multierror license: mit licenses: -- sources: viper@v1.17.0/LICENSE - text: |- - The MIT License (MIT) +- sources: conc@v0.3.0/LICENSE + text: | + MIT License - Copyright (c) 2014 Steve Francia + Copyright (c) 2023 Sourcegraph Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -29,6 +29,4 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md - text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/sourcegraph/conc/iter.dep.yml b/.licenses/go/github.com/sourcegraph/conc/iter.dep.yml new file mode 100644 index 00000000000..fdec207b935 --- /dev/null +++ b/.licenses/go/github.com/sourcegraph/conc/iter.dep.yml @@ -0,0 +1,32 @@ +--- +name: github.com/sourcegraph/conc/iter +version: v0.3.0 +type: go +summary: +homepage: https://pkg.go.dev/github.com/sourcegraph/conc/iter +license: mit +licenses: +- sources: conc@v0.3.0/LICENSE + text: | + MIT License + + Copyright (c) 2023 Sourcegraph + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +notices: [] diff --git a/.licenses/go/github.com/sourcegraph/conc/panics.dep.yml b/.licenses/go/github.com/sourcegraph/conc/panics.dep.yml new file mode 100644 index 00000000000..61e4000b6e9 --- /dev/null +++ b/.licenses/go/github.com/sourcegraph/conc/panics.dep.yml @@ -0,0 +1,32 @@ +--- +name: github.com/sourcegraph/conc/panics +version: v0.3.0 +type: go +summary: +homepage: https://pkg.go.dev/github.com/sourcegraph/conc/panics +license: mit +licenses: +- sources: conc@v0.3.0/LICENSE + text: | + MIT License + + Copyright (c) 2023 Sourcegraph + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +notices: [] diff --git a/.licenses/go/github.com/spf13/afero.dep.yml b/.licenses/go/github.com/spf13/afero.dep.yml index b1f072c83e8..0af4a79e2e5 100644 --- a/.licenses/go/github.com/spf13/afero.dep.yml +++ b/.licenses/go/github.com/spf13/afero.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/spf13/afero -version: v1.10.0 +version: v1.12.0 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/afero diff --git a/.licenses/go/github.com/spf13/afero/internal/common.dep.yml b/.licenses/go/github.com/spf13/afero/internal/common.dep.yml index d60e00bd580..bab8a718b9f 100644 --- a/.licenses/go/github.com/spf13/afero/internal/common.dep.yml +++ b/.licenses/go/github.com/spf13/afero/internal/common.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/afero/internal/common -version: v1.10.0 +version: v1.12.0 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/afero/internal/common license: apache-2.0 licenses: -- sources: afero@v1.10.0/LICENSE.txt +- sources: afero@v1.12.0/LICENSE.txt text: |2 Apache License Version 2.0, January 2004 @@ -182,7 +182,7 @@ licenses: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -- sources: afero@v1.10.0/README.md +- sources: afero@v1.12.0/README.md text: |- Afero is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/afero/blob/master/LICENSE.txt) diff --git a/.licenses/go/github.com/spf13/afero/mem.dep.yml b/.licenses/go/github.com/spf13/afero/mem.dep.yml index 17bc151fabc..58fc184ace1 100644 --- a/.licenses/go/github.com/spf13/afero/mem.dep.yml +++ b/.licenses/go/github.com/spf13/afero/mem.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/afero/mem -version: v1.10.0 +version: v1.12.0 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/afero/mem license: apache-2.0 licenses: -- sources: afero@v1.10.0/LICENSE.txt +- sources: afero@v1.12.0/LICENSE.txt text: |2 Apache License Version 2.0, January 2004 @@ -182,7 +182,7 @@ licenses: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -- sources: afero@v1.10.0/README.md +- sources: afero@v1.12.0/README.md text: |- Afero is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/afero/blob/master/LICENSE.txt) diff --git a/.licenses/go/github.com/spf13/cast.dep.yml b/.licenses/go/github.com/spf13/cast.dep.yml index 8cf6d2dd0f4..22ec680c2d3 100644 --- a/.licenses/go/github.com/spf13/cast.dep.yml +++ b/.licenses/go/github.com/spf13/cast.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/spf13/cast -version: v1.5.1 +version: v1.7.1 type: go summary: Package cast provides easy and safe casting in Go. homepage: https://pkg.go.dev/github.com/spf13/cast diff --git a/.licenses/go/github.com/spf13/cobra.dep.yml b/.licenses/go/github.com/spf13/cobra.dep.yml index a14dcec346e..8259dc45262 100644 --- a/.licenses/go/github.com/spf13/cobra.dep.yml +++ b/.licenses/go/github.com/spf13/cobra.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/spf13/cobra -version: v1.7.0 +version: v1.9.1 type: go summary: Package cobra is a commander providing a simple interface to create powerful modern CLI interfaces. @@ -184,5 +184,5 @@ licenses: incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - sources: README.md - text: Cobra is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/cobra/blob/master/LICENSE.txt) + text: Cobra is released under the Apache 2.0 license. See [LICENSE.txt](LICENSE.txt) notices: [] diff --git a/.licenses/go/github.com/spf13/cobra/doc.dep.yml b/.licenses/go/github.com/spf13/cobra/doc.dep.yml index 1119f6fb44f..cf8977f3ea4 100644 --- a/.licenses/go/github.com/spf13/cobra/doc.dep.yml +++ b/.licenses/go/github.com/spf13/cobra/doc.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/cobra/doc -version: v1.7.0 +version: v1.9.1 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/cobra/doc license: apache-2.0 licenses: -- sources: cobra@v1.7.0/LICENSE.txt +- sources: cobra@v1.9.1/LICENSE.txt text: |2 Apache License Version 2.0, January 2004 @@ -182,4 +182,6 @@ licenses: defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. +- sources: cobra@v1.9.1/README.md + text: Cobra is released under the Apache 2.0 license. See [LICENSE.txt](LICENSE.txt) notices: [] diff --git a/.licenses/go/github.com/spf13/pflag.dep.yml b/.licenses/go/github.com/spf13/pflag.dep.yml index c0bf7c43354..fd6fa37096a 100644 --- a/.licenses/go/github.com/spf13/pflag.dep.yml +++ b/.licenses/go/github.com/spf13/pflag.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/spf13/pflag -version: v1.0.5 +version: v1.0.6 type: go summary: Package pflag is a drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags. diff --git a/.licenses/go/github.com/spf13/viper.dep.yml b/.licenses/go/github.com/spf13/viper.dep.yml index 61d4b93a856..bab64c75e1e 100644 --- a/.licenses/go/github.com/spf13/viper.dep.yml +++ b/.licenses/go/github.com/spf13/viper.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/spf13/viper -version: v1.17.0 +version: v1.20.1 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/dotenv.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/dotenv.dep.yml index 520cf1af8b9..157ab721a5a 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/dotenv.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/dotenv.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/dotenv -version: v1.17.0 +version: v1.20.1 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/dotenv license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.20.1/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.20.1/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/json.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/json.dep.yml index ca7d35555a5..8cedebc4b37 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/json.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/json.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/json -version: v1.17.0 +version: v1.20.1 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/json license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.20.1/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.20.1/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/toml.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/toml.dep.yml index 8a687976549..323cd1e843e 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/toml.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/toml.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/toml -version: v1.17.0 +version: v1.20.1 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/toml license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.20.1/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.20.1/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding/yaml.dep.yml b/.licenses/go/github.com/spf13/viper/internal/encoding/yaml.dep.yml index 25216cd35a9..1bbe6ca9d02 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding/yaml.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/encoding/yaml.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/spf13/viper/internal/encoding/yaml -version: v1.17.0 +version: v1.20.1 type: go summary: homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding/yaml license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.20.1/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.20.1/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/spf13/viper/internal/encoding.dep.yml b/.licenses/go/github.com/spf13/viper/internal/features.dep.yml similarity index 86% rename from .licenses/go/github.com/spf13/viper/internal/encoding.dep.yml rename to .licenses/go/github.com/spf13/viper/internal/features.dep.yml index d06da41598d..37a3c243f36 100644 --- a/.licenses/go/github.com/spf13/viper/internal/encoding.dep.yml +++ b/.licenses/go/github.com/spf13/viper/internal/features.dep.yml @@ -1,12 +1,12 @@ --- -name: github.com/spf13/viper/internal/encoding -version: v1.17.0 +name: github.com/spf13/viper/internal/features +version: v1.20.1 type: go summary: -homepage: https://pkg.go.dev/github.com/spf13/viper/internal/encoding +homepage: https://pkg.go.dev/github.com/spf13/viper/internal/features license: mit licenses: -- sources: viper@v1.17.0/LICENSE +- sources: viper@v1.20.1/LICENSE text: |- The MIT License (MIT) @@ -29,6 +29,6 @@ licenses: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- sources: viper@v1.17.0/README.md +- sources: viper@v1.20.1/README.md text: The project is licensed under the [MIT License](LICENSE). notices: [] diff --git a/.licenses/go/github.com/ulikunitz/xz.dep.yml b/.licenses/go/github.com/ulikunitz/xz.dep.yml index 0b3c4e2b2d9..b02e158ff5f 100644 --- a/.licenses/go/github.com/ulikunitz/xz.dep.yml +++ b/.licenses/go/github.com/ulikunitz/xz.dep.yml @@ -1,6 +1,6 @@ --- name: github.com/ulikunitz/xz -version: v0.5.11 +version: v0.5.12 type: go summary: Package xz supports the compression and decompression of xz files. homepage: https://pkg.go.dev/github.com/ulikunitz/xz diff --git a/.licenses/go/github.com/ulikunitz/xz/internal/hash.dep.yml b/.licenses/go/github.com/ulikunitz/xz/internal/hash.dep.yml index 470737fb663..c9a34e7af73 100644 --- a/.licenses/go/github.com/ulikunitz/xz/internal/hash.dep.yml +++ b/.licenses/go/github.com/ulikunitz/xz/internal/hash.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ulikunitz/xz/internal/hash -version: v0.5.11 +version: v0.5.12 type: go summary: Package hash provides rolling hashes. homepage: https://pkg.go.dev/github.com/ulikunitz/xz/internal/hash license: bsd-3-clause licenses: -- sources: xz@v0.5.11/LICENSE +- sources: xz@v0.5.12/LICENSE text: | Copyright (c) 2014-2022 Ulrich Kunitz All rights reserved. diff --git a/.licenses/go/github.com/ulikunitz/xz/internal/xlog.dep.yml b/.licenses/go/github.com/ulikunitz/xz/internal/xlog.dep.yml index 5fc1e57f735..a5ec3008817 100644 --- a/.licenses/go/github.com/ulikunitz/xz/internal/xlog.dep.yml +++ b/.licenses/go/github.com/ulikunitz/xz/internal/xlog.dep.yml @@ -1,13 +1,13 @@ --- name: github.com/ulikunitz/xz/internal/xlog -version: v0.5.11 +version: v0.5.12 type: go summary: Package xlog provides a simple logging package that allows to disable certain message categories. homepage: https://pkg.go.dev/github.com/ulikunitz/xz/internal/xlog license: bsd-3-clause licenses: -- sources: xz@v0.5.11/LICENSE +- sources: xz@v0.5.12/LICENSE text: | Copyright (c) 2014-2022 Ulrich Kunitz All rights reserved. diff --git a/.licenses/go/github.com/ulikunitz/xz/lzma.dep.yml b/.licenses/go/github.com/ulikunitz/xz/lzma.dep.yml index b30f1859d71..66a937e5ea4 100644 --- a/.licenses/go/github.com/ulikunitz/xz/lzma.dep.yml +++ b/.licenses/go/github.com/ulikunitz/xz/lzma.dep.yml @@ -1,12 +1,12 @@ --- name: github.com/ulikunitz/xz/lzma -version: v0.5.11 +version: v0.5.12 type: go summary: Package lzma supports the decoding and encoding of LZMA streams. homepage: https://pkg.go.dev/github.com/ulikunitz/xz/lzma license: bsd-3-clause licenses: -- sources: xz@v0.5.11/LICENSE +- sources: xz@v0.5.12/LICENSE text: | Copyright (c) 2014-2022 Ulrich Kunitz All rights reserved. diff --git a/.licenses/go/go.bug.st/downloader/v2.dep.yml b/.licenses/go/go.bug.st/downloader/v2.dep.yml index e255579fe5d..7d49aad7226 100644 --- a/.licenses/go/go.bug.st/downloader/v2.dep.yml +++ b/.licenses/go/go.bug.st/downloader/v2.dep.yml @@ -1,6 +1,6 @@ --- name: go.bug.st/downloader/v2 -version: v2.1.1 +version: v2.2.0 type: go summary: homepage: https://pkg.go.dev/go.bug.st/downloader/v2 diff --git a/.licenses/go/go.bug.st/f.dep.yml b/.licenses/go/go.bug.st/f.dep.yml new file mode 100644 index 00000000000..59ef92f95a3 --- /dev/null +++ b/.licenses/go/go.bug.st/f.dep.yml @@ -0,0 +1,45 @@ +--- +name: go.bug.st/f +version: v0.4.0 +type: go +summary: Package f is a golang library implementing some basic algorithms. +homepage: https://godoc.org/go.bug.st/f +license: bsd-3-clause +licenses: +- sources: LICENSE + text: |2+ + + Copyright (c) 2024, Cristian Maglie. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +notices: [] +... diff --git a/.licenses/go/go.bug.st/relaxed-semver.dep.yml b/.licenses/go/go.bug.st/relaxed-semver.dep.yml index 42e7ce72caf..6ac2c4a1e29 100644 --- a/.licenses/go/go.bug.st/relaxed-semver.dep.yml +++ b/.licenses/go/go.bug.st/relaxed-semver.dep.yml @@ -1,6 +1,6 @@ --- name: go.bug.st/relaxed-semver -version: v0.11.0 +version: v0.15.0 type: go summary: homepage: https://pkg.go.dev/go.bug.st/relaxed-semver @@ -9,7 +9,7 @@ licenses: - sources: LICENSE text: |2+ - Copyright (c) 2018-2022, Cristian Maglie. + Copyright (c) 2018-2025, Cristian Maglie. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/.licenses/go/go.bug.st/serial.dep.yml b/.licenses/go/go.bug.st/serial.dep.yml index c55d351d0ca..69008aa53fb 100644 --- a/.licenses/go/go.bug.st/serial.dep.yml +++ b/.licenses/go/go.bug.st/serial.dep.yml @@ -1,6 +1,6 @@ --- name: go.bug.st/serial -version: v1.6.1 +version: v1.6.2 type: go summary: Package serial is a cross-platform serial library for the go language. homepage: https://pkg.go.dev/go.bug.st/serial diff --git a/.licenses/go/go.bug.st/serial/unixutils.dep.yml b/.licenses/go/go.bug.st/serial/unixutils.dep.yml index b744d2524d1..56868ecb299 100644 --- a/.licenses/go/go.bug.st/serial/unixutils.dep.yml +++ b/.licenses/go/go.bug.st/serial/unixutils.dep.yml @@ -1,12 +1,12 @@ --- name: go.bug.st/serial/unixutils -version: v1.6.1 +version: v1.6.2 type: go summary: homepage: https://pkg.go.dev/go.bug.st/serial/unixutils license: bsd-3-clause licenses: -- sources: serial@v1.6.1/LICENSE +- sources: serial@v1.6.2/LICENSE text: |2+ Copyright (c) 2014-2023, Cristian Maglie. @@ -41,7 +41,7 @@ licenses: ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: serial@v1.6.1/README.md +- sources: serial@v1.6.2/README.md text: |- The software is release under a [BSD 3-clause license] diff --git a/.licenses/go/golang.org/x/crypto/argon2.dep.yml b/.licenses/go/golang.org/x/crypto/argon2.dep.yml index 26cb05b88c0..41421486c89 100644 --- a/.licenses/go/golang.org/x/crypto/argon2.dep.yml +++ b/.licenses/go/golang.org/x/crypto/argon2.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/crypto/argon2 -version: v0.14.0 +version: v0.37.0 type: go summary: Package argon2 implements the key derivation function Argon2. homepage: https://pkg.go.dev/golang.org/x/crypto/argon2 -license: other +license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/blake2b.dep.yml b/.licenses/go/golang.org/x/crypto/blake2b.dep.yml index 35cc490981d..b4ba10ebf38 100644 --- a/.licenses/go/golang.org/x/crypto/blake2b.dep.yml +++ b/.licenses/go/golang.org/x/crypto/blake2b.dep.yml @@ -1,15 +1,15 @@ --- name: golang.org/x/crypto/blake2b -version: v0.14.0 +version: v0.37.0 type: go summary: Package blake2b implements the BLAKE2b hash algorithm defined by RFC 7693 and the extendable output function (XOF) BLAKE2Xb. homepage: https://pkg.go.dev/golang.org/x/crypto/blake2b -license: other +license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -21,7 +21,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/blowfish.dep.yml b/.licenses/go/golang.org/x/crypto/blowfish.dep.yml index 673b5ea2756..47deecfb634 100644 --- a/.licenses/go/golang.org/x/crypto/blowfish.dep.yml +++ b/.licenses/go/golang.org/x/crypto/blowfish.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/crypto/blowfish -version: v0.14.0 +version: v0.37.0 type: go summary: Package blowfish implements Bruce Schneier's Blowfish encryption algorithm. homepage: https://pkg.go.dev/golang.org/x/crypto/blowfish license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/cast5.dep.yml b/.licenses/go/golang.org/x/crypto/cast5.dep.yml index cc24bc1f555..472d7c6eb71 100644 --- a/.licenses/go/golang.org/x/crypto/cast5.dep.yml +++ b/.licenses/go/golang.org/x/crypto/cast5.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/crypto/cast5 -version: v0.14.0 +version: v0.37.0 type: go summary: Package cast5 implements CAST5, as defined in RFC 2144. homepage: https://pkg.go.dev/golang.org/x/crypto/cast5 license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/curve25519.dep.yml b/.licenses/go/golang.org/x/crypto/curve25519.dep.yml index 6904f20a20c..db2cad5cb0f 100644 --- a/.licenses/go/golang.org/x/crypto/curve25519.dep.yml +++ b/.licenses/go/golang.org/x/crypto/curve25519.dep.yml @@ -1,15 +1,15 @@ --- name: golang.org/x/crypto/curve25519 -version: v0.14.0 +version: v0.37.0 type: go summary: Package curve25519 provides an implementation of the X25519 function, which performs scalar multiplication on the elliptic curve known as Curve25519. homepage: https://pkg.go.dev/golang.org/x/crypto/curve25519 license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -21,7 +21,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/hkdf.dep.yml b/.licenses/go/golang.org/x/crypto/hkdf.dep.yml new file mode 100644 index 00000000000..4678764fd83 --- /dev/null +++ b/.licenses/go/golang.org/x/crypto/hkdf.dep.yml @@ -0,0 +1,63 @@ +--- +name: golang.org/x/crypto/hkdf +version: v0.37.0 +type: go +summary: Package hkdf implements the HMAC-based Extract-and-Expand Key Derivation + Function (HKDF) as defined in RFC 5869. +homepage: https://pkg.go.dev/golang.org/x/crypto/hkdf +license: bsd-3-clause +licenses: +- sources: crypto@v0.37.0/LICENSE + text: | + Copyright 2009 The Go Authors. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- sources: crypto@v0.37.0/PATENTS + text: | + Additional IP Rights Grant (Patents) + + "This implementation" means the copyrightable works distributed by + Google as part of the Go project. + + Google hereby grants to You a perpetual, worldwide, non-exclusive, + no-charge, royalty-free, irrevocable (except as stated in this section) + patent license to make, have made, use, offer to sell, sell, import, + transfer and otherwise run, modify and propagate the contents of this + implementation of Go, where such license applies only to those patent + claims, both currently owned or controlled by Google and acquired in + the future, licensable by Google that are necessarily infringed by this + implementation of Go. This grant does not include claims that would be + infringed only as a consequence of further modification of this + implementation. If you or your agent or exclusive licensee institute or + order or agree to the institution of patent litigation against any + entity (including a cross-claim or counterclaim in a lawsuit) alleging + that this implementation of Go or any code incorporated within this + implementation of Go constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any patent + rights granted to you under this License for this implementation of Go + shall terminate as of the date such litigation is filed. +notices: [] diff --git a/.licenses/go/golang.org/x/crypto/sha3.dep.yml b/.licenses/go/golang.org/x/crypto/sha3.dep.yml index 8eb9022dbe5..a854eae5e2a 100644 --- a/.licenses/go/golang.org/x/crypto/sha3.dep.yml +++ b/.licenses/go/golang.org/x/crypto/sha3.dep.yml @@ -1,15 +1,15 @@ --- name: golang.org/x/crypto/sha3 -version: v0.14.0 +version: v0.37.0 type: go summary: Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202. homepage: https://pkg.go.dev/golang.org/x/crypto/sha3 license: other licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -21,7 +21,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/ssh.dep.yml b/.licenses/go/golang.org/x/crypto/ssh.dep.yml index 1c44d2ffcd5..51cc4f34fdd 100644 --- a/.licenses/go/golang.org/x/crypto/ssh.dep.yml +++ b/.licenses/go/golang.org/x/crypto/ssh.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/crypto/ssh -version: v0.14.0 +version: v0.37.0 type: go summary: Package ssh implements an SSH client and server. homepage: https://pkg.go.dev/golang.org/x/crypto/ssh license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/ssh/agent.dep.yml b/.licenses/go/golang.org/x/crypto/ssh/agent.dep.yml index f6d974982aa..9df1ce6608c 100644 --- a/.licenses/go/golang.org/x/crypto/ssh/agent.dep.yml +++ b/.licenses/go/golang.org/x/crypto/ssh/agent.dep.yml @@ -1,15 +1,15 @@ --- name: golang.org/x/crypto/ssh/agent -version: v0.14.0 +version: v0.37.0 type: go summary: Package agent implements the ssh-agent protocol, and provides both a client and a server. homepage: https://pkg.go.dev/golang.org/x/crypto/ssh/agent license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -21,7 +21,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf.dep.yml b/.licenses/go/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf.dep.yml index d1df2f193ee..da7606d4a2d 100644 --- a/.licenses/go/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf.dep.yml +++ b/.licenses/go/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/crypto/ssh/internal/bcrypt_pbkdf -version: v0.14.0 +version: v0.37.0 type: go summary: Package bcrypt_pbkdf implements bcrypt_pbkdf(3) from OpenBSD. homepage: https://pkg.go.dev/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/crypto/ssh/knownhosts.dep.yml b/.licenses/go/golang.org/x/crypto/ssh/knownhosts.dep.yml index c214063f85f..110580f8187 100644 --- a/.licenses/go/golang.org/x/crypto/ssh/knownhosts.dep.yml +++ b/.licenses/go/golang.org/x/crypto/ssh/knownhosts.dep.yml @@ -1,6 +1,6 @@ --- name: golang.org/x/crypto/ssh/knownhosts -version: v0.14.0 +version: v0.37.0 type: go summary: Package knownhosts implements a parser for the OpenSSH known_hosts host key database, and provides utility functions for writing OpenSSH compliant known_hosts @@ -8,9 +8,9 @@ summary: Package knownhosts implements a parser for the OpenSSH known_hosts host homepage: https://pkg.go.dev/golang.org/x/crypto/ssh/knownhosts license: bsd-3-clause licenses: -- sources: crypto@v0.14.0/LICENSE +- sources: crypto@v0.37.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -22,7 +22,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -37,7 +37,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: crypto@v0.14.0/PATENTS +- sources: crypto@v0.37.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/context.dep.yml b/.licenses/go/golang.org/x/net/context.dep.yml index b23d53b3a73..fa503d775d2 100644 --- a/.licenses/go/golang.org/x/net/context.dep.yml +++ b/.licenses/go/golang.org/x/net/context.dep.yml @@ -1,15 +1,15 @@ --- name: golang.org/x/net/context -version: v0.17.0 +version: v0.39.0 type: go -summary: Package context defines the Context type, which carries deadlines, cancelation +summary: Package context defines the Context type, which carries deadlines, cancellation signals, and other request-scoped values across API boundaries and between processes. homepage: https://pkg.go.dev/golang.org/x/net/context license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.39.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -21,7 +21,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.39.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/http2.dep.yml b/.licenses/go/golang.org/x/net/http2.dep.yml index a6c91378197..f73c354f234 100644 --- a/.licenses/go/golang.org/x/net/http2.dep.yml +++ b/.licenses/go/golang.org/x/net/http2.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/net/http2 -version: v0.17.0 +version: v0.39.0 type: go summary: Package http2 implements the HTTP/2 protocol. homepage: https://pkg.go.dev/golang.org/x/net/http2 license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.39.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.39.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/internal/httpcommon.dep.yml b/.licenses/go/golang.org/x/net/internal/httpcommon.dep.yml new file mode 100644 index 00000000000..884179b9339 --- /dev/null +++ b/.licenses/go/golang.org/x/net/internal/httpcommon.dep.yml @@ -0,0 +1,62 @@ +--- +name: golang.org/x/net/internal/httpcommon +version: v0.39.0 +type: go +summary: +homepage: https://pkg.go.dev/golang.org/x/net/internal/httpcommon +license: bsd-3-clause +licenses: +- sources: net@v0.39.0/LICENSE + text: | + Copyright 2009 The Go Authors. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- sources: net@v0.39.0/PATENTS + text: | + Additional IP Rights Grant (Patents) + + "This implementation" means the copyrightable works distributed by + Google as part of the Go project. + + Google hereby grants to You a perpetual, worldwide, non-exclusive, + no-charge, royalty-free, irrevocable (except as stated in this section) + patent license to make, have made, use, offer to sell, sell, import, + transfer and otherwise run, modify and propagate the contents of this + implementation of Go, where such license applies only to those patent + claims, both currently owned or controlled by Google and acquired in + the future, licensable by Google that are necessarily infringed by this + implementation of Go. This grant does not include claims that would be + infringed only as a consequence of further modification of this + implementation. If you or your agent or exclusive licensee institute or + order or agree to the institution of patent litigation against any + entity (including a cross-claim or counterclaim in a lawsuit) alleging + that this implementation of Go or any code incorporated within this + implementation of Go constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any patent + rights granted to you under this License for this implementation of Go + shall terminate as of the date such litigation is filed. +notices: [] diff --git a/.licenses/go/golang.org/x/net/internal/socks.dep.yml b/.licenses/go/golang.org/x/net/internal/socks.dep.yml index ddb35768373..0b4715c838f 100644 --- a/.licenses/go/golang.org/x/net/internal/socks.dep.yml +++ b/.licenses/go/golang.org/x/net/internal/socks.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/net/internal/socks -version: v0.17.0 +version: v0.39.0 type: go summary: Package socks provides a SOCKS version 5 client implementation. homepage: https://pkg.go.dev/golang.org/x/net/internal/socks license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.39.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.39.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/internal/timeseries.dep.yml b/.licenses/go/golang.org/x/net/internal/timeseries.dep.yml index 061490104e4..56f464eebf7 100644 --- a/.licenses/go/golang.org/x/net/internal/timeseries.dep.yml +++ b/.licenses/go/golang.org/x/net/internal/timeseries.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/net/internal/timeseries -version: v0.17.0 +version: v0.39.0 type: go summary: Package timeseries implements a time series structure for stats collection. homepage: https://pkg.go.dev/golang.org/x/net/internal/timeseries license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.39.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.39.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/proxy.dep.yml b/.licenses/go/golang.org/x/net/proxy.dep.yml index 59c34c05487..67866d2af52 100644 --- a/.licenses/go/golang.org/x/net/proxy.dep.yml +++ b/.licenses/go/golang.org/x/net/proxy.dep.yml @@ -1,15 +1,15 @@ --- name: golang.org/x/net/proxy -version: v0.17.0 +version: v0.39.0 type: go summary: Package proxy provides support for a variety of protocols to proxy network data. homepage: https://pkg.go.dev/golang.org/x/net/proxy license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.39.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -21,7 +21,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.39.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/net/trace.dep.yml b/.licenses/go/golang.org/x/net/trace.dep.yml index 193ba90548d..5e84bd215ba 100644 --- a/.licenses/go/golang.org/x/net/trace.dep.yml +++ b/.licenses/go/golang.org/x/net/trace.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/net/trace -version: v0.17.0 +version: v0.39.0 type: go summary: Package trace implements tracing of requests and long-lived objects. homepage: https://pkg.go.dev/golang.org/x/net/trace license: bsd-3-clause licenses: -- sources: net@v0.17.0/LICENSE +- sources: net@v0.39.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: net@v0.17.0/PATENTS +- sources: net@v0.39.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/sys/execabs.dep.yml b/.licenses/go/golang.org/x/sys/execabs.dep.yml index e5a8d9ee689..d2eeeb205c3 100644 --- a/.licenses/go/golang.org/x/sys/execabs.dep.yml +++ b/.licenses/go/golang.org/x/sys/execabs.dep.yml @@ -1,15 +1,15 @@ --- name: golang.org/x/sys/execabs -version: v0.13.0 +version: v0.32.0 type: go summary: Package execabs is a drop-in replacement for os/exec that requires PATH lookups to find absolute paths. homepage: https://pkg.go.dev/golang.org/x/sys/execabs license: other licenses: -- sources: sys@v0.13.0/LICENSE +- sources: sys@v0.32.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -21,7 +21,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: sys@v0.13.0/PATENTS +- sources: sys@v0.32.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/sys/unix.dep.yml b/.licenses/go/golang.org/x/sys/unix.dep.yml index 06b6e11b31f..63734fd7e4f 100644 --- a/.licenses/go/golang.org/x/sys/unix.dep.yml +++ b/.licenses/go/golang.org/x/sys/unix.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/sys/unix -version: v0.13.0 +version: v0.32.0 type: go summary: Package unix contains an interface to the low-level operating system primitives. homepage: https://pkg.go.dev/golang.org/x/sys/unix license: bsd-3-clause licenses: -- sources: sys@v0.13.0/LICENSE +- sources: sys@v0.32.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: sys@v0.13.0/PATENTS +- sources: sys@v0.32.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/term.dep.yml b/.licenses/go/golang.org/x/term.dep.yml index c78b0fd1456..a8c6b02a552 100644 --- a/.licenses/go/golang.org/x/term.dep.yml +++ b/.licenses/go/golang.org/x/term.dep.yml @@ -1,6 +1,6 @@ --- name: golang.org/x/term -version: v0.13.0 +version: v0.31.0 type: go summary: Package term provides support functions for dealing with terminals, as commonly found on UNIX systems. @@ -9,7 +9,7 @@ license: bsd-3-clause licenses: - sources: LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -21,7 +21,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/.licenses/go/golang.org/x/text/encoding.dep.yml b/.licenses/go/golang.org/x/text/encoding.dep.yml index d2e3fb48b23..d72fdaa52d0 100644 --- a/.licenses/go/golang.org/x/text/encoding.dep.yml +++ b/.licenses/go/golang.org/x/text/encoding.dep.yml @@ -1,15 +1,15 @@ --- name: golang.org/x/text/encoding -version: v0.13.0 +version: v0.24.0 type: go summary: Package encoding defines an interface for character encodings, such as Shift JIS and Windows 1252, that can convert to and from UTF-8. homepage: https://pkg.go.dev/golang.org/x/text/encoding license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.24.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -21,7 +21,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.24.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/encoding/internal.dep.yml b/.licenses/go/golang.org/x/text/encoding/internal.dep.yml index fff514e79bc..5866849a9bd 100644 --- a/.licenses/go/golang.org/x/text/encoding/internal.dep.yml +++ b/.licenses/go/golang.org/x/text/encoding/internal.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/text/encoding/internal -version: v0.13.0 +version: v0.24.0 type: go summary: Package internal contains code that is shared among encoding implementations. homepage: https://pkg.go.dev/golang.org/x/text/encoding/internal license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.24.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.24.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/encoding/internal/identifier.dep.yml b/.licenses/go/golang.org/x/text/encoding/internal/identifier.dep.yml index 1e12ad752a9..dfd79d45d17 100644 --- a/.licenses/go/golang.org/x/text/encoding/internal/identifier.dep.yml +++ b/.licenses/go/golang.org/x/text/encoding/internal/identifier.dep.yml @@ -1,6 +1,6 @@ --- name: golang.org/x/text/encoding/internal/identifier -version: v0.13.0 +version: v0.24.0 type: go summary: Package identifier defines the contract between implementations of Encoding and Index by defining identifiers that uniquely identify standardized coded character @@ -10,9 +10,9 @@ summary: Package identifier defines the contract between implementations of Enco homepage: https://pkg.go.dev/golang.org/x/text/encoding/internal/identifier license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.24.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -24,7 +24,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -39,7 +39,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.24.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/encoding/unicode.dep.yml b/.licenses/go/golang.org/x/text/encoding/unicode.dep.yml index a8bdcffd4db..5d614c25340 100644 --- a/.licenses/go/golang.org/x/text/encoding/unicode.dep.yml +++ b/.licenses/go/golang.org/x/text/encoding/unicode.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/text/encoding/unicode -version: v0.13.0 +version: v0.24.0 type: go summary: Package unicode provides Unicode encodings such as UTF-16. homepage: https://pkg.go.dev/golang.org/x/text/encoding/unicode license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.24.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.24.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/internal/utf8internal.dep.yml b/.licenses/go/golang.org/x/text/internal/utf8internal.dep.yml index 7e7335344e0..5a94ace3dac 100644 --- a/.licenses/go/golang.org/x/text/internal/utf8internal.dep.yml +++ b/.licenses/go/golang.org/x/text/internal/utf8internal.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/text/internal/utf8internal -version: v0.13.0 +version: v0.24.0 type: go summary: Package utf8internal contains low-level utf8-related constants, tables, etc. homepage: https://pkg.go.dev/golang.org/x/text/internal/utf8internal license: other licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.24.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.24.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/golang.org/x/text/runes.dep.yml b/.licenses/go/golang.org/x/text/runes.dep.yml index ebf8c20b2f5..faccf2bbd7a 100644 --- a/.licenses/go/golang.org/x/text/runes.dep.yml +++ b/.licenses/go/golang.org/x/text/runes.dep.yml @@ -1,14 +1,14 @@ --- name: golang.org/x/text/runes -version: v0.13.0 +version: v0.24.0 type: go summary: Package runes provide transforms for UTF-8 encoded text. homepage: https://pkg.go.dev/golang.org/x/text/runes license: bsd-3-clause licenses: -- sources: text@v0.13.0/LICENSE +- sources: text@v0.24.0/LICENSE text: | - Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -20,7 +20,7 @@ licenses: copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: text@v0.13.0/PATENTS +- sources: text@v0.24.0/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/genproto/googleapis/rpc/status.dep.yml b/.licenses/go/google.golang.org/genproto/googleapis/rpc/status.dep.yml index cafd8a3e5fd..fb9180ea76f 100644 --- a/.licenses/go/google.golang.org/genproto/googleapis/rpc/status.dep.yml +++ b/.licenses/go/google.golang.org/genproto/googleapis/rpc/status.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/genproto/googleapis/rpc/status -version: v0.0.0-20231012201019-e917dd12ba7a +version: v0.0.0-20250218202821-56aae31c358a type: go -summary: +summary: homepage: https://pkg.go.dev/google.golang.org/genproto/googleapis/rpc/status license: apache-2.0 licenses: -- sources: rpc@v0.0.0-20231012201019-e917dd12ba7a/LICENSE +- sources: rpc@v0.0.0-20250218202821-56aae31c358a/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc.dep.yml b/.licenses/go/google.golang.org/grpc.dep.yml index a585fa9a3a0..1f818798e09 100644 --- a/.licenses/go/google.golang.org/grpc.dep.yml +++ b/.licenses/go/google.golang.org/grpc.dep.yml @@ -1,6 +1,6 @@ --- name: google.golang.org/grpc -version: v1.59.0 +version: v1.72.0 type: go summary: Package grpc implements an RPC system called gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc diff --git a/.licenses/go/google.golang.org/grpc/attributes.dep.yml b/.licenses/go/google.golang.org/grpc/attributes.dep.yml index 9befb12adc6..daad74de000 100644 --- a/.licenses/go/google.golang.org/grpc/attributes.dep.yml +++ b/.licenses/go/google.golang.org/grpc/attributes.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/attributes -version: v1.59.0 +version: v1.72.0 type: go summary: Package attributes defines a generic key/value store used in various gRPC components. homepage: https://pkg.go.dev/google.golang.org/grpc/attributes license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/backoff.dep.yml b/.licenses/go/google.golang.org/grpc/backoff.dep.yml index 0579efa6c6c..d31941c32c8 100644 --- a/.licenses/go/google.golang.org/grpc/backoff.dep.yml +++ b/.licenses/go/google.golang.org/grpc/backoff.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/backoff -version: v1.59.0 +version: v1.72.0 type: go summary: Package backoff provides configuration options for backoff. homepage: https://pkg.go.dev/google.golang.org/grpc/backoff license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/balancer.dep.yml b/.licenses/go/google.golang.org/grpc/balancer.dep.yml index 21aec050d2f..91273b196a4 100644 --- a/.licenses/go/google.golang.org/grpc/balancer.dep.yml +++ b/.licenses/go/google.golang.org/grpc/balancer.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/balancer -version: v1.59.0 +version: v1.72.0 type: go summary: Package balancer defines APIs for load balancing in gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/balancer license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/balancer/base.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/base.dep.yml index 82f7d5e6dcb..b9970d4fb0d 100644 --- a/.licenses/go/google.golang.org/grpc/balancer/base.dep.yml +++ b/.licenses/go/google.golang.org/grpc/balancer/base.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/balancer/base -version: v1.59.0 +version: v1.72.0 type: go summary: Package base defines a balancer base that can be used to build balancers with different picking algorithms. homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/base license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/balancer/endpointsharding.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/endpointsharding.dep.yml new file mode 100644 index 00000000000..d3739824754 --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/balancer/endpointsharding.dep.yml @@ -0,0 +1,214 @@ +--- +name: google.golang.org/grpc/balancer/endpointsharding +version: v1.72.0 +type: go +summary: Package endpointsharding implements a load balancing policy that manages + homogeneous child policies each owning a single endpoint. +homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/endpointsharding +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/balancer/grpclb/state.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/grpclb/state.dep.yml index 420a6707984..c81465c541a 100644 --- a/.licenses/go/google.golang.org/grpc/balancer/grpclb/state.dep.yml +++ b/.licenses/go/google.golang.org/grpc/balancer/grpclb/state.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/balancer/grpclb/state -version: v1.59.0 +version: v1.72.0 type: go summary: Package state declares grpclb types to be set by resolvers wishing to pass information to grpclb via resolver.State Attributes. homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/grpclb/state license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/grpcrand.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/pickfirst.dep.yml similarity index 97% rename from .licenses/go/google.golang.org/grpc/internal/grpcrand.dep.yml rename to .licenses/go/google.golang.org/grpc/balancer/pickfirst.dep.yml index 5c3ef087218..550167183d3 100644 --- a/.licenses/go/google.golang.org/grpc/internal/grpcrand.dep.yml +++ b/.licenses/go/google.golang.org/grpc/balancer/pickfirst.dep.yml @@ -1,13 +1,12 @@ --- -name: google.golang.org/grpc/internal/grpcrand -version: v1.59.0 +name: google.golang.org/grpc/balancer/pickfirst +version: v1.72.0 type: go -summary: Package grpcrand implements math/rand functions in a concurrent-safe way - with a global random source, independent of math/rand's global source. -homepage: https://pkg.go.dev/google.golang.org/grpc/internal/grpcrand +summary: Package pickfirst contains the pick_first load balancing policy. +homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/pickfirst license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/balancer/pickfirst/internal.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/pickfirst/internal.dep.yml new file mode 100644 index 00000000000..e37a1e02019 --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/balancer/pickfirst/internal.dep.yml @@ -0,0 +1,213 @@ +--- +name: google.golang.org/grpc/balancer/pickfirst/internal +version: v1.72.0 +type: go +summary: Package internal contains code internal to the pickfirst package. +homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/pickfirst/internal +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf.dep.yml new file mode 100644 index 00000000000..89565229de5 --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf.dep.yml @@ -0,0 +1,214 @@ +--- +name: google.golang.org/grpc/balancer/pickfirst/pickfirstleaf +version: v1.72.0 +type: go +summary: Package pickfirstleaf contains the pick_first load balancing policy which + will be the universal leaf policy after dualstack changes are implemented. +homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/balancer/roundrobin.dep.yml b/.licenses/go/google.golang.org/grpc/balancer/roundrobin.dep.yml index 3222ed332d4..5d97a3bb070 100644 --- a/.licenses/go/google.golang.org/grpc/balancer/roundrobin.dep.yml +++ b/.licenses/go/google.golang.org/grpc/balancer/roundrobin.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/balancer/roundrobin -version: v1.59.0 +version: v1.72.0 type: go summary: Package roundrobin defines a roundrobin balancer. homepage: https://pkg.go.dev/google.golang.org/grpc/balancer/roundrobin license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/binarylog/grpc_binarylog_v1.dep.yml b/.licenses/go/google.golang.org/grpc/binarylog/grpc_binarylog_v1.dep.yml index a9a5be3046d..0656f8dc769 100644 --- a/.licenses/go/google.golang.org/grpc/binarylog/grpc_binarylog_v1.dep.yml +++ b/.licenses/go/google.golang.org/grpc/binarylog/grpc_binarylog_v1.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/binarylog/grpc_binarylog_v1 -version: v1.59.0 +version: v1.72.0 type: go -summary: +summary: homepage: https://pkg.go.dev/google.golang.org/grpc/binarylog/grpc_binarylog_v1 license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/channelz.dep.yml b/.licenses/go/google.golang.org/grpc/channelz.dep.yml index 823fc583aa0..a7d4e0fd164 100644 --- a/.licenses/go/google.golang.org/grpc/channelz.dep.yml +++ b/.licenses/go/google.golang.org/grpc/channelz.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/channelz -version: v1.59.0 +version: v1.72.0 type: go summary: Package channelz exports internals of the channelz implementation as required by other gRPC packages. homepage: https://pkg.go.dev/google.golang.org/grpc/channelz license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/codes.dep.yml b/.licenses/go/google.golang.org/grpc/codes.dep.yml index e87033f466c..bc88cec5aef 100644 --- a/.licenses/go/google.golang.org/grpc/codes.dep.yml +++ b/.licenses/go/google.golang.org/grpc/codes.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/codes -version: v1.59.0 +version: v1.72.0 type: go summary: Package codes defines the canonical error codes used by gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/codes license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/connectivity.dep.yml b/.licenses/go/google.golang.org/grpc/connectivity.dep.yml index 7efc59fcdb5..c4249d13687 100644 --- a/.licenses/go/google.golang.org/grpc/connectivity.dep.yml +++ b/.licenses/go/google.golang.org/grpc/connectivity.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/connectivity -version: v1.59.0 +version: v1.72.0 type: go summary: Package connectivity defines connectivity semantics. homepage: https://pkg.go.dev/google.golang.org/grpc/connectivity license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/credentials.dep.yml b/.licenses/go/google.golang.org/grpc/credentials.dep.yml index 70c2e9d2a41..33de557a781 100644 --- a/.licenses/go/google.golang.org/grpc/credentials.dep.yml +++ b/.licenses/go/google.golang.org/grpc/credentials.dep.yml @@ -1,6 +1,6 @@ --- name: google.golang.org/grpc/credentials -version: v1.59.0 +version: v1.72.0 type: go summary: Package credentials implements various credentials supported by gRPC library, which encapsulate all the state needed by a client to authenticate with a server @@ -9,7 +9,7 @@ summary: Package credentials implements various credentials supported by gRPC li homepage: https://pkg.go.dev/google.golang.org/grpc/credentials license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/credentials/insecure.dep.yml b/.licenses/go/google.golang.org/grpc/credentials/insecure.dep.yml index c057209b0ba..875369419d9 100644 --- a/.licenses/go/google.golang.org/grpc/credentials/insecure.dep.yml +++ b/.licenses/go/google.golang.org/grpc/credentials/insecure.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/credentials/insecure -version: v1.59.0 +version: v1.72.0 type: go summary: Package insecure provides an implementation of the credentials.TransportCredentials interface which disables transport security. homepage: https://pkg.go.dev/google.golang.org/grpc/credentials/insecure license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/encoding.dep.yml b/.licenses/go/google.golang.org/grpc/encoding.dep.yml index a564ded5aba..ffdb6ca9e2a 100644 --- a/.licenses/go/google.golang.org/grpc/encoding.dep.yml +++ b/.licenses/go/google.golang.org/grpc/encoding.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/encoding -version: v1.59.0 +version: v1.72.0 type: go summary: Package encoding defines the interface for the compressor and codec, and functions to register and retrieve compressors and codecs. homepage: https://pkg.go.dev/google.golang.org/grpc/encoding license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/encoding/proto.dep.yml b/.licenses/go/google.golang.org/grpc/encoding/proto.dep.yml index cb57fd8dac0..4ae9e50f087 100644 --- a/.licenses/go/google.golang.org/grpc/encoding/proto.dep.yml +++ b/.licenses/go/google.golang.org/grpc/encoding/proto.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/encoding/proto -version: v1.59.0 +version: v1.72.0 type: go summary: Package proto defines the protobuf codec. homepage: https://pkg.go.dev/google.golang.org/grpc/encoding/proto license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/experimental/stats.dep.yml b/.licenses/go/google.golang.org/grpc/experimental/stats.dep.yml new file mode 100644 index 00000000000..31dedbe58b0 --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/experimental/stats.dep.yml @@ -0,0 +1,213 @@ +--- +name: google.golang.org/grpc/experimental/stats +version: v1.72.0 +type: go +summary: Package stats contains experimental metrics/stats API's. +homepage: https://pkg.go.dev/google.golang.org/grpc/experimental/stats +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/grpclog.dep.yml b/.licenses/go/google.golang.org/grpc/grpclog.dep.yml index 00cdc22eaf5..b75daf68093 100644 --- a/.licenses/go/google.golang.org/grpc/grpclog.dep.yml +++ b/.licenses/go/google.golang.org/grpc/grpclog.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/grpclog -version: v1.59.0 +version: v1.72.0 type: go summary: Package grpclog defines logging for grpc. homepage: https://pkg.go.dev/google.golang.org/grpc/grpclog license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/grpclog/internal.dep.yml b/.licenses/go/google.golang.org/grpc/grpclog/internal.dep.yml new file mode 100644 index 00000000000..59e47cde6c6 --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/grpclog/internal.dep.yml @@ -0,0 +1,213 @@ +--- +name: google.golang.org/grpc/grpclog/internal +version: v1.72.0 +type: go +summary: Package internal contains functionality internal to the grpclog package. +homepage: https://pkg.go.dev/google.golang.org/grpc/grpclog/internal +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/internal.dep.yml b/.licenses/go/google.golang.org/grpc/internal.dep.yml index 2dded8fecfd..32a8a313988 100644 --- a/.licenses/go/google.golang.org/grpc/internal.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal -version: v1.59.0 +version: v1.72.0 type: go summary: Package internal contains gRPC-internal code, to avoid polluting the godoc of the top-level grpc package. homepage: https://pkg.go.dev/google.golang.org/grpc/internal license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/backoff.dep.yml b/.licenses/go/google.golang.org/grpc/internal/backoff.dep.yml index 0b758f3d550..d67d4f739ac 100644 --- a/.licenses/go/google.golang.org/grpc/internal/backoff.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/backoff.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/backoff -version: v1.59.0 +version: v1.72.0 type: go summary: Package backoff implement the backoff strategy for gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/backoff license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/balancer/gracefulswitch.dep.yml b/.licenses/go/google.golang.org/grpc/internal/balancer/gracefulswitch.dep.yml index 90492543967..b68951d9f6a 100644 --- a/.licenses/go/google.golang.org/grpc/internal/balancer/gracefulswitch.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/balancer/gracefulswitch.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/balancer/gracefulswitch -version: v1.59.0 +version: v1.72.0 type: go summary: Package gracefulswitch implements a graceful switch load balancer. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/balancer/gracefulswitch license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/balancerload.dep.yml b/.licenses/go/google.golang.org/grpc/internal/balancerload.dep.yml index e26ecfae4ca..ebee895822a 100644 --- a/.licenses/go/google.golang.org/grpc/internal/balancerload.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/balancerload.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/balancerload -version: v1.59.0 +version: v1.72.0 type: go summary: Package balancerload defines APIs to parse server loads in trailers. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/balancerload license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/binarylog.dep.yml b/.licenses/go/google.golang.org/grpc/internal/binarylog.dep.yml index 10d9ce6506a..78c5aa4d95d 100644 --- a/.licenses/go/google.golang.org/grpc/internal/binarylog.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/binarylog.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/binarylog -version: v1.59.0 +version: v1.72.0 type: go summary: Package binarylog implementation binary logging as defined in https://github.com/grpc/proposal/blob/master/A16-binary-logging.md. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/binarylog license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/buffer.dep.yml b/.licenses/go/google.golang.org/grpc/internal/buffer.dep.yml index e7e9b96d2b0..291abdf8616 100644 --- a/.licenses/go/google.golang.org/grpc/internal/buffer.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/buffer.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/buffer -version: v1.59.0 +version: v1.72.0 type: go summary: Package buffer provides an implementation of an unbounded buffer. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/buffer license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/channelz.dep.yml b/.licenses/go/google.golang.org/grpc/internal/channelz.dep.yml index e362f694600..9fdd267d6d4 100644 --- a/.licenses/go/google.golang.org/grpc/internal/channelz.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/channelz.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/channelz -version: v1.59.0 +version: v1.72.0 type: go -summary: Package channelz defines APIs for enabling channelz service, entry registration/deletion, - and accessing channelz data. +summary: Package channelz defines internal APIs for enabling channelz service, entry + registration/deletion, and accessing channelz data. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/channelz license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/credentials.dep.yml b/.licenses/go/google.golang.org/grpc/internal/credentials.dep.yml index 9e96e53fa62..48a1889a22c 100644 --- a/.licenses/go/google.golang.org/grpc/internal/credentials.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/credentials.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/credentials -version: v1.59.0 +version: v1.72.0 type: go summary: Package credentials defines APIs for parsing SPIFFE ID. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/credentials license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/envconfig.dep.yml b/.licenses/go/google.golang.org/grpc/internal/envconfig.dep.yml index 5bd2910a7c1..343086b4714 100644 --- a/.licenses/go/google.golang.org/grpc/internal/envconfig.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/envconfig.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/envconfig -version: v1.59.0 +version: v1.72.0 type: go summary: Package envconfig contains grpc settings configured by environment variables. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/envconfig license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/grpclog.dep.yml b/.licenses/go/google.golang.org/grpc/internal/grpclog.dep.yml index 06459070b61..b1ea5ff1f08 100644 --- a/.licenses/go/google.golang.org/grpc/internal/grpclog.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/grpclog.dep.yml @@ -1,12 +1,13 @@ --- name: google.golang.org/grpc/internal/grpclog -version: v1.59.0 +version: v1.72.0 type: go -summary: Package grpclog (internal) defines depth logging for grpc. +summary: Package grpclog provides logging functionality for internal gRPC packages, + outside of the functionality provided by the external `grpclog` package. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/grpclog license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/grpcsync.dep.yml b/.licenses/go/google.golang.org/grpc/internal/grpcsync.dep.yml index 6172b356dbd..dd97de6bed2 100644 --- a/.licenses/go/google.golang.org/grpc/internal/grpcsync.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/grpcsync.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/grpcsync -version: v1.59.0 +version: v1.72.0 type: go summary: Package grpcsync implements additional synchronization primitives built upon the sync package. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/grpcsync license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/grpcutil.dep.yml b/.licenses/go/google.golang.org/grpc/internal/grpcutil.dep.yml index 0b2e60035cb..0a7e96504f1 100644 --- a/.licenses/go/google.golang.org/grpc/internal/grpcutil.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/grpcutil.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/grpcutil -version: v1.59.0 +version: v1.72.0 type: go summary: Package grpcutil provides utility functions used across the gRPC codebase. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/grpcutil license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/idle.dep.yml b/.licenses/go/google.golang.org/grpc/internal/idle.dep.yml index 690a1350553..82e64ec8b9a 100644 --- a/.licenses/go/google.golang.org/grpc/internal/idle.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/idle.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/idle -version: v1.59.0 +version: v1.72.0 type: go summary: Package idle contains a component for managing idleness (entering and exiting) based on RPC activity. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/idle license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/metadata.dep.yml b/.licenses/go/google.golang.org/grpc/internal/metadata.dep.yml index ee678ec0a75..09a87890c1d 100644 --- a/.licenses/go/google.golang.org/grpc/internal/metadata.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/metadata.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/metadata -version: v1.59.0 +version: v1.72.0 type: go summary: Package metadata contains functions to set and get metadata from addresses. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/metadata license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/pretty.dep.yml b/.licenses/go/google.golang.org/grpc/internal/pretty.dep.yml index 4f482986881..e96c5e820d7 100644 --- a/.licenses/go/google.golang.org/grpc/internal/pretty.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/pretty.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/pretty -version: v1.59.0 +version: v1.72.0 type: go summary: Package pretty defines helper functions to pretty-print structs for logging. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/pretty license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/proxyattributes.dep.yml b/.licenses/go/google.golang.org/grpc/internal/proxyattributes.dep.yml new file mode 100644 index 00000000000..e178b81ee5b --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/internal/proxyattributes.dep.yml @@ -0,0 +1,214 @@ +--- +name: google.golang.org/grpc/internal/proxyattributes +version: v1.72.0 +type: go +summary: Package proxyattributes contains functions for getting and setting proxy + attributes like the CONNECT address and user info. +homepage: https://pkg.go.dev/google.golang.org/grpc/internal/proxyattributes +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver.dep.yml index 8e7d86e8c71..b902ef5a8ec 100644 --- a/.licenses/go/google.golang.org/grpc/internal/resolver.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/resolver.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/resolver -version: v1.59.0 +version: v1.72.0 type: go summary: Package resolver provides internal resolver-related functionality. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver/delegatingresolver.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver/delegatingresolver.dep.yml new file mode 100644 index 00000000000..c399ffdb93a --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/internal/resolver/delegatingresolver.dep.yml @@ -0,0 +1,214 @@ +--- +name: google.golang.org/grpc/internal/resolver/delegatingresolver +version: v1.72.0 +type: go +summary: Package delegatingresolver implements a resolver capable of resolving both + target URIs and proxy addresses. +homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver/delegatingresolver +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver/dns.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver/dns.dep.yml index a22edaca46a..0f6202e5985 100644 --- a/.licenses/go/google.golang.org/grpc/internal/resolver/dns.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/resolver/dns.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/resolver/dns -version: v1.59.0 +version: v1.72.0 type: go summary: Package dns implements a dns resolver to be installed as the default resolver in grpc. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver/dns license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver/dns/internal.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver/dns/internal.dep.yml new file mode 100644 index 00000000000..5d3008a22bd --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/internal/resolver/dns/internal.dep.yml @@ -0,0 +1,213 @@ +--- +name: google.golang.org/grpc/internal/resolver/dns/internal +version: v1.72.0 +type: go +summary: Package internal contains functionality internal to the dns resolver package. +homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver/dns/internal +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver/passthrough.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver/passthrough.dep.yml index e4539c2ed72..d809dc1a9e5 100644 --- a/.licenses/go/google.golang.org/grpc/internal/resolver/passthrough.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/resolver/passthrough.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/resolver/passthrough -version: v1.59.0 +version: v1.72.0 type: go summary: Package passthrough implements a pass-through resolver. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver/passthrough license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/resolver/unix.dep.yml b/.licenses/go/google.golang.org/grpc/internal/resolver/unix.dep.yml index c0497dc623e..dae54706b32 100644 --- a/.licenses/go/google.golang.org/grpc/internal/resolver/unix.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/resolver/unix.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/resolver/unix -version: v1.59.0 +version: v1.72.0 type: go summary: Package unix implements a resolver for unix targets. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/resolver/unix license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/serviceconfig.dep.yml b/.licenses/go/google.golang.org/grpc/internal/serviceconfig.dep.yml index d48a818cd11..64219c4e724 100644 --- a/.licenses/go/google.golang.org/grpc/internal/serviceconfig.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/serviceconfig.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/serviceconfig -version: v1.59.0 +version: v1.72.0 type: go summary: Package serviceconfig contains utility functions to parse service config. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/serviceconfig license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/stats.dep.yml b/.licenses/go/google.golang.org/grpc/internal/stats.dep.yml new file mode 100644 index 00000000000..e237ba19cde --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/internal/stats.dep.yml @@ -0,0 +1,213 @@ +--- +name: google.golang.org/grpc/internal/stats +version: v1.72.0 +type: go +summary: Package stats provides internal stats related functionality. +homepage: https://pkg.go.dev/google.golang.org/grpc/internal/stats +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/internal/status.dep.yml b/.licenses/go/google.golang.org/grpc/internal/status.dep.yml index b9e184fb3f1..3babfd5a408 100644 --- a/.licenses/go/google.golang.org/grpc/internal/status.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/status.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/status -version: v1.59.0 +version: v1.72.0 type: go summary: Package status implements errors returned by gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/status license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/syscall.dep.yml b/.licenses/go/google.golang.org/grpc/internal/syscall.dep.yml index 9669ed849d3..678027f65e3 100644 --- a/.licenses/go/google.golang.org/grpc/internal/syscall.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/syscall.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/syscall -version: v1.59.0 +version: v1.72.0 type: go summary: Package syscall provides functionalities that grpc uses to get low-level operating system stats/info. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/syscall license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/transport.dep.yml b/.licenses/go/google.golang.org/grpc/internal/transport.dep.yml index 5dfe7fa30cb..2daf4a00e59 100644 --- a/.licenses/go/google.golang.org/grpc/internal/transport.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/transport.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/internal/transport -version: v1.59.0 +version: v1.72.0 type: go summary: Package transport defines and implements message oriented communication channel to complete various transactions (e.g., an RPC). homepage: https://pkg.go.dev/google.golang.org/grpc/internal/transport license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/internal/transport/networktype.dep.yml b/.licenses/go/google.golang.org/grpc/internal/transport/networktype.dep.yml index 348fb4cc16e..66ab6e32131 100644 --- a/.licenses/go/google.golang.org/grpc/internal/transport/networktype.dep.yml +++ b/.licenses/go/google.golang.org/grpc/internal/transport/networktype.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/internal/transport/networktype -version: v1.59.0 +version: v1.72.0 type: go summary: Package networktype declares the network type to be used in the default dialer. homepage: https://pkg.go.dev/google.golang.org/grpc/internal/transport/networktype license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/keepalive.dep.yml b/.licenses/go/google.golang.org/grpc/keepalive.dep.yml index 38e15142618..7728d998486 100644 --- a/.licenses/go/google.golang.org/grpc/keepalive.dep.yml +++ b/.licenses/go/google.golang.org/grpc/keepalive.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/keepalive -version: v1.59.0 +version: v1.72.0 type: go summary: Package keepalive defines configurable parameters for point-to-point healthcheck. homepage: https://pkg.go.dev/google.golang.org/grpc/keepalive license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/mem.dep.yml b/.licenses/go/google.golang.org/grpc/mem.dep.yml new file mode 100644 index 00000000000..833a60ae7fc --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/mem.dep.yml @@ -0,0 +1,214 @@ +--- +name: google.golang.org/grpc/mem +version: v1.72.0 +type: go +summary: Package mem provides utilities that facilitate memory reuse in byte slices + that are used as buffers. +homepage: https://pkg.go.dev/google.golang.org/grpc/mem +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/metadata.dep.yml b/.licenses/go/google.golang.org/grpc/metadata.dep.yml index a83c4b25c6e..31a33bc572f 100644 --- a/.licenses/go/google.golang.org/grpc/metadata.dep.yml +++ b/.licenses/go/google.golang.org/grpc/metadata.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/metadata -version: v1.59.0 +version: v1.72.0 type: go summary: Package metadata define the structure of the metadata supported by gRPC library. homepage: https://pkg.go.dev/google.golang.org/grpc/metadata license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/peer.dep.yml b/.licenses/go/google.golang.org/grpc/peer.dep.yml index b714097e75f..54fcf729f48 100644 --- a/.licenses/go/google.golang.org/grpc/peer.dep.yml +++ b/.licenses/go/google.golang.org/grpc/peer.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/peer -version: v1.59.0 +version: v1.72.0 type: go summary: Package peer defines various peer information associated with RPCs and corresponding utils. homepage: https://pkg.go.dev/google.golang.org/grpc/peer license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/resolver.dep.yml b/.licenses/go/google.golang.org/grpc/resolver.dep.yml index 31a507d9d11..c64f67ba7b0 100644 --- a/.licenses/go/google.golang.org/grpc/resolver.dep.yml +++ b/.licenses/go/google.golang.org/grpc/resolver.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/resolver -version: v1.59.0 +version: v1.72.0 type: go summary: Package resolver defines APIs for name resolution in gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/resolver license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/resolver/dns.dep.yml b/.licenses/go/google.golang.org/grpc/resolver/dns.dep.yml new file mode 100644 index 00000000000..3c76dd87c0b --- /dev/null +++ b/.licenses/go/google.golang.org/grpc/resolver/dns.dep.yml @@ -0,0 +1,214 @@ +--- +name: google.golang.org/grpc/resolver/dns +version: v1.72.0 +type: go +summary: Package dns implements a dns resolver to be installed as the default resolver + in grpc. +homepage: https://pkg.go.dev/google.golang.org/grpc/resolver/dns +license: apache-2.0 +licenses: +- sources: grpc@v1.72.0/LICENSE + text: |2 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +notices: [] diff --git a/.licenses/go/google.golang.org/grpc/serviceconfig.dep.yml b/.licenses/go/google.golang.org/grpc/serviceconfig.dep.yml index 4f4f6774fa1..1c7c22b6404 100644 --- a/.licenses/go/google.golang.org/grpc/serviceconfig.dep.yml +++ b/.licenses/go/google.golang.org/grpc/serviceconfig.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/serviceconfig -version: v1.59.0 +version: v1.72.0 type: go summary: Package serviceconfig defines types and methods for operating on gRPC service configs. homepage: https://pkg.go.dev/google.golang.org/grpc/serviceconfig license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/stats.dep.yml b/.licenses/go/google.golang.org/grpc/stats.dep.yml index 105008978f3..d0948a17740 100644 --- a/.licenses/go/google.golang.org/grpc/stats.dep.yml +++ b/.licenses/go/google.golang.org/grpc/stats.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/stats -version: v1.59.0 +version: v1.72.0 type: go summary: Package stats is for collecting and reporting various network and RPC stats. homepage: https://pkg.go.dev/google.golang.org/grpc/stats license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/status.dep.yml b/.licenses/go/google.golang.org/grpc/status.dep.yml index f480312b8db..e8b36243d49 100644 --- a/.licenses/go/google.golang.org/grpc/status.dep.yml +++ b/.licenses/go/google.golang.org/grpc/status.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/grpc/status -version: v1.59.0 +version: v1.72.0 type: go summary: Package status implements errors returned by gRPC. homepage: https://pkg.go.dev/google.golang.org/grpc/status license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/grpc/tap.dep.yml b/.licenses/go/google.golang.org/grpc/tap.dep.yml index 027c333b0c2..06da3f95c3e 100644 --- a/.licenses/go/google.golang.org/grpc/tap.dep.yml +++ b/.licenses/go/google.golang.org/grpc/tap.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/grpc/tap -version: v1.59.0 +version: v1.72.0 type: go summary: Package tap defines the function handles which are executed on the transport layer of gRPC-Go and related information. homepage: https://pkg.go.dev/google.golang.org/grpc/tap license: apache-2.0 licenses: -- sources: grpc@v1.59.0/LICENSE +- sources: grpc@v1.72.0/LICENSE text: |2 Apache License diff --git a/.licenses/go/google.golang.org/protobuf/encoding/protojson.dep.yml b/.licenses/go/google.golang.org/protobuf/encoding/protojson.dep.yml index ad959eadc42..5b111717d12 100644 --- a/.licenses/go/google.golang.org/protobuf/encoding/protojson.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/encoding/protojson.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/encoding/protojson -version: v1.31.0 +version: v1.36.6 type: go summary: Package protojson marshals and unmarshals protocol buffer messages as JSON format. homepage: https://pkg.go.dev/google.golang.org/protobuf/encoding/protojson license: other licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/encoding/prototext.dep.yml b/.licenses/go/google.golang.org/protobuf/encoding/prototext.dep.yml index e68ff674843..fa8c6b9dda7 100644 --- a/.licenses/go/google.golang.org/protobuf/encoding/prototext.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/encoding/prototext.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/encoding/prototext -version: v1.31.0 +version: v1.36.6 type: go summary: Package prototext marshals and unmarshals protocol buffer messages as the textproto format. homepage: https://pkg.go.dev/google.golang.org/protobuf/encoding/prototext license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/encoding/protowire.dep.yml b/.licenses/go/google.golang.org/protobuf/encoding/protowire.dep.yml index 92450adf2dc..2a709b7eb9a 100644 --- a/.licenses/go/google.golang.org/protobuf/encoding/protowire.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/encoding/protowire.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/encoding/protowire -version: v1.31.0 +version: v1.36.6 type: go summary: Package protowire parses and formats the raw wire encoding. homepage: https://pkg.go.dev/google.golang.org/protobuf/encoding/protowire license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/descfmt.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/descfmt.dep.yml index 1ec4ed0a132..dfc77d20cad 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/descfmt.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/descfmt.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/descfmt -version: v1.31.0 +version: v1.36.6 type: go summary: Package descfmt provides functionality to format descriptors. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/descfmt license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/descopts.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/descopts.dep.yml index e158e422e97..bf48781295c 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/descopts.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/descopts.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/descopts -version: v1.31.0 +version: v1.36.6 type: go summary: Package descopts contains the nil pointers to concrete descriptor options. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/descopts license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/detrand.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/detrand.dep.yml index 5a3ce24f021..de8d758c1e7 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/detrand.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/detrand.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/detrand -version: v1.31.0 +version: v1.36.6 type: go summary: Package detrand provides deterministically random functionality. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/detrand license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/reflect/protodesc.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/editiondefaults.dep.yml similarity index 89% rename from .licenses/go/google.golang.org/protobuf/reflect/protodesc.dep.yml rename to .licenses/go/google.golang.org/protobuf/internal/editiondefaults.dep.yml index 91aff701f2f..cf24ec27b65 100644 --- a/.licenses/go/google.golang.org/protobuf/reflect/protodesc.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/editiondefaults.dep.yml @@ -1,13 +1,13 @@ --- -name: google.golang.org/protobuf/reflect/protodesc -version: v1.31.0 +name: google.golang.org/protobuf/internal/editiondefaults +version: v1.36.6 type: go -summary: Package protodesc provides functionality for converting FileDescriptorProto - messages to/from protoreflect.FileDescriptor values. -homepage: https://pkg.go.dev/google.golang.org/protobuf/reflect/protodesc +summary: Package editiondefaults contains the binary representation of the editions + defaults. +homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/editiondefaults license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/defval.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/defval.dep.yml index 5eade23cbeb..1b1dda85d0c 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/defval.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/defval.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/encoding/defval -version: v1.31.0 +version: v1.36.6 type: go summary: Package defval marshals and unmarshals textual forms of default values. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/defval license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/json.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/json.dep.yml index c954ebf8ba0..c13c0b838e3 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/json.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/json.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/encoding/json -version: v1.31.0 +version: v1.36.6 type: go summary: homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/json license: other licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/messageset.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/messageset.dep.yml index 894b34a4fb2..301f01e5ec0 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/messageset.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/messageset.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/encoding/messageset -version: v1.31.0 +version: v1.36.6 type: go summary: Package messageset encodes and decodes the obsolete MessageSet wire format. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/messageset license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/tag.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/tag.dep.yml index f08484b0e27..3216052a3cd 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/tag.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/tag.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/internal/encoding/tag -version: v1.31.0 +version: v1.36.6 type: go summary: Package tag marshals and unmarshals the legacy struct tags as generated by historical versions of protoc-gen-go. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/tag license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/encoding/text.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/encoding/text.dep.yml index f225ea4fb27..6e1d0f4148a 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/encoding/text.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/encoding/text.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/encoding/text -version: v1.31.0 +version: v1.36.6 type: go summary: Package text implements the text format for protocol buffers. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/encoding/text license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/errors.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/errors.dep.yml index abaf8506d4b..f9ff1da3dc1 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/errors.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/errors.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/errors -version: v1.31.0 +version: v1.36.6 type: go summary: Package errors implements functions to manipulate errors. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/errors license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/filedesc.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/filedesc.dep.yml index 5009e130d84..4e6401d877d 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/filedesc.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/filedesc.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/filedesc -version: v1.31.0 +version: v1.36.6 type: go summary: Package filedesc provides functionality for constructing descriptors. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/filedesc license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/filetype.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/filetype.dep.yml index 0bf65708c16..28622c838d4 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/filetype.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/filetype.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/internal/filetype -version: v1.31.0 +version: v1.36.6 type: go summary: Package filetype provides functionality for wrapping descriptors with Go type information. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/filetype license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/flags.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/flags.dep.yml index 00b7eb5f67e..b2293a1c6dd 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/flags.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/flags.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/flags -version: v1.31.0 +version: v1.36.6 type: go summary: Package flags provides a set of flags controlled by build tags. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/flags license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/genid.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/genid.dep.yml index c7cebaba3b5..685c44fd390 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/genid.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/genid.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/internal/genid -version: v1.31.0 +version: v1.36.6 type: go summary: Package genid contains constants for declarations in descriptor.proto and the well-known types. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/genid license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/impl.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/impl.dep.yml index 7d99ece2374..3516366f692 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/impl.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/impl.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/impl -version: v1.31.0 +version: v1.36.6 type: go summary: homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/impl license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/order.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/order.dep.yml index 7726c99881d..59d61e7c527 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/order.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/order.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/order -version: v1.31.0 +version: v1.36.6 type: go summary: Package order provides ordered access to messages and maps. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/order license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/pragma.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/pragma.dep.yml index 7dac9ae78a6..001ed2bfbec 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/pragma.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/pragma.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/internal/pragma -version: v1.31.0 +version: v1.36.6 type: go summary: Package pragma provides types that can be embedded into a struct to statically enforce or prevent certain language properties. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/pragma license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/types/known/wrapperspb.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/protolazy.dep.yml similarity index 90% rename from .licenses/go/google.golang.org/protobuf/types/known/wrapperspb.dep.yml rename to .licenses/go/google.golang.org/protobuf/internal/protolazy.dep.yml index 6d93964224c..2435d7a2f5a 100644 --- a/.licenses/go/google.golang.org/protobuf/types/known/wrapperspb.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/protolazy.dep.yml @@ -1,12 +1,12 @@ --- -name: google.golang.org/protobuf/types/known/wrapperspb -version: v1.31.0 +name: google.golang.org/protobuf/internal/protolazy +version: v1.36.6 type: go -summary: -homepage: https://pkg.go.dev/google.golang.org/protobuf/types/known/wrapperspb +summary: Package protolazy contains internal data structures for lazy message decoding. +homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/protolazy license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/set.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/set.dep.yml index 12d530a0259..52152d0cf9e 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/set.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/set.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/set -version: v1.31.0 +version: v1.36.6 type: go summary: Package set provides simple set data structures for uint64s. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/set license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/strs.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/strs.dep.yml index 4e22c9344cf..9030b61dc80 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/strs.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/strs.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/strs -version: v1.31.0 +version: v1.36.6 type: go summary: Package strs provides string manipulation functionality specific to protobuf. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/strs license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/internal/version.dep.yml b/.licenses/go/google.golang.org/protobuf/internal/version.dep.yml index eea8da5ecaa..a8abbd93aee 100644 --- a/.licenses/go/google.golang.org/protobuf/internal/version.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/internal/version.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/internal/version -version: v1.31.0 +version: v1.36.6 type: go summary: Package version records versioning information about this module. homepage: https://pkg.go.dev/google.golang.org/protobuf/internal/version license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/proto.dep.yml b/.licenses/go/google.golang.org/protobuf/proto.dep.yml index a898c7fb7d6..44a8835d9a2 100644 --- a/.licenses/go/google.golang.org/protobuf/proto.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/proto.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/proto -version: v1.31.0 +version: v1.36.6 type: go summary: Package proto provides functions operating on protocol buffer messages. homepage: https://pkg.go.dev/google.golang.org/protobuf/proto license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/types/descriptorpb.dep.yml b/.licenses/go/google.golang.org/protobuf/protoadapt.dep.yml similarity index 91% rename from .licenses/go/google.golang.org/protobuf/types/descriptorpb.dep.yml rename to .licenses/go/google.golang.org/protobuf/protoadapt.dep.yml index f3ecffce178..4bfb7937200 100644 --- a/.licenses/go/google.golang.org/protobuf/types/descriptorpb.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/protoadapt.dep.yml @@ -1,12 +1,12 @@ --- -name: google.golang.org/protobuf/types/descriptorpb -version: v1.31.0 +name: google.golang.org/protobuf/protoadapt +version: v1.36.6 type: go -summary: -homepage: https://pkg.go.dev/google.golang.org/protobuf/types/descriptorpb +summary: Package protoadapt bridges the original and new proto APIs. +homepage: https://pkg.go.dev/google.golang.org/protobuf/protoadapt license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/reflect/protoreflect.dep.yml b/.licenses/go/google.golang.org/protobuf/reflect/protoreflect.dep.yml index 31c905bac2d..5343f737627 100644 --- a/.licenses/go/google.golang.org/protobuf/reflect/protoreflect.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/reflect/protoreflect.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/reflect/protoreflect -version: v1.31.0 +version: v1.36.6 type: go summary: Package protoreflect provides interfaces to dynamically manipulate messages. homepage: https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/reflect/protoregistry.dep.yml b/.licenses/go/google.golang.org/protobuf/reflect/protoregistry.dep.yml index 15277039f14..c16761390c3 100644 --- a/.licenses/go/google.golang.org/protobuf/reflect/protoregistry.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/reflect/protoregistry.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/reflect/protoregistry -version: v1.31.0 +version: v1.36.6 type: go summary: Package protoregistry provides data structures to register and lookup protobuf descriptor types. homepage: https://pkg.go.dev/google.golang.org/protobuf/reflect/protoregistry license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/runtime/protoiface.dep.yml b/.licenses/go/google.golang.org/protobuf/runtime/protoiface.dep.yml index 873b8907e04..0c4287a0af3 100644 --- a/.licenses/go/google.golang.org/protobuf/runtime/protoiface.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/runtime/protoiface.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/runtime/protoiface -version: v1.31.0 +version: v1.36.6 type: go summary: Package protoiface contains types referenced or implemented by messages. homepage: https://pkg.go.dev/google.golang.org/protobuf/runtime/protoiface license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/runtime/protoimpl.dep.yml b/.licenses/go/google.golang.org/protobuf/runtime/protoimpl.dep.yml index 3c2c47a3827..2ce73e33e61 100644 --- a/.licenses/go/google.golang.org/protobuf/runtime/protoimpl.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/runtime/protoimpl.dep.yml @@ -1,13 +1,13 @@ --- name: google.golang.org/protobuf/runtime/protoimpl -version: v1.31.0 +version: v1.36.6 type: go summary: Package protoimpl contains the default implementation for messages generated by protoc-gen-go. homepage: https://pkg.go.dev/google.golang.org/protobuf/runtime/protoimpl license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -36,7 +36,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/types/known/anypb.dep.yml b/.licenses/go/google.golang.org/protobuf/types/known/anypb.dep.yml index 643a25f2da8..008b5ea473a 100644 --- a/.licenses/go/google.golang.org/protobuf/types/known/anypb.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/types/known/anypb.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/types/known/anypb -version: v1.31.0 +version: v1.36.6 type: go summary: Package anypb contains generated types for google/protobuf/any.proto. homepage: https://pkg.go.dev/google.golang.org/protobuf/types/known/anypb license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/types/known/durationpb.dep.yml b/.licenses/go/google.golang.org/protobuf/types/known/durationpb.dep.yml index 062f8b2a28c..0b0a33c05c7 100644 --- a/.licenses/go/google.golang.org/protobuf/types/known/durationpb.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/types/known/durationpb.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/types/known/durationpb -version: v1.31.0 +version: v1.36.6 type: go summary: Package durationpb contains generated types for google/protobuf/duration.proto. homepage: https://pkg.go.dev/google.golang.org/protobuf/types/known/durationpb license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.licenses/go/google.golang.org/protobuf/types/known/timestamppb.dep.yml b/.licenses/go/google.golang.org/protobuf/types/known/timestamppb.dep.yml index 0c775ebba63..85c9973c3fc 100644 --- a/.licenses/go/google.golang.org/protobuf/types/known/timestamppb.dep.yml +++ b/.licenses/go/google.golang.org/protobuf/types/known/timestamppb.dep.yml @@ -1,12 +1,12 @@ --- name: google.golang.org/protobuf/types/known/timestamppb -version: v1.31.0 +version: v1.36.6 type: go summary: Package timestamppb contains generated types for google/protobuf/timestamp.proto. homepage: https://pkg.go.dev/google.golang.org/protobuf/types/known/timestamppb license: bsd-3-clause licenses: -- sources: protobuf@v1.31.0/LICENSE +- sources: protobuf@v1.36.6/LICENSE text: | Copyright (c) 2018 The Go Authors. All rights reserved. @@ -35,7 +35,7 @@ licenses: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- sources: protobuf@v1.31.0/PATENTS +- sources: protobuf@v1.36.6/PATENTS text: | Additional IP Rights Grant (Patents) diff --git a/.markdown-link-check.json b/.markdown-link-check.json index 281aa2d61e0..2d7d80a50c3 100644 --- a/.markdown-link-check.json +++ b/.markdown-link-check.json @@ -4,9 +4,6 @@ "timeout": "20s", "aliveStatusCodes": [200, 206], "ignorePatterns": [ - { - "pattern": "^#" - }, { "pattern": "https?://localhost:\\d*/" }, diff --git a/.prettierignore b/.prettierignore index 3b34afa1ed6..6aabe7366cb 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,6 +4,7 @@ .vs/ .ionide/ +testdata /arduino/libraries/librariesindex/testdata/invalid.json /arduino/security/testdata/ /.licenses/ diff --git a/DistTasks.yml b/DistTasks.yml index 2231c439dc7..eb0ce3dbd25 100644 --- a/DistTasks.yml +++ b/DistTasks.yml @@ -19,7 +19,7 @@ version: "3" vars: CONTAINER: "docker.elastic.co/beats-dev/golang-crossbuild" - GO_VERSION: "1.21.1" + GO_VERSION: "1.24.1" tasks: Windows_32bit: @@ -142,37 +142,9 @@ tasks: vars: PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_6" - BUILD_COMMAND: "go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}" + BUILD_COMMAND: "go build -buildvcs=false -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}" BUILD_PLATFORM: "linux/armv6" - # We are experiencing the following error with ARMv6 build: - # - # # github.com/arduino/arduino-cli - # net(.text): unexpected relocation type 296 (R_ARM_V4BX) - # panic: runtime error: invalid memory address or nil pointer dereference - # [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x51ae53] - # - # goroutine 1 [running]: - # cmd/link/internal/loader.(*Loader).SymName(0xc000095c00, 0x0, 0xc0000958d8, 0x5a0ac) - # /usr/local/go/src/cmd/link/internal/loader/loader.go:684 +0x53 - # cmd/link/internal/ld.dynrelocsym2(0xc000095880, 0x5a0ac) - # /usr/local/go/src/cmd/link/internal/ld/data.go:777 +0x295 - # cmd/link/internal/ld.(*dodataState).dynreloc2(0xc007df9800, 0xc000095880) - # /usr/local/go/src/cmd/link/internal/ld/data.go:794 +0x89 - # cmd/link/internal/ld.(*Link).dodata2(0xc000095880, 0xc007d00000, 0x60518, 0x60518) - # /usr/local/go/src/cmd/link/internal/ld/data.go:1434 +0x4d4 - # cmd/link/internal/ld.Main(0x8729a0, 0x4, 0x8, 0x1, 0xd, 0xe, 0x0, 0x0, 0x6d7737, 0x12, ...) - # /usr/local/go/src/cmd/link/internal/ld/main.go:302 +0x123a - # main.main() - # /usr/local/go/src/cmd/link/main.go:68 +0x1dc - # Error: failed building for linux/armv6: exit status 2 - # - # This seems to be a problem in the go builder 1.16.x that removed support for the R_ARM_V4BX instruction: - # https://github.com/golang/go/pull/44998 - # https://groups.google.com/g/golang-codereviews/c/yzN80xxwu2E - # - # Until there is a fix released we must use a recent gcc for Linux_ARMv6 build, so for this - # build we select the debian10 based container. - CONTAINER_TAG: "{{.GO_VERSION}}-armel-debian9" + CONTAINER_TAG: "{{.GO_VERSION}}-armel-debian12" PACKAGE_PLATFORM: "Linux_ARMv6" PACKAGE_NAME: "{{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz" @@ -191,9 +163,9 @@ tasks: vars: PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_64" - BUILD_COMMAND: "go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}" + BUILD_COMMAND: "go build -buildvcs=false -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}" BUILD_PLATFORM: "linux/arm64" - CONTAINER_TAG: "{{.GO_VERSION}}-arm" + CONTAINER_TAG: "{{.GO_VERSION}}-arm-debian12" PACKAGE_PLATFORM: "Linux_ARM64" PACKAGE_NAME: "{{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz" @@ -258,4 +230,4 @@ tasks: desc: Copy the JSON schema to dist folder cmds: - mkdir --parents {{.DIST_DIR}} - - cp ./configuration/configuration.schema.json {{.DIST_DIR}}/{{.PROJECT_NAME}}_{{.VERSION}}_configuration.schema.json + - cp ./internal/cli/configuration/configuration.schema.json {{.DIST_DIR}}/{{.PROJECT_NAME}}_{{.VERSION}}_configuration.schema.json diff --git a/README.md b/README.md index 39ecae5f037..277f36a3a37 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,6 @@ and many other tools needed to use any Arduino compatible board and platform fro [![Deploy Website status](https://github.com/arduino/arduino-cli/actions/workflows/deploy-cobra-mkdocs-versioned-poetry.yml/badge.svg)](https://github.com/arduino/arduino-cli/actions/workflows/deploy-cobra-mkdocs-versioned-poetry.yml) [![Codecov](https://codecov.io/gh/arduino/arduino-cli/branch/master/graph/badge.svg)](https://codecov.io/gh/arduino/arduino-cli) -> **Note:** this software is currently under active development: anything can change at any time, API and UI must be -> considered unstable until we release version 1.0.0. - ## Docs For guidance on installation and development, see the [User documentation]. @@ -33,9 +30,9 @@ contribute your changes to the project. :sparkles: Thanks to all our [contributors]! :sparkles: -### Beta testing +### Testing builds -[Nightly builds] are available for beta testing. +[Nightly builds] are available for testing. ## Security @@ -46,7 +43,7 @@ e-mail contact: security@arduino.cc ## License -Arduino CLI is licensed under the [GPL 3.0] license. +Arduino CLI is licensed under the GPL-3.0 license. You can be released from the requirements of the above license by purchasing a commercial license. Buying such a license is mandatory if you want to modify or otherwise use the software for commercial activities involving the Arduino @@ -62,4 +59,3 @@ license@arduino.cc [contributors]: https://github.com/arduino/arduino-cli/graphs/contributors [nightly builds]: https://arduino.github.io/arduino-cli/latest/installation/#nightly-builds [security policy]: https://github.com/arduino/arduino-cli/security/policy -[gpl 3.0]: https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/Taskfile.yml b/Taskfile.yml index e19fd011777..08cd153a3be 100755 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -48,17 +48,17 @@ tasks: desc: Build the Go code dir: '{{default "./" .GO_MODULE_PATH}}' cmds: - - go build -v {{default "" .EXTRA_FLAGS}} {{.LDFLAGS}} + - go build {{default "" .EXTRA_FLAGS}} {{.LDFLAGS}} # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/deploy-cobra-mkdocs-versioned-poetry/Taskfile.yml go:cli-docs: desc: Generate command line interface reference documentation - dir: ./docsgen + dir: ./internal/docsgen cmds: # Command examples use os.Args[0] so the docs generation binary must have the same filename as the project - go build -o {{.PROJECT_NAME}}{{exeExt}} # The binary is invoked like this instead of `./{{.PROJECT_NAME}}` to remove the `./` chars from the examples - - PATH=. {{.PROJECT_NAME}} ../docs/commands + - PATH=. {{.PROJECT_NAME}} ../../docs/commands # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-go-task/Taskfile.yml go:fix: @@ -95,7 +95,7 @@ tasks: dir: '{{default "./" .GO_MODULE_PATH}}' cmds: - | - go test \ + LANG=en go test \ -v \ -short \ -run '{{default ".*" .GO_TEST_REGEX}}' \ @@ -115,7 +115,7 @@ tasks: - | rm -fr coverage_data mkdir coverage_data - INTEGRATION_GOCOVERDIR={{ .ROOT_DIR }}/coverage_data go test \ + LANG=en INTEGRATION_GOCOVERDIR={{ .ROOT_DIR }}/coverage_data go test \ -v \ -short \ {{ .GO_TEST_PACKAGE }} \ @@ -130,14 +130,14 @@ tasks: desc: Run easyjson code generation cmds: - go install github.com/mailru/easyjson/...@v0.7.7 - - easyjson arduino/cores/packageindex/index.go - - easyjson arduino/libraries/librariesindex/json.go + - easyjson internal/arduino/cores/packageindex/index.go + - easyjson internal/arduino/libraries/librariesindex/json.go go:add-license-headers: desc: Add missing go license headers cmds: - go install github.com/google/addlicense@v1.1.1 - - addlicense -c "ARDUINO SA (http://www.arduino.cc/)" -f ./license_header.tpl **/*.go + - addlicense -c "ARDUINO SA (http://www.arduino.cc/)" -f ./license_header.tpl $(find . -name "*.go" -type f -print0 | xargs -0) # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-markdown-task/Taskfile.yml markdown:check-links: @@ -228,44 +228,49 @@ tasks: protoc: desc: Lint, format and compile protobuf definitions - deps: - - protoc:check - - protoc:format - - protoc:compile + cmds: + - task: protoc:format + - task: protoc:check + - task: protoc:compile + - task: protoc:breaking-change-detection protoc:compile: desc: Compile protobuf definitions cmds: - - '{{ default "protoc" .PROTOC_BINARY }} --proto_path=rpc --go_out=./rpc --go_opt=paths=source_relative --go-grpc_out=./rpc --go-grpc_opt=paths=source_relative ./rpc/cc/arduino/cli/commands/v1/*.proto' - - '{{ default "protoc" .PROTOC_BINARY }} --proto_path=rpc --go_out=./rpc --go_opt=paths=source_relative --go-grpc_out=./rpc --go-grpc_opt=paths=source_relative ./rpc/cc/arduino/cli/settings/v1/*.proto' + - buf dep update + - buf generate protoc:docs: desc: Generate docs for protobuf definitions cmds: - - '{{ default "protoc" .PROTOC_BINARY }} --doc_out=./docs/rpc --doc_opt=markdown,commands.md --proto_path=rpc ./rpc/cc/arduino/cli/commands/v1/*.proto' - - '{{ default "protoc" .PROTOC_BINARY }} --doc_out=./docs/rpc --doc_opt=markdown,settings.md --proto_path=rpc ./rpc/cc/arduino/cli/settings/v1/*.proto' + - buf generate --template buf.doc.gen.yaml docs:include-configuration-json-schema: desc: Copy configuration JSON schema to make it available in documentation cmds: - - cp ./configuration/configuration.schema.json ./docs/configuration.schema.json + - cp ./internal/cli/configuration/configuration.schema.json ./docs/configuration.schema.json protoc:check: desc: Perform linting of the protobuf definitions cmds: - - buf lint rpc + - buf lint protoc:collect: desc: Create a zip file containing all .proto files in DIST_DIR - dir: rpc cmds: - - mkdir --parents ../{{.DIST_DIR}} - - zip -r ../{{.DIST_DIR}}/{{.PROJECT_NAME}}_{{.VERSION}}_proto.zip * -i \*.proto + - mkdir --parents {{.DIST_DIR}} + - buf export . -o {{.DIST_DIR}}/proto + - cd {{.DIST_DIR}}/proto && zip -r ../{{.PROJECT_NAME}}_{{.VERSION}}_proto.zip . protoc:format: desc: Perform formatting of the protobuf definitions cmds: - - clang-format -i rpc/cc/arduino/cli/*/*/*.proto + - buf format --write + + protoc:breaking-change-detection: + desc: Detect protobuf breaking changes + cmds: + - buf breaking --against '.git#branch=origin/master,subdir=rpc' build: desc: Build the project @@ -303,24 +308,24 @@ tasks: i18n:update: desc: Updates i18n files cmds: - - go run ./i18n/cmd/main.go catalog generate . > ./i18n/data/en.po + - go run ./internal/locales/cmd/main.go catalog generate . > ./internal/locales/data/en.po i18n:pull: desc: Pull i18n files from transifex cmds: - - go run ./i18n/cmd/main.go transifex pull ./i18n/data + - go run ./internal/locales/cmd/main.go transifex pull ./internal/locales/data i18n:push: desc: Push i18n files to transifex cmds: - - go run ./i18n/cmd/main.go transifex push ./i18n/data + - go run ./internal/locales/cmd/main.go transifex push ./internal/locales/data i18n:check: desc: Check if the i18n message catalog was updated cmds: - task: i18n:pull - - git add -N ./i18n/data - - git diff --exit-code ./i18n/data + - git add -N ./internal/locales/data + - git diff --exit-code ./internal/locales/data # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-mkdocs-task/Taskfile.yml website:check: @@ -365,7 +370,7 @@ vars: TAG: sh: echo "$(git tag --points-at=HEAD 2> /dev/null | head -n1 | sed 's/^v//')" VERSION: "{{if .NIGHTLY}}nightly-{{.TIMESTAMP_SHORT}}{{else if .TAG}}{{.TAG}}{{else}}{{.PACKAGE_NAME_PREFIX}}git-snapshot{{end}}" - CONFIGURATION_PACKAGE: "github.com/arduino/arduino-cli/version" + CONFIGURATION_PACKAGE: "github.com/arduino/arduino-cli/internal/version" LDFLAGS: >- -ldflags ' diff --git a/arduino/builder/export_cmake.go b/arduino/builder/export_cmake.go deleted file mode 100644 index e65776b4e0b..00000000000 --- a/arduino/builder/export_cmake.go +++ /dev/null @@ -1,395 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package builder - -import ( - "fmt" - "io" - "os" - "path/filepath" - "regexp" - "slices" - "strings" - - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/go-paths-helper" - properties "github.com/arduino/go-properties-orderedmap" -) - -var lineMatcher = regexp.MustCompile(`^#line\s\d+\s"`) - -// exportProjectCMake fixdoc -func (b *Builder) exportProjectCMake(importedLibraries libraries.List, includeFolders paths.PathList) error { - // copies the contents of the file named src to the file named - // by dst. The file will be created if it does not already exist. If the - // destination file exists, all it's contents will be replaced by the contents - // of the source file. The file mode will be copied from the source and - // the copied data is synced/flushed to stable storage. - // TODO: Replace with call to go-paths-helper... - copyFile := func(src, dst string) (err error) { - in, err := os.Open(src) - if err != nil { - return - } - defer in.Close() - - out, err := os.Create(dst) - if err != nil { - return - } - defer func() { - if e := out.Close(); e != nil { - err = e - } - }() - - _, err = io.Copy(out, in) - if err != nil { - return - } - - err = out.Sync() - if err != nil { - return - } - - si, err := os.Stat(src) - if err != nil { - return - } - err = os.Chmod(dst, si.Mode()) - if err != nil { - return - } - - return - } - - // recursively copies a directory tree, attempting to preserve permissions. - // Source directory must exist, destination directory must *not* exist. - // Symlinks are ignored and skipped. - // TODO: Replace with call to go-paths-helper... - var copyDir func(src string, dst string, extensions []string) (err error) - copyDir = func(src string, dst string, extensions []string) (err error) { - isAcceptedExtension := func(ext string) bool { - ext = strings.ToLower(ext) - for _, valid := range extensions { - if ext == valid { - return true - } - } - return false - } - - src = filepath.Clean(src) - dst = filepath.Clean(dst) - - si, err := os.Stat(src) - if err != nil { - return err - } - if !si.IsDir() { - return fmt.Errorf(tr("source is not a directory")) - } - - _, err = os.Stat(dst) - if err != nil && !os.IsNotExist(err) { - return - } - if err == nil { - return fmt.Errorf(tr("destination already exists")) - } - - err = os.MkdirAll(dst, si.Mode()) - if err != nil { - return - } - - entries, err := os.ReadDir(src) - if err != nil { - return - } - - for _, dirEntry := range entries { - entry, scopeErr := dirEntry.Info() - if scopeErr != nil { - return - } - - srcPath := filepath.Join(src, entry.Name()) - dstPath := filepath.Join(dst, entry.Name()) - - if entry.IsDir() { - err = copyDir(srcPath, dstPath, extensions) - if err != nil { - return - } - } else { - // Skip symlinks. - if entry.Mode()&os.ModeSymlink != 0 { - continue - } - - if !isAcceptedExtension(filepath.Ext(srcPath)) { - continue - } - - err = copyFile(srcPath, dstPath) - if err != nil { - return - } - } - } - - return - } - - var validExportExtensions = []string{".a", ".properties"} - for ext := range globals.SourceFilesValidExtensions { - validExportExtensions = append(validExportExtensions, ext) - } - var validHeaderExtensions = []string{} - for ext := range globals.HeaderFilesValidExtensions { - validExportExtensions = append(validExportExtensions, ext) - validHeaderExtensions = append(validHeaderExtensions, ext) - } - var validStaticLibExtensions = []string{".a"} - - // If cannot export Cmake project - if b.buildProperties.Get("compiler.export_cmake") == "" { - return nil - } - - // Create new cmake subFolder - clean if the folder is already there - cmakeFolder := b.buildPath.Join("_cmake") - if _, err := cmakeFolder.Stat(); err == nil { - cmakeFolder.RemoveAll() - } - cmakeFolder.MkdirAll() - - // Create lib and build subfolders - libBaseFolder := cmakeFolder.Join("lib") - libBaseFolder.MkdirAll() - buildBaseFolder := cmakeFolder.Join("build") - buildBaseFolder.MkdirAll() - - // Create core subfolder path (don't create it yet) - coreFolder := cmakeFolder.Join("core") - cmakeFile := cmakeFolder.Join("CMakeLists.txt") - - dynamicLibsFromPkgConfig := map[string]bool{} - for _, library := range importedLibraries { - // Copy used libraries in the correct folder - libDir := libBaseFolder.Join(library.DirName) - mcu := b.buildProperties.Get("build.mcu") - copyDir(library.InstallDir.String(), libDir.String(), validExportExtensions) - - // Read cmake options if available - isStaticLib := true - if cmakeOptions, err := properties.LoadFromPath(libDir.Join("src", mcu, "arduino_builder.properties")); err == nil { - // If the library can be linked dynamically do not copy the library folder - if pkgs, ok := cmakeOptions.GetOk("cmake.pkg_config"); ok { - isStaticLib = false - for _, pkg := range strings.Split(pkgs, " ") { - dynamicLibsFromPkgConfig[pkg] = true - } - } - } - - // Remove examples folder - if _, err := libBaseFolder.Join("examples").Stat(); err == nil { - libDir.Join("examples").RemoveAll() - } - - // Remove stray folders contining incompatible or not needed libraries archives - files, _ := utils.FindFilesInFolder(libDir.Join("src"), true, validStaticLibExtensions...) - for _, file := range files { - staticLibDir := file.Parent() - if !isStaticLib || !strings.Contains(staticLibDir.String(), mcu) { - staticLibDir.RemoveAll() - } - } - } - - // Copy core + variant in use + preprocessed sketch in the correct folders - err := copyDir(b.buildProperties.Get("build.core.path"), coreFolder.String(), validExportExtensions) - if err != nil { - fmt.Println(err) - } - err = copyDir(b.buildProperties.Get("build.variant.path"), coreFolder.Join("variant").String(), validExportExtensions) - if err != nil { - fmt.Println(err) - } - - if err := b.preprocessSketch(includeFolders); err != nil { - return err - } - - err = copyDir(b.sketchBuildPath.String(), cmakeFolder.Join("sketch").String(), validExportExtensions) - if err != nil { - fmt.Println(err) - } - - // remove "#line 1 ..." from exported c_make folder sketch - sketchFiles, _ := utils.FindFilesInFolder(cmakeFolder.Join("sketch"), false, validExportExtensions...) - - for _, file := range sketchFiles { - input, err := file.ReadFile() - if err != nil { - fmt.Println(err) - continue - } - - lines := strings.Split(string(input), "\n") - - for i, line := range lines { - if lineMatcher.MatchString(line) { - lines[i] = "" - } - } - output := strings.Join(lines, "\n") - err = file.WriteFile([]byte(output)) - if err != nil { - fmt.Println(err) - } - } - - // Extract CFLAGS, CPPFLAGS and LDFLAGS - var defines []string - var linkerflags []string - var dynamicLibsFromGccMinusL []string - var linkDirectories []string - - b.extractCompileFlags(b.buildProperties, "recipe.c.combine.pattern", &defines, &dynamicLibsFromGccMinusL, &linkerflags, &linkDirectories) - b.extractCompileFlags(b.buildProperties, "recipe.c.o.pattern", &defines, &dynamicLibsFromGccMinusL, &linkerflags, &linkDirectories) - b.extractCompileFlags(b.buildProperties, "recipe.cpp.o.pattern", &defines, &dynamicLibsFromGccMinusL, &linkerflags, &linkDirectories) - - // Extract folders with .h in them for adding in include list - headerFiles, _ := utils.FindFilesInFolder(cmakeFolder, true, validHeaderExtensions...) - foldersContainingHeaders := findUniqueFoldersRelative(headerFiles.AsStrings(), cmakeFolder.String()) - - // Extract folders with .a in them for adding in static libs paths list - staticLibs, _ := utils.FindFilesInFolder(cmakeFolder, true, validStaticLibExtensions...) - - // Generate the CMakeLists global file - - projectName := b.sketch.Name - - cmakelist := "cmake_minimum_required(VERSION 3.5.0)\n" - cmakelist += "INCLUDE(FindPkgConfig)\n" - cmakelist += "project (" + projectName + " C CXX)\n" - cmakelist += "add_definitions (" + strings.Join(defines, " ") + " " + strings.Join(linkerflags, " ") + ")\n" - cmakelist += "include_directories (" + foldersContainingHeaders + ")\n" - - // Make link directories relative - // We can totally discard them since they mostly are outside the core folder - // If they are inside the core they are not getting copied :) - var relLinkDirectories []string - for _, dir := range linkDirectories { - if strings.Contains(dir, cmakeFolder.String()) { - relLinkDirectories = append(relLinkDirectories, strings.TrimPrefix(dir, cmakeFolder.String())) - } - } - - // Add SO_PATHS option for libraries not getting found by pkg_config - cmakelist += "set(EXTRA_LIBS_DIRS \"\" CACHE STRING \"Additional paths for dynamic libraries\")\n" - - linkGroup := "" - for _, lib := range dynamicLibsFromGccMinusL { - // Dynamic libraries should be discovered by pkg_config - cmakelist += "pkg_search_module (" + strings.ToUpper(lib) + " " + lib + ")\n" - relLinkDirectories = append(relLinkDirectories, "${"+strings.ToUpper(lib)+"_LIBRARY_DIRS}") - linkGroup += " " + lib - } - for lib := range dynamicLibsFromPkgConfig { - cmakelist += "pkg_search_module (" + strings.ToUpper(lib) + " " + lib + ")\n" - relLinkDirectories = append(relLinkDirectories, "${"+strings.ToUpper(lib)+"_LIBRARY_DIRS}") - linkGroup += " ${" + strings.ToUpper(lib) + "_LIBRARIES}" - } - cmakelist += "link_directories (" + strings.Join(relLinkDirectories, " ") + " ${EXTRA_LIBS_DIRS})\n" - for _, staticLib := range staticLibs { - // Static libraries are fully configured - lib := staticLib.Base() - lib = strings.TrimPrefix(lib, "lib") - lib = strings.TrimSuffix(lib, ".a") - if !slices.Contains(dynamicLibsFromGccMinusL, lib) { - linkGroup += " " + lib - cmakelist += "add_library (" + lib + " STATIC IMPORTED)\n" - location := strings.TrimPrefix(staticLib.String(), cmakeFolder.String()) - cmakelist += "set_property(TARGET " + lib + " PROPERTY IMPORTED_LOCATION " + "${PROJECT_SOURCE_DIR}" + location + " )\n" - } - } - - // Include source files - // TODO: remove .cpp and .h from libraries example folders - cmakelist += "file (GLOB_RECURSE SOURCES core/*.c* lib/*.c* sketch/*.c*)\n" - - // Compile and link project - cmakelist += "add_executable (" + projectName + " ${SOURCES} ${SOURCES_LIBS})\n" - cmakelist += "target_link_libraries( " + projectName + " -Wl,--as-needed -Wl,--start-group " + linkGroup + " -Wl,--end-group)\n" - - cmakeFile.WriteFile([]byte(cmakelist)) - - return nil -} - -func (b *Builder) extractCompileFlags(buildProperties *properties.Map, recipe string, defines, dynamicLibs, linkerflags, linkDirectories *[]string) { - appendIfNotPresent := func(target []string, elements ...string) []string { - for _, element := range elements { - if !slices.Contains(target, element) { - target = append(target, element) - } - } - return target - } - - command, _ := b.prepareCommandForRecipe(buildProperties, recipe, true) - - for _, arg := range command.GetArgs() { - if strings.HasPrefix(arg, "-D") { - *defines = appendIfNotPresent(*defines, arg) - continue - } - if strings.HasPrefix(arg, "-l") { - *dynamicLibs = appendIfNotPresent(*dynamicLibs, arg[2:]) - continue - } - if strings.HasPrefix(arg, "-L") { - *linkDirectories = appendIfNotPresent(*linkDirectories, arg[2:]) - continue - } - if strings.HasPrefix(arg, "-") && !strings.HasPrefix(arg, "-I") && !strings.HasPrefix(arg, "-o") { - // HACK : from linkerflags remove MMD (no cache is produced) - if !strings.HasPrefix(arg, "-MMD") { - *linkerflags = appendIfNotPresent(*linkerflags, arg) - } - } - } -} - -func findUniqueFoldersRelative(slice []string, base string) string { - var out []string - for _, element := range slice { - path := filepath.Dir(element) - path = strings.TrimPrefix(path, base+"/") - if !slices.Contains(out, path) { - out = append(out, path) - } - } - return strings.Join(out, " ") -} diff --git a/arduino/cores/fqbn_test.go b/arduino/cores/fqbn_test.go deleted file mode 100644 index 5c4cd9836f8..00000000000 --- a/arduino/cores/fqbn_test.go +++ /dev/null @@ -1,157 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package cores - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestFQBN(t *testing.T) { - a, err := ParseFQBN("arduino:avr:uno") - require.Equal(t, "arduino:avr:uno", a.String()) - require.NoError(t, err) - require.Equal(t, a.Package, "arduino") - require.Equal(t, a.PlatformArch, "avr") - require.Equal(t, a.BoardID, "uno") - require.Zero(t, a.Configs.Size()) - - // Allow empty plaforms or packages - b1, err := ParseFQBN("arduino::uno") - require.Equal(t, "arduino::uno", b1.String()) - require.NoError(t, err) - require.Equal(t, b1.Package, "arduino") - require.Equal(t, b1.PlatformArch, "") - require.Equal(t, b1.BoardID, "uno") - require.Zero(t, b1.Configs.Size()) - - b2, err := ParseFQBN(":avr:uno") - require.Equal(t, ":avr:uno", b2.String()) - require.NoError(t, err) - require.Equal(t, b2.Package, "") - require.Equal(t, b2.PlatformArch, "avr") - require.Equal(t, b2.BoardID, "uno") - require.Zero(t, b2.Configs.Size()) - - b3, err := ParseFQBN("::uno") - require.Equal(t, "::uno", b3.String()) - require.NoError(t, err) - require.Equal(t, b3.Package, "") - require.Equal(t, b3.PlatformArch, "") - require.Equal(t, b3.BoardID, "uno") - require.Zero(t, b3.Configs.Size()) - - // Do not allow missing board identifier - _, err = ParseFQBN("arduino:avr:") - require.Error(t, err) - - // Do not allow partial fqbn - _, err = ParseFQBN("arduino") - require.Error(t, err) - _, err = ParseFQBN("arduino:avr") - require.Error(t, err) - - // Sort keys in fbqn config - s, err := ParseFQBN("arduino:avr:uno:d=x,b=x,a=x,e=x,c=x") - require.NoError(t, err) - require.Equal(t, "arduino:avr:uno:d=x,b=x,a=x,e=x,c=x", s.String()) - - // Test configs - c, err := ParseFQBN("arduino:avr:uno:cpu=atmega") - require.Equal(t, "arduino:avr:uno:cpu=atmega", c.String()) - require.NoError(t, err) - require.Equal(t, c.Package, "arduino") - require.Equal(t, c.PlatformArch, "avr") - require.Equal(t, c.BoardID, "uno") - require.Equal(t, "properties.Map{\n \"cpu\": \"atmega\",\n}", c.Configs.Dump()) - - d, err := ParseFQBN("arduino:avr:uno:cpu=atmega,speed=1000") - require.Equal(t, "arduino:avr:uno:cpu=atmega,speed=1000", d.String()) - require.NoError(t, err) - require.Equal(t, d.Package, "arduino") - require.Equal(t, d.PlatformArch, "avr") - require.Equal(t, d.BoardID, "uno") - require.Equal(t, "properties.Map{\n \"cpu\": \"atmega\",\n \"speed\": \"1000\",\n}", d.Configs.Dump()) - - // Do not allow empty keys or missing values in config - _, err = ParseFQBN("arduino:avr:uno:") - require.Error(t, err) - _, err = ParseFQBN("arduino:avr:uno:cpu") - require.Error(t, err) - _, err = ParseFQBN("arduino:avr:uno:=atmega") - require.Error(t, err) - _, err = ParseFQBN("arduino:avr:uno:cpu=atmega,") - require.Error(t, err) - _, err = ParseFQBN("arduino:avr:uno:cpu=atmega,speed") - require.Error(t, err) - _, err = ParseFQBN("arduino:avr:uno:cpu=atmega,=1000") - require.Error(t, err) - - // Allow keys with empty values - e, err := ParseFQBN("arduino:avr:uno:cpu=") - require.Equal(t, "arduino:avr:uno:cpu=", e.String()) - require.NoError(t, err) - require.Equal(t, e.Package, "arduino") - require.Equal(t, e.PlatformArch, "avr") - require.Equal(t, e.BoardID, "uno") - require.Equal(t, "properties.Map{\n \"cpu\": \"\",\n}", e.Configs.Dump()) - - // Allow "=" in config values - f, err := ParseFQBN("arduino:avr:uno:cpu=atmega,speed=1000,extra=core=arduino") - require.Equal(t, "arduino:avr:uno:cpu=atmega,speed=1000,extra=core=arduino", f.String()) - require.NoError(t, err) - require.Equal(t, f.Package, "arduino") - require.Equal(t, f.PlatformArch, "avr") - require.Equal(t, f.BoardID, "uno") - require.Equal(t, - "properties.Map{\n \"cpu\": \"atmega\",\n \"speed\": \"1000\",\n \"extra\": \"core=arduino\",\n}", - f.Configs.Dump()) -} - -func TestMatch(t *testing.T) { - expectedMatches := [][]string{ - {"arduino:avr:uno", "arduino:avr:uno"}, - {"arduino:avr:uno", "arduino:avr:uno:opt1=1,opt2=2"}, - {"arduino:avr:uno:opt1=1", "arduino:avr:uno:opt1=1,opt2=2"}, - {"arduino:avr:uno:opt1=1,opt2=2", "arduino:avr:uno:opt1=1,opt2=2"}, - {"arduino:avr:uno:opt3=3,opt1=1,opt2=2", "arduino:avr:uno:opt2=2,opt3=3,opt1=1,opt4=4"}, - } - - for _, pair := range expectedMatches { - a, err := ParseFQBN(pair[0]) - require.NoError(t, err) - b, err := ParseFQBN(pair[1]) - require.NoError(t, err) - require.True(t, b.Match(a)) - } - - expectedMismatches := [][]string{ - {"arduino:avr:uno", "arduino:avr:due"}, - {"arduino:avr:uno", "arduino:avr:due:opt1=1,opt2=2"}, - {"arduino:avr:uno:opt1=1", "arduino:avr:uno"}, - {"arduino:avr:uno:opt1=1,opt2=", "arduino:avr:uno:opt1=1,opt2=3"}, - {"arduino:avr:uno:opt1=1,opt2=2", "arduino:avr:uno:opt2=2"}, - } - - for _, pair := range expectedMismatches { - a, err := ParseFQBN(pair[0]) - require.NoError(t, err) - b, err := ParseFQBN(pair[1]) - require.NoError(t, err) - require.False(t, b.Match(a)) - } -} diff --git a/arduino/discovery/discovery.go b/arduino/discovery/discovery.go deleted file mode 100644 index 2e9946d675c..00000000000 --- a/arduino/discovery/discovery.go +++ /dev/null @@ -1,472 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package discovery - -import ( - "encoding/json" - "fmt" - "io" - "strings" - "sync" - "time" - - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/version" - "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" -) - -// To work correctly a Pluggable Discovery must respect the state machine specified on the documentation: -// https://arduino.github.io/arduino-cli/latest/pluggable-discovery-specification/#state-machine -// States a PluggableDiscovery can be in -const ( - Alive int = iota - Idling - Running - Syncing - Dead -) - -// PluggableDiscovery is a tool that detects communication ports to interact -// with the boards. -type PluggableDiscovery struct { - id string - processArgs []string - process *executils.Process - outgoingCommandsPipe io.Writer - incomingMessagesChan <-chan *discoveryMessage - - // All the following fields are guarded by statusMutex - statusMutex sync.Mutex - incomingMessagesError error - state int - eventChan chan<- *Event -} - -type discoveryMessage struct { - EventType string `json:"eventType"` - Message string `json:"message"` - Error bool `json:"error"` - ProtocolVersion int `json:"protocolVersion"` // Used in HELLO command - Ports []*Port `json:"ports"` // Used in LIST command - Port *Port `json:"port"` // Used in add and remove events -} - -func (msg discoveryMessage) String() string { - s := fmt.Sprintf("type: %s", msg.EventType) - if msg.Message != "" { - s = tr("%[1]s, message: %[2]s", s, msg.Message) - } - if msg.ProtocolVersion != 0 { - s = tr("%[1]s, protocol version: %[2]d", s, msg.ProtocolVersion) - } - if len(msg.Ports) > 0 { - s = tr("%[1]s, ports: %[2]s", s, msg.Ports) - } - if msg.Port != nil { - s = tr("%[1]s, port: %[2]s", s, msg.Port) - } - return s -} - -// Port contains metadata about a port to connect to a board. -type Port struct { - Address string `json:"address"` - AddressLabel string `json:"label"` - Protocol string `json:"protocol"` - ProtocolLabel string `json:"protocolLabel"` - HardwareID string `json:"hardwareId,omitempty"` - Properties *properties.Map `json:"properties"` -} - -var tr = i18n.Tr - -// Equals returns true if the given port has the same address and protocol -// of the current port. -func (p *Port) Equals(o *Port) bool { - return p.Address == o.Address && p.Protocol == o.Protocol -} - -// ToRPC converts Port into rpc.Port -func (p *Port) ToRPC() *rpc.Port { - props := p.Properties - if props == nil { - props = properties.NewMap() - } - return &rpc.Port{ - Address: p.Address, - Label: p.AddressLabel, - Protocol: p.Protocol, - ProtocolLabel: p.ProtocolLabel, - HardwareId: p.HardwareID, - Properties: props.AsMap(), - } -} - -// PortFromRPCPort converts an *rpc.Port to a *Port -func PortFromRPCPort(o *rpc.Port) (p *Port) { - if o == nil { - return nil - } - res := &Port{ - Address: o.Address, - AddressLabel: o.Label, - Protocol: o.Protocol, - ProtocolLabel: o.ProtocolLabel, - HardwareID: o.HardwareId, - } - if o.Properties != nil { - res.Properties = properties.NewFromHashmap(o.Properties) - } - return res -} - -func (p *Port) String() string { - if p == nil { - return "none" - } - return p.Address -} - -// Clone creates a copy of this Port -func (p *Port) Clone() *Port { - if p == nil { - return nil - } - res := *p - if p.Properties != nil { - res.Properties = p.Properties.Clone() - } - return &res -} - -// Event is a pluggable discovery event -type Event struct { - Type string - Port *Port - DiscoveryID string -} - -// New create and connect to the given pluggable discovery -func New(id string, args ...string) *PluggableDiscovery { - return &PluggableDiscovery{ - id: id, - processArgs: args, - state: Dead, - } -} - -// GetID returns the identifier for this discovery -func (disc *PluggableDiscovery) GetID() string { - return disc.id -} - -func (disc *PluggableDiscovery) String() string { - return disc.id -} - -func (disc *PluggableDiscovery) jsonDecodeLoop(in io.Reader, outChan chan<- *discoveryMessage) { - decoder := json.NewDecoder(in) - closeAndReportError := func(err error) { - disc.statusMutex.Lock() - disc.state = Dead - disc.incomingMessagesError = err - disc.statusMutex.Unlock() - close(outChan) - logrus.Errorf("stopped discovery %s decode loop: %v", disc.id, err) - } - - for { - var msg discoveryMessage - if err := decoder.Decode(&msg); errors.Is(err, io.EOF) { - // This is fine, we exit gracefully - disc.statusMutex.Lock() - disc.state = Dead - disc.incomingMessagesError = err - disc.statusMutex.Unlock() - close(outChan) - return - } else if err != nil { - closeAndReportError(err) - return - } - logrus.Infof("from discovery %s received message %s", disc.id, msg) - if msg.EventType == "add" { - if msg.Port == nil { - closeAndReportError(errors.New(tr("invalid 'add' message: missing port"))) - return - } - disc.statusMutex.Lock() - if disc.eventChan != nil { - disc.eventChan <- &Event{"add", msg.Port, disc.GetID()} - } - disc.statusMutex.Unlock() - } else if msg.EventType == "remove" { - if msg.Port == nil { - closeAndReportError(errors.New(tr("invalid 'remove' message: missing port"))) - return - } - disc.statusMutex.Lock() - if disc.eventChan != nil { - disc.eventChan <- &Event{"remove", msg.Port, disc.GetID()} - } - disc.statusMutex.Unlock() - } else { - outChan <- &msg - } - } -} - -// State returns the current state of this PluggableDiscovery -func (disc *PluggableDiscovery) State() int { - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - return disc.state -} - -func (disc *PluggableDiscovery) waitMessage(timeout time.Duration) (*discoveryMessage, error) { - select { - case msg := <-disc.incomingMessagesChan: - if msg == nil { - return nil, disc.incomingMessagesError - } - return msg, nil - case <-time.After(timeout): - return nil, fmt.Errorf(tr("timeout waiting for message from %s"), disc.id) - } -} - -func (disc *PluggableDiscovery) sendCommand(command string) error { - logrus.Infof("sending command %s to discovery %s", strings.TrimSpace(command), disc) - data := []byte(command) - for { - n, err := disc.outgoingCommandsPipe.Write(data) - if err != nil { - return err - } - if n == len(data) { - return nil - } - data = data[n:] - } -} - -func (disc *PluggableDiscovery) runProcess() error { - logrus.Infof("starting discovery %s process", disc.id) - proc, err := executils.NewProcess(nil, disc.processArgs...) - if err != nil { - return err - } - stdout, err := proc.StdoutPipe() - if err != nil { - return err - } - stdin, err := proc.StdinPipe() - if err != nil { - return err - } - disc.outgoingCommandsPipe = stdin - - messageChan := make(chan *discoveryMessage) - disc.incomingMessagesChan = messageChan - go disc.jsonDecodeLoop(stdout, messageChan) - - if err := proc.Start(); err != nil { - return err - } - - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.process = proc - disc.state = Alive - logrus.Infof("started discovery %s process", disc.id) - return nil -} - -func (disc *PluggableDiscovery) killProcess() error { - logrus.Infof("killing discovery %s process", disc.id) - if disc.process != nil { - if err := disc.process.Kill(); err != nil { - return err - } - if err := disc.process.Wait(); err != nil { - return err - } - } - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.stopSync() - disc.state = Dead - logrus.Infof("killed discovery %s process", disc.id) - return nil -} - -// Run starts the discovery executable process and sends the HELLO command to the discovery to agree on the -// pluggable discovery protocol. This must be the first command to run in the communication with the discovery. -// If the process is started but the HELLO command fails the process is killed. -func (disc *PluggableDiscovery) Run() (err error) { - if err = disc.runProcess(); err != nil { - return err - } - - defer func() { - // If the discovery process is started successfully but the HELLO handshake - // fails the discovery is an unusable state, we kill the process to avoid - // further issues down the line. - if err == nil { - return - } - if err := disc.killProcess(); err != nil { - // Log failure to kill the process, ideally that should never happen - // but it's best to know it if it does - logrus.Errorf("Killing discovery %s after unsuccessful start: %s", disc.id, err) - } - }() - - if err = disc.sendCommand("HELLO 1 \"arduino-cli " + version.VersionInfo.VersionString + "\"\n"); err != nil { - return err - } - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return fmt.Errorf(tr("calling %[1]s: %[2]w"), "HELLO", err) - } else if msg.EventType != "hello" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "hello", msg.EventType) - } else if msg.Error { - return errors.Errorf(tr("command failed: %s"), msg.Message) - } else if strings.ToUpper(msg.Message) != "OK" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) - } else if msg.ProtocolVersion > 1 { - return errors.Errorf(tr("protocol version not supported: requested 1, got %d"), msg.ProtocolVersion) - } - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.state = Idling - return nil -} - -// Start initializes and start the discovery internal subroutines. This command must be -// called before List or StartSync. -func (disc *PluggableDiscovery) Start() error { - if err := disc.sendCommand("START\n"); err != nil { - return err - } - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return fmt.Errorf(tr("calling %[1]s: %[2]w"), "START", err) - } else if msg.EventType != "start" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "start", msg.EventType) - } else if msg.Error { - return errors.Errorf(tr("command failed: %s"), msg.Message) - } else if strings.ToUpper(msg.Message) != "OK" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) - } - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.state = Running - return nil -} - -// Stop stops the discovery internal subroutines and possibly free the internally -// used resources. This command should be called if the client wants to pause the -// discovery for a while. -func (disc *PluggableDiscovery) Stop() error { - if err := disc.sendCommand("STOP\n"); err != nil { - return err - } - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return fmt.Errorf(tr("calling %[1]s: %[2]w"), "STOP", err) - } else if msg.EventType != "stop" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "stop", msg.EventType) - } else if msg.Error { - return errors.Errorf(tr("command failed: %s"), msg.Message) - } else if strings.ToUpper(msg.Message) != "OK" { - return errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) - } - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - disc.stopSync() - disc.state = Idling - return nil -} - -func (disc *PluggableDiscovery) stopSync() { - if disc.eventChan != nil { - disc.eventChan <- &Event{"stop", nil, disc.GetID()} - close(disc.eventChan) - disc.eventChan = nil - } -} - -// Quit terminates the discovery. No more commands can be accepted by the discovery. -func (disc *PluggableDiscovery) Quit() { - _ = disc.sendCommand("QUIT\n") - if _, err := disc.waitMessage(time.Second * 5); err != nil { - logrus.Errorf("Quitting discovery %s: %s", disc.id, err) - } - disc.stopSync() - disc.killProcess() -} - -// List executes an enumeration of the ports and returns a list of the available -// ports at the moment of the call. -func (disc *PluggableDiscovery) List() ([]*Port, error) { - if err := disc.sendCommand("LIST\n"); err != nil { - return nil, err - } - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return nil, fmt.Errorf(tr("calling %[1]s: %[2]w"), "LIST", err) - } else if msg.EventType != "list" { - return nil, errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "list", msg.EventType) - } else if msg.Error { - return nil, errors.Errorf(tr("command failed: %s"), msg.Message) - } else { - return msg.Ports, nil - } -} - -// StartSync puts the discovery in "events" mode: the discovery will send "add" -// and "remove" events each time a new port is detected or removed respectively. -// After calling StartSync an initial burst of "add" events may be generated to -// report all the ports available at the moment of the start. -// It also creates a channel used to receive events from the pluggable discovery. -// The event channel must be consumed as quickly as possible since it may block the -// discovery if it becomes full. The channel size is configurable. -func (disc *PluggableDiscovery) StartSync(size int) (<-chan *Event, error) { - disc.statusMutex.Lock() - defer disc.statusMutex.Unlock() - - if err := disc.sendCommand("START_SYNC\n"); err != nil { - return nil, err - } - - if msg, err := disc.waitMessage(time.Second * 10); err != nil { - return nil, fmt.Errorf(tr("calling %[1]s: %[2]w"), "START_SYNC", err) - } else if msg.EventType != "start_sync" { - return nil, errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "start_sync", msg.EventType) - } else if msg.Error { - return nil, errors.Errorf(tr("command failed: %s"), msg.Message) - } else if strings.ToUpper(msg.Message) != "OK" { - return nil, errors.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) - } - - disc.state = Syncing - // In case there is already an existing event channel in use we close it before creating a new one. - disc.stopSync() - c := make(chan *Event, size) - disc.eventChan = c - return c, nil -} diff --git a/arduino/discovery/discovery_test.go b/arduino/discovery/discovery_test.go deleted file mode 100644 index 27791da6c89..00000000000 --- a/arduino/discovery/discovery_test.go +++ /dev/null @@ -1,73 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package discovery - -import ( - "io" - "testing" - "time" - - "github.com/arduino/arduino-cli/executils" - "github.com/stretchr/testify/require" -) - -func TestDiscoveryStdioHandling(t *testing.T) { - // Build `cat` helper inside testdata/cat - builder, err := executils.NewProcess(nil, "go", "build") - require.NoError(t, err) - builder.SetDir("testdata/cat") - require.NoError(t, builder.Run()) - - // Run cat and test if streaming json works as expected - disc := New("test", "testdata/cat/cat") // copy stdin to stdout - - err = disc.runProcess() - require.NoError(t, err) - - _, err = disc.outgoingCommandsPipe.Write([]byte(`{ "eventType":`)) // send partial JSON - require.NoError(t, err) - msg, err := disc.waitMessage(time.Millisecond * 100) - require.Error(t, err) - require.Nil(t, msg) - - _, err = disc.outgoingCommandsPipe.Write([]byte(`"ev1" }{ `)) // complete previous json and start another one - require.NoError(t, err) - - msg, err = disc.waitMessage(time.Millisecond * 100) - require.NoError(t, err) - require.NotNil(t, msg) - require.Equal(t, "ev1", msg.EventType) - - msg, err = disc.waitMessage(time.Millisecond * 100) - require.Error(t, err) - require.Nil(t, msg) - - _, err = disc.outgoingCommandsPipe.Write([]byte(`"eventType":"ev2" }`)) // complete previous json - require.NoError(t, err) - - msg, err = disc.waitMessage(time.Millisecond * 100) - require.NoError(t, err) - require.NotNil(t, msg) - require.Equal(t, "ev2", msg.EventType) - - require.Equal(t, disc.State(), Alive) - - err = disc.outgoingCommandsPipe.(io.ReadCloser).Close() - require.NoError(t, err) - time.Sleep(time.Millisecond * 100) - - require.Equal(t, disc.State(), Dead) -} diff --git a/arduino/discovery/testdata/cat/.gitignore b/arduino/discovery/testdata/cat/.gitignore deleted file mode 100644 index a7053b145c4..00000000000 --- a/arduino/discovery/testdata/cat/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -cat -cat.exe diff --git a/arduino/httpclient/httpclient.go b/arduino/httpclient/httpclient.go deleted file mode 100644 index 4969ab2cb46..00000000000 --- a/arduino/httpclient/httpclient.go +++ /dev/null @@ -1,127 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package httpclient - -import ( - "net/http" - "net/url" - "time" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" - "github.com/sirupsen/logrus" - "go.bug.st/downloader/v2" -) - -var tr = i18n.Tr - -// DownloadFile downloads a file from a URL into the specified path. An optional config and options may be passed (or nil to use the defaults). -// A DownloadProgressCB callback function must be passed to monitor download progress. -// If a not empty queryParameter is passed, it is appended to the URL for analysis purposes. -func DownloadFile(path *paths.Path, URL string, queryParameter string, label string, downloadCB rpc.DownloadProgressCB, config *downloader.Config, options ...downloader.DownloadOptions) (returnedError error) { - if queryParameter != "" { - URL = URL + "?query=" + queryParameter - } - logrus.WithField("url", URL).Info("Starting download") - downloadCB.Start(URL, label) - defer func() { - if returnedError == nil { - downloadCB.End(true, "") - } else { - downloadCB.End(false, returnedError.Error()) - } - }() - - if config == nil { - c, err := GetDownloaderConfig() - if err != nil { - return err - } - config = c - } - - d, err := downloader.DownloadWithConfig(path.String(), URL, *config, options...) - if err != nil { - return err - } - - err = d.RunAndPoll(func(downloaded int64) { - downloadCB.Update(downloaded, d.Size()) - }, 250*time.Millisecond) - if err != nil { - return err - } - - // The URL is not reachable for some reason - if d.Resp.StatusCode >= 400 && d.Resp.StatusCode <= 599 { - msg := tr("Server responded with: %s", d.Resp.Status) - return &arduino.FailedDownloadError{Message: msg} - } - - return nil -} - -// Config is the configuration of the http client -type Config struct { - UserAgent string - Proxy *url.URL -} - -// New returns a default http client for use in the arduino-cli -func New() (*http.Client, error) { - userAgent := configuration.UserAgent(configuration.Settings) - proxy, err := configuration.NetworkProxy(configuration.Settings) - if err != nil { - return nil, err - } - return NewWithConfig(&Config{UserAgent: userAgent, Proxy: proxy}), nil -} - -// NewWithConfig creates a http client for use in the arduino-cli, with a given configuration -func NewWithConfig(config *Config) *http.Client { - return &http.Client{ - Transport: &httpClientRoundTripper{ - transport: &http.Transport{ - Proxy: http.ProxyURL(config.Proxy), - }, - userAgent: config.UserAgent, - }, - } -} - -// GetDownloaderConfig returns the downloader configuration based on current settings. -func GetDownloaderConfig() (*downloader.Config, error) { - httpClient, err := New() - if err != nil { - return nil, &arduino.InvalidArgumentError{Message: tr("Could not connect via HTTP"), Cause: err} - } - return &downloader.Config{ - HttpClient: *httpClient, - }, nil -} - -type httpClientRoundTripper struct { - transport http.RoundTripper - userAgent string -} - -func (h *httpClientRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { - req.Header.Add("User-Agent", h.userAgent) - return h.transport.RoundTrip(req) -} diff --git a/arduino/httpclient/httpclient_test.go b/arduino/httpclient/httpclient_test.go deleted file mode 100644 index a2dbc61c291..00000000000 --- a/arduino/httpclient/httpclient_test.go +++ /dev/null @@ -1,70 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package httpclient - -import ( - "fmt" - "io" - "net/http" - "net/http/httptest" - "net/url" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestUserAgentHeader(t *testing.T) { - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprint(w, r.Header.Get("User-Agent")) - })) - defer ts.Close() - - client := NewWithConfig(&Config{ - UserAgent: "test-user-agent", - }) - - request, err := http.NewRequest("GET", ts.URL, nil) - require.NoError(t, err) - - response, err := client.Do(request) - require.NoError(t, err) - - b, err := io.ReadAll(response.Body) - require.NoError(t, err) - - require.Equal(t, "test-user-agent", string(b)) -} - -func TestProxy(t *testing.T) { - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNoContent) - })) - defer ts.Close() - - proxyURL, err := url.Parse(ts.URL) - require.NoError(t, err) - - client := NewWithConfig(&Config{ - Proxy: proxyURL, - }) - - request, err := http.NewRequest("GET", "http://arduino.cc", nil) - require.NoError(t, err) - - response, err := client.Do(request) - require.NoError(t, err) - require.Equal(t, http.StatusNoContent, response.StatusCode) -} diff --git a/arduino/libraries/librariesmanager/download.go b/arduino/libraries/librariesmanager/download.go deleted file mode 100644 index 254f88a981d..00000000000 --- a/arduino/libraries/librariesmanager/download.go +++ /dev/null @@ -1,32 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package librariesmanager - -import ( - "net/url" -) - -// LibraryIndexURL is the URL where to get the library index. -var LibraryIndexURL, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.json") - -// LibraryIndexGZURL is the URL where to get the gzipped library index. -var LibraryIndexGZURL, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.json.gz") - -// LibraryIndexSignature is the URL where to get the library index signature. -var LibraryIndexSignature, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.json.sig") - -// LibraryIndexWithSignatureArchiveURL is the URL where to get the library index. -var LibraryIndexWithSignatureArchiveURL, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.tar.bz2") diff --git a/arduino/libraries/librariesmanager/install_test.go b/arduino/libraries/librariesmanager/install_test.go deleted file mode 100644 index 169680b5502..00000000000 --- a/arduino/libraries/librariesmanager/install_test.go +++ /dev/null @@ -1,119 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package librariesmanager - -import ( - "testing" - - "github.com/arduino/go-paths-helper" - "github.com/stretchr/testify/require" -) - -func TestParseGitURL(t *testing.T) { - gitURL := "" - libraryName, ref, err := parseGitURL(gitURL) - require.Equal(t, "", libraryName) - require.EqualValues(t, "", ref) - require.Errorf(t, err, "invalid git url") - - gitURL = "https://github.com/arduino/arduino-lib.git" - libraryName, ref, err = parseGitURL(gitURL) - require.Equal(t, "arduino-lib", libraryName) - require.EqualValues(t, "", ref) - require.NoError(t, err) - - gitURL = "https://github.com/arduino/arduino-lib.git#0.1.2" - libraryName, ref, err = parseGitURL(gitURL) - require.Equal(t, "arduino-lib", libraryName) - require.EqualValues(t, "0.1.2", ref) - require.NoError(t, err) - - gitURL = "git@github.com:arduino/arduino-lib.git" - libraryName, ref, err = parseGitURL(gitURL) - require.Equal(t, "arduino-lib", libraryName) - require.EqualValues(t, "", ref) - require.NoError(t, err) - - gitURL = "file:///path/to/arduino-lib" - libraryName, ref, err = parseGitURL(gitURL) - require.Equal(t, "arduino-lib", libraryName) - require.EqualValues(t, "", ref) - require.NoError(t, err) - - gitURL = "file:///path/to/arduino-lib.git" - libraryName, ref, err = parseGitURL(gitURL) - require.Equal(t, "arduino-lib", libraryName) - require.EqualValues(t, "", ref) - require.NoError(t, err) - - gitURL = "/path/to/arduino-lib" - libraryName, ref, err = parseGitURL(gitURL) - require.Equal(t, "arduino-lib", libraryName) - require.EqualValues(t, "", ref) - require.NoError(t, err) - - gitURL = "/path/to/arduino-lib.git" - libraryName, ref, err = parseGitURL(gitURL) - require.Equal(t, "arduino-lib", libraryName) - require.EqualValues(t, "", ref) - require.NoError(t, err) - - gitURL = "file:///path/to/arduino-lib" - libraryName, ref, err = parseGitURL(gitURL) - require.Equal(t, "arduino-lib", libraryName) - require.EqualValues(t, "", ref) - require.NoError(t, err) -} - -func TestValidateLibrary(t *testing.T) { - tmpDir := paths.New(t.TempDir()) - - nonExistingDirLib := tmpDir.Join("nonExistingDirLib") - err := validateLibrary(nonExistingDirLib) - require.Errorf(t, err, "directory doesn't exist: %s", nonExistingDirLib) - - emptyLib := tmpDir.Join("emptyLib") - emptyLib.Mkdir() - err = validateLibrary(emptyLib) - require.Errorf(t, err, "library not valid") - - onlyPropertiesLib := tmpDir.Join("onlyPropertiesLib") - onlyPropertiesLib.Mkdir() - onlyPropertiesLib.Join("library.properties").WriteFile([]byte{}) - err = validateLibrary(onlyPropertiesLib) - require.Errorf(t, err, "library not valid") - - missingPropertiesLib := tmpDir.Join("missingPropertiesLib") - missingPropertiesLibSourceDir := missingPropertiesLib.Join("src") - missingPropertiesLibSourceDir.MkdirAll() - missingPropertiesLibSourceDir.Join("some_file.hpp").WriteFile([]byte{}) - err = validateLibrary(missingPropertiesLib) - require.Errorf(t, err, "library not valid") - - validLib := tmpDir.Join("valiLib") - validLibSourceDir := validLib.Join("src") - validLibSourceDir.MkdirAll() - validLibSourceDir.Join("some_file.hpp").WriteFile([]byte{}) - validLib.Join("library.properties").WriteFile([]byte{}) - err = validateLibrary(validLib) - require.NoError(t, err) - - validLegacyLib := tmpDir.Join("validLegacyLib") - validLegacyLib.Mkdir() - validLegacyLib.Join("some_file.hpp").WriteFile([]byte{}) - err = validateLibrary(validLib) - require.NoError(t, err) -} diff --git a/arduino/libraries/librariesmanager/librariesmanager.go b/arduino/libraries/librariesmanager/librariesmanager.go deleted file mode 100644 index e6db732bd9b..00000000000 --- a/arduino/libraries/librariesmanager/librariesmanager.go +++ /dev/null @@ -1,232 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package librariesmanager - -import ( - "errors" - "fmt" - "os" - "slices" - "strings" - - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/i18n" - paths "github.com/arduino/go-paths-helper" - "github.com/sirupsen/logrus" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -// LibrariesManager keeps the current status of the libraries in the system -// (the list of libraries, revisions, installed paths, etc.) -type LibrariesManager struct { - LibrariesDir []*LibrariesDir - Libraries map[string]libraries.List `json:"libraries"` - - Index *librariesindex.Index - IndexFile *paths.Path - IndexFileSignature *paths.Path - DownloadsDir *paths.Path -} - -// LibrariesDir is a directory containing libraries -type LibrariesDir struct { - Path *paths.Path - Location libraries.LibraryLocation - PlatformRelease *cores.PlatformRelease -} - -var tr = i18n.Tr - -// Names returns an array with all the names of the installed libraries. -func (lm LibrariesManager) Names() []string { - res := make([]string, len(lm.Libraries)) - i := 0 - for n := range lm.Libraries { - res[i] = n - i++ - } - slices.SortFunc(res, func(a, b string) int { - if strings.ToLower(a) < strings.ToLower(b) { - return -1 - } - return 1 - }) - return res -} - -// NewLibraryManager creates a new library manager -func NewLibraryManager(indexDir *paths.Path, downloadsDir *paths.Path) *LibrariesManager { - var indexFile, indexFileSignature *paths.Path - if indexDir != nil { - indexFile = indexDir.Join("library_index.json") - indexFileSignature = indexDir.Join("library_index.json.sig") - } - return &LibrariesManager{ - Libraries: map[string]libraries.List{}, - IndexFile: indexFile, - IndexFileSignature: indexFileSignature, - DownloadsDir: downloadsDir, - Index: librariesindex.EmptyIndex, - } -} - -// LoadIndex reads a library_index.json from a file and returns -// the corresponding Index structure. -func (lm *LibrariesManager) LoadIndex() error { - logrus.WithField("index", lm.IndexFile).Info("Loading libraries index file") - index, err := librariesindex.LoadIndex(lm.IndexFile) - if err != nil { - lm.Index = librariesindex.EmptyIndex - return err - } - lm.Index = index - return nil -} - -// AddLibrariesDir adds path to the list of directories -// to scan when searching for libraries. If a path is already -// in the list it is ignored. -func (lm *LibrariesManager) AddLibrariesDir(path *paths.Path, location libraries.LibraryLocation) { - for _, dir := range lm.LibrariesDir { - if dir.Path.EquivalentTo(path) { - return - } - } - logrus.WithField("dir", path).WithField("location", location.String()).Info("Adding libraries dir") - lm.LibrariesDir = append(lm.LibrariesDir, &LibrariesDir{ - Path: path, - Location: location, - }) -} - -// AddPlatformReleaseLibrariesDir add the libraries directory in the -// specified PlatformRelease to the list of directories to scan when -// searching for libraries. -func (lm *LibrariesManager) AddPlatformReleaseLibrariesDir(plaftormRelease *cores.PlatformRelease, location libraries.LibraryLocation) { - path := plaftormRelease.GetLibrariesDir() - if path == nil { - return - } - for _, dir := range lm.LibrariesDir { - if dir.Path.EquivalentTo(path) { - return - } - } - logrus.WithField("dir", path).WithField("location", location.String()).Info("Adding libraries dir") - lm.LibrariesDir = append(lm.LibrariesDir, &LibrariesDir{ - Path: path, - Location: location, - PlatformRelease: plaftormRelease, - }) -} - -// RescanLibraries reload all installed libraries in the system. -func (lm *LibrariesManager) RescanLibraries() []*status.Status { - lm.clearLibraries() - statuses := []*status.Status{} - for _, dir := range lm.LibrariesDir { - if errs := lm.LoadLibrariesFromDir(dir); len(errs) > 0 { - statuses = append(statuses, errs...) - } - } - return statuses -} - -func (lm *LibrariesManager) getLibrariesDir(installLocation libraries.LibraryLocation) (*paths.Path, error) { - for _, dir := range lm.LibrariesDir { - if dir.Location == installLocation { - return dir.Path, nil - } - } - switch installLocation { - case libraries.User: - return nil, errors.New(tr("user directory not set")) - case libraries.IDEBuiltIn: - return nil, errors.New(tr("built-in libraries directory not set")) - default: - return nil, fmt.Errorf("libraries directory not set: %s", installLocation.String()) - } -} - -// LoadLibrariesFromDir loads all libraries in the given directory. Returns -// nil if the directory doesn't exists. -func (lm *LibrariesManager) LoadLibrariesFromDir(librariesDir *LibrariesDir) []*status.Status { - statuses := []*status.Status{} - subDirs, err := librariesDir.Path.ReadDir() - if os.IsNotExist(err) { - return statuses - } - if err != nil { - s := status.Newf(codes.FailedPrecondition, tr("reading dir %[1]s: %[2]s"), librariesDir.Path, err) - return append(statuses, s) - } - subDirs.FilterDirs() - subDirs.FilterOutHiddenFiles() - - for _, subDir := range subDirs { - library, err := libraries.Load(subDir, librariesDir.Location) - if err != nil { - s := status.Newf(codes.Internal, tr("loading library from %[1]s: %[2]s"), subDir, err) - statuses = append(statuses, s) - continue - } - library.ContainerPlatform = librariesDir.PlatformRelease - alternatives := lm.Libraries[library.Name] - alternatives.Add(library) - lm.Libraries[library.Name] = alternatives - } - - return statuses -} - -// LoadLibraryFromDir loads one single library from the libRootDir. -// libRootDir must point to the root of a valid library. -// An error is returned if the path doesn't exist or loading of the library fails. -func (lm *LibrariesManager) LoadLibraryFromDir(libRootDir *paths.Path, location libraries.LibraryLocation) error { - if libRootDir.NotExist() { - return fmt.Errorf(tr("library path does not exist: %s"), libRootDir) - } - - library, err := libraries.Load(libRootDir, location) - if err != nil { - return fmt.Errorf(tr("loading library from %[1]s: %[2]s"), libRootDir, err) - } - - alternatives := lm.Libraries[library.Name] - alternatives.Add(library) - lm.Libraries[library.Name] = alternatives - return nil -} - -// FindByReference return the installed libraries matching the Reference -// name and version or, if the version is nil, the libraries installed -// in the installLocation. -func (lm *LibrariesManager) FindByReference(libRef *librariesindex.Reference, installLocation libraries.LibraryLocation) libraries.List { - alternatives := lm.Libraries[libRef.Name] - if alternatives == nil { - return nil - } - return alternatives.FilterByVersionAndInstallLocation(libRef.Version, installLocation) -} - -func (lm *LibrariesManager) clearLibraries() { - for k := range lm.Libraries { - delete(lm.Libraries, k) - } -} diff --git a/arduino/serialutils/serialutils.go b/arduino/serialutils/serialutils.go deleted file mode 100644 index 7c6bac6ea98..00000000000 --- a/arduino/serialutils/serialutils.go +++ /dev/null @@ -1,216 +0,0 @@ -// This file is part of arduino-cli -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package serialutils - -import ( - "fmt" - "runtime" - "strings" - "time" - - "github.com/arduino/arduino-cli/i18n" - "github.com/pkg/errors" - "go.bug.st/serial" -) - -var tr = i18n.Tr - -// TouchSerialPortAt1200bps open and close the serial port at 1200 bps. This -// is used on many Arduino boards as a signal to put the board in "bootloader" -// mode. -func TouchSerialPortAt1200bps(port string) error { - // Open port - p, err := serial.Open(port, &serial.Mode{BaudRate: 1200}) - if err != nil { - return errors.WithMessage(err, tr("opening port at 1200bps")) - } - - if runtime.GOOS != "windows" { - // This is not required on Windows - // TODO: Investigate if it can be removed for other OS too - - // Set DTR to false - if err = p.SetDTR(false); err != nil { - p.Close() - return errors.WithMessage(err, tr("setting DTR to OFF")) - } - } - - // Close serial port - p.Close() - - // Scanning for available ports seems to open the port or - // otherwise assert DTR, which would cancel the WDT reset if - // it happens within 250 ms. So we wait until the reset should - // have already occurred before going on. - time.Sleep(500 * time.Millisecond) - - return nil -} - -func getPortMap() (map[string]bool, error) { - ports, err := serial.GetPortsList() - if err != nil { - return nil, errors.WithMessage(err, tr("listing serial ports")) - } - res := map[string]bool{} - for _, port := range ports { - res[port] = true - } - return res, nil -} - -// ResetProgressCallbacks is a struct that defines a bunch of function callback -// to observe the Reset function progress. -type ResetProgressCallbacks struct { - // TouchingPort is called to signal the 1200-bps touch of the reported port - TouchingPort func(port string) - // WaitingForNewSerial is called to signal that we are waiting for a new port - WaitingForNewSerial func() - // BootloaderPortFound is called to signal that the wait is completed and to - // report the port found, or the empty string if no ports have been found and - // the wait has timed-out. - BootloaderPortFound func(port string) - // Debug reports messages useful for debugging purposes. In normal conditions - // these messages should not be displayed to the user. - Debug func(msg string) -} - -// Reset a board using the 1200 bps port-touch and wait for new ports. -// Both reset and wait are optional: -// - if port is "" touch will be skipped -// - if wait is false waiting will be skipped -// If wait is true, this function will wait for a new port to appear and returns that -// one, otherwise the empty string is returned if the new port can not be detected or -// if the wait parameter is false. -// If dryRun is set to true this function will only emulate the port reset without actually -// performing it, this is useful to mockup for unit-testing and CI. -// In dryRun mode if the `portToTouch` ends with `"999"` and wait is true, Reset will -// return a new "bootloader" port as `portToTouch+"0"`. -// The error is set if the port listing fails. -func Reset(portToTouch string, wait bool, cb *ResetProgressCallbacks, dryRun bool) (string, error) { - getPorts := getPortMap // non dry-run default - if dryRun { - emulatedPort := portToTouch - getPorts = func() (map[string]bool, error) { - res := map[string]bool{} - if emulatedPort != "" { - res[emulatedPort] = true - } - if strings.HasSuffix(emulatedPort, "999") { - emulatedPort += "0" - } else if emulatedPort == "" { - emulatedPort = "newport" - } - return res, nil - } - } - - last, err := getPorts() - if cb != nil && cb.Debug != nil { - cb.Debug(fmt.Sprintf("LAST: %v", last)) - } - if err != nil { - return "", err - } - - if portToTouch != "" && last[portToTouch] { - if cb != nil && cb.Debug != nil { - cb.Debug(fmt.Sprintf("TOUCH: %v", portToTouch)) - } - if cb != nil && cb.TouchingPort != nil { - cb.TouchingPort(portToTouch) - } - if dryRun { - // do nothing! - } else { - if err := TouchSerialPortAt1200bps(portToTouch); err != nil && !wait { - return "", errors.Errorf(tr("TOUCH: error during reset: %s", err)) - } - } - } - - if !wait { - return "", nil - } - if cb != nil && cb.WaitingForNewSerial != nil { - cb.WaitingForNewSerial() - } - - deadline := time.Now().Add(10 * time.Second) - if dryRun { - // use a much lower timeout in dryRun - deadline = time.Now().Add(100 * time.Millisecond) - } - for time.Now().Before(deadline) { - now, err := getPorts() - if err != nil { - return "", err - } - if cb != nil && cb.Debug != nil { - cb.Debug(fmt.Sprintf("WAIT: %v", now)) - } - hasNewPorts := false - for p := range now { - if !last[p] { - hasNewPorts = true - break - } - } - - if hasNewPorts { - if cb != nil && cb.Debug != nil { - cb.Debug("New ports found!") - } - - // on OS X, if the port is opened too quickly after it is detected, - // a "Resource busy" error occurs, add a delay to workaround. - // This apply to other platforms as well. - time.Sleep(time.Second) - - // Some boards have a glitch in the bootloader: some user experienced - // the USB serial port appearing and disappearing rapidly before - // settling. - // This check ensure that the port is stable after one second. - check, err := getPorts() - if err != nil { - return "", err - } - if cb != nil && cb.Debug != nil { - cb.Debug(fmt.Sprintf("CHECK: %v", check)) - } - for p := range check { - if !last[p] { - if cb != nil && cb.BootloaderPortFound != nil { - cb.BootloaderPortFound(p) - } - return p, nil // Found it! - } - } - if cb != nil && cb.Debug != nil { - cb.Debug("Port check failed... still waiting") - } - } - - last = now - time.Sleep(250 * time.Millisecond) - } - - if cb != nil && cb.BootloaderPortFound != nil { - cb.BootloaderPortFound("") - } - return "", nil -} diff --git a/buf.doc.gen.yaml b/buf.doc.gen.yaml new file mode 100644 index 00000000000..c516b499eab --- /dev/null +++ b/buf.doc.gen.yaml @@ -0,0 +1,10 @@ +version: v2 +plugins: + # Local plugin used to generate docs + # go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v1.4.1 + - local: protoc-gen-doc + out: ./docs/rpc + opt: + - markdown,commands.md +inputs: + - directory: ./rpc diff --git a/buf.gen.yaml b/buf.gen.yaml new file mode 100644 index 00000000000..b00e81d4279 --- /dev/null +++ b/buf.gen.yaml @@ -0,0 +1,14 @@ +version: v2 +plugins: + # Use protoc-gen-go + - remote: buf.build/protocolbuffers/go:v1.34.2 + out: ./rpc + opt: + - paths=source_relative + # Use of protoc-gen-go-grpc + - remote: buf.build/grpc/go:v1.5.1 + out: ./rpc + opt: + - paths=source_relative +inputs: + - directory: ./rpc diff --git a/buf.lock b/buf.lock new file mode 100644 index 00000000000..27f70aeb053 --- /dev/null +++ b/buf.lock @@ -0,0 +1,6 @@ +# Generated by buf. DO NOT EDIT. +version: v2 +deps: + - name: buf.build/googleapis/googleapis + commit: e7f8d366f5264595bcc4cd4139af9973 + digest: b5:0cd69a689ee320ed815663d57d1bc3a1d6823224a7a717d46fee3a68197c25a6f5f932c0b0e49f8370c70c247a6635969a6a54af5345cafd51e0667298768aca diff --git a/buf.yaml b/buf.yaml new file mode 100644 index 00000000000..16a8f720093 --- /dev/null +++ b/buf.yaml @@ -0,0 +1,19 @@ +version: v2 +deps: + - buf.build/googleapis/googleapis:e7f8d366f5264595bcc4cd4139af9973 +breaking: + use: + - FILE +lint: + use: + - STANDARD + - COMMENT_ENUM + - COMMENT_ENUM_VALUE + - COMMENT_FIELD + - COMMENT_RPC + - COMMENT_SERVICE + ignore_only: + ENUM_ZERO_VALUE_SUFFIX: + - rpc/cc/arduino/cli/commands/v1/lib.proto +modules: + - path: rpc diff --git a/commands/board/board.go b/commands/board/board.go deleted file mode 100644 index f4da2ff6ae4..00000000000 --- a/commands/board/board.go +++ /dev/null @@ -1,20 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package board - -import "github.com/arduino/arduino-cli/i18n" - -var tr = i18n.Tr diff --git a/commands/board/list.go b/commands/board/list.go deleted file mode 100644 index d0b5cb78dc4..00000000000 --- a/commands/board/list.go +++ /dev/null @@ -1,304 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package board - -import ( - "context" - "encoding/json" - "fmt" - "io" - "net/http" - "regexp" - "sort" - "strings" - "time" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/arduino/httpclient" - "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/internal/inventory" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" -) - -var ( - vidPidURL = "https://builder.arduino.cc/v3/boards/byVidPid" - validVidPid = regexp.MustCompile(`0[xX][a-fA-F\d]{4}`) -) - -func cachedAPIByVidPid(vid, pid string) ([]*rpc.BoardListItem, error) { - var resp []*rpc.BoardListItem - - cacheKey := fmt.Sprintf("cache.builder-api.v3/boards/byvid/pid/%s/%s", vid, pid) - if cachedResp := inventory.Store.GetString(cacheKey + ".data"); cachedResp != "" { - ts := inventory.Store.GetTime(cacheKey + ".ts") - if time.Since(ts) < time.Hour*24 { - // Use cached response - if err := json.Unmarshal([]byte(cachedResp), &resp); err == nil { - return resp, nil - } - } - } - - resp, err := apiByVidPid(vid, pid) // Perform API requrest - - if err == nil { - if cachedResp, err := json.Marshal(resp); err == nil { - inventory.Store.Set(cacheKey+".data", string(cachedResp)) - inventory.Store.Set(cacheKey+".ts", time.Now()) - inventory.WriteStore() - } - } - return resp, err -} - -func apiByVidPid(vid, pid string) ([]*rpc.BoardListItem, error) { - // ensure vid and pid are valid before hitting the API - if !validVidPid.MatchString(vid) { - return nil, errors.Errorf(tr("Invalid vid value: '%s'"), vid) - } - if !validVidPid.MatchString(pid) { - return nil, errors.Errorf(tr("Invalid pid value: '%s'"), pid) - } - - url := fmt.Sprintf("%s/%s/%s", vidPidURL, vid, pid) - req, _ := http.NewRequest("GET", url, nil) - req.Header.Set("Content-Type", "application/json") - - // TODO: use proxy if set - - httpClient, err := httpclient.New() - - if err != nil { - return nil, errors.Wrap(err, tr("failed to initialize http client")) - } - - res, err := httpClient.Do(req) - if err != nil { - return nil, errors.Wrap(err, tr("error querying Arduino Cloud Api")) - } - if res.StatusCode == 404 { - // This is not an error, it just means that the board is not recognized - return nil, nil - } - if res.StatusCode >= 400 { - return nil, errors.Errorf(tr("the server responded with status %s"), res.Status) - } - - resp, err := io.ReadAll(res.Body) - if err != nil { - return nil, err - } - if err := res.Body.Close(); err != nil { - return nil, err - } - - var dat map[string]interface{} - if err := json.Unmarshal(resp, &dat); err != nil { - return nil, errors.Wrap(err, tr("error processing response from server")) - } - name, nameFound := dat["name"].(string) - fqbn, fbqnFound := dat["fqbn"].(string) - if !nameFound || !fbqnFound { - return nil, errors.New(tr("wrong format in server response")) - } - - return []*rpc.BoardListItem{ - { - Name: name, - Fqbn: fqbn, - }, - }, nil -} - -func identifyViaCloudAPI(props *properties.Map) ([]*rpc.BoardListItem, error) { - // If the port is not USB do not try identification via cloud - if !props.ContainsKey("vid") || !props.ContainsKey("pid") { - return nil, nil - } - - logrus.Debug("Querying builder API for board identification...") - return cachedAPIByVidPid(props.Get("vid"), props.Get("pid")) -} - -// identify returns a list of boards checking first the installed platforms or the Cloud API -func identify(pme *packagemanager.Explorer, port *discovery.Port) ([]*rpc.BoardListItem, error) { - boards := []*rpc.BoardListItem{} - if port.Properties == nil { - return boards, nil - } - - // first query installed cores through the Package Manager - logrus.Debug("Querying installed cores for board identification...") - for _, board := range pme.IdentifyBoard(port.Properties) { - fqbn, err := cores.ParseFQBN(board.FQBN()) - if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} - } - fqbn.Configs = board.IdentifyBoardConfiguration(port.Properties) - - // We need the Platform maintaner for sorting so we set it here - platform := &rpc.Platform{ - Maintainer: board.PlatformRelease.Platform.Package.Maintainer, - } - boards = append(boards, &rpc.BoardListItem{ - Name: board.Name(), - Fqbn: fqbn.String(), - IsHidden: board.IsHidden(), - Platform: platform, - }) - } - - // if installed cores didn't recognize the board, try querying - // the builder API if the board is a USB device port - if len(boards) == 0 { - items, err := identifyViaCloudAPI(port.Properties) - if err != nil { - // this is bad, but keep going - logrus.WithError(err).Debug("Error querying builder API") - } - boards = items - } - - // Sort by FQBN alphabetically - sort.Slice(boards, func(i, j int) bool { - return strings.ToLower(boards[i].Fqbn) < strings.ToLower(boards[j].Fqbn) - }) - - // Put Arduino boards before others in case there are non Arduino boards with identical VID:PID combination - sort.SliceStable(boards, func(i, j int) bool { - if boards[i].Platform.Maintainer == "Arduino" && boards[j].Platform.Maintainer != "Arduino" { - return true - } - return false - }) - - // We need the Board's Platform only for sorting but it shouldn't be present in the output - for _, board := range boards { - board.Platform = nil - } - - return boards, nil -} - -// List returns a list of boards found by the loaded discoveries. -// In case of errors partial results from discoveries that didn't fail -// are returned. -func List(req *rpc.BoardListRequest) (r []*rpc.DetectedPort, discoveryStartErrors []error, e error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, nil, &arduino.InvalidInstanceError{} - } - defer release() - - var fqbnFilter *cores.FQBN - if f := req.GetFqbn(); f != "" { - var err error - fqbnFilter, err = cores.ParseFQBN(f) - if err != nil { - return nil, nil, &arduino.InvalidFQBNError{Cause: err} - } - } - - dm := pme.DiscoveryManager() - discoveryStartErrors = dm.Start() - time.Sleep(time.Duration(req.GetTimeout()) * time.Millisecond) - - retVal := []*rpc.DetectedPort{} - for _, port := range dm.List() { - boards, err := identify(pme, port) - if err != nil { - return nil, discoveryStartErrors, err - } - - // boards slice can be empty at this point if neither the cores nor the - // API managed to recognize the connected board - b := &rpc.DetectedPort{ - Port: port.ToRPC(), - MatchingBoards: boards, - } - - if fqbnFilter == nil || hasMatchingBoard(b, fqbnFilter) { - retVal = append(retVal, b) - } - } - return retVal, discoveryStartErrors, nil -} - -func hasMatchingBoard(b *rpc.DetectedPort, fqbnFilter *cores.FQBN) bool { - for _, detectedBoard := range b.MatchingBoards { - detectedFqbn, err := cores.ParseFQBN(detectedBoard.Fqbn) - if err != nil { - continue - } - if detectedFqbn.Match(fqbnFilter) { - return true - } - } - return false -} - -// Watch returns a channel that receives boards connection and disconnection events. -func Watch(ctx context.Context, req *rpc.BoardListWatchRequest) (<-chan *rpc.BoardListWatchResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - dm := pme.DiscoveryManager() - - watcher, err := dm.Watch() - if err != nil { - return nil, err - } - - go func() { - <-ctx.Done() - logrus.Trace("closed watch") - watcher.Close() - }() - - outChan := make(chan *rpc.BoardListWatchResponse) - go func() { - defer close(outChan) - for event := range watcher.Feed() { - port := &rpc.DetectedPort{ - Port: event.Port.ToRPC(), - } - - boardsError := "" - if event.Type == "add" { - boards, err := identify(pme, event.Port) - if err != nil { - boardsError = err.Error() - } - port.MatchingBoards = boards - } - outChan <- &rpc.BoardListWatchResponse{ - EventType: event.Type, - Port: port, - Error: boardsError, - } - } - }() - - return outChan, nil -} diff --git a/commands/board/testdata/package_index.json b/commands/board/testdata/package_index.json deleted file mode 100644 index e36f45cb5b0..00000000000 --- a/commands/board/testdata/package_index.json +++ /dev/null @@ -1,2523 +0,0 @@ -{ - "packages": [ - { - "name": "arduino", - "maintainer": "Arduino", - "websiteURL": "http://www.arduino.cc/", - "email": "packages@arduino.cc", - "help": { - "online": "http://www.arduino.cc/en/Reference/HomePage" - }, - "platforms": [ - { - "name": "Arduino AVR Boards", - "architecture": "avr", - "version": "1.8.3", - "category": "Arduino", - "help": { - "online": "http://www.arduino.cc/en/Reference/HomePage" - }, - "url": "http://downloads.arduino.cc/cores/avr-1.8.3.tar.bz2", - "archiveFileName": "avr-1.8.3.tar.bz2", - "checksum": "SHA-256:de8a9b982477762d3d3e52fc2b682cdd8ff194dc3f1d46f4debdea6a01b33c14", - "size": "4941548", - "boards": [ - { "name": "Arduino Yún" }, - { "name": "Arduino Uno" }, - { "name": "Arduino Uno WiFi" }, - { "name": "Arduino Diecimila" }, - { "name": "Arduino Nano" }, - { "name": "Arduino Mega" }, - { "name": "Arduino MegaADK" }, - { "name": "Arduino Leonardo" }, - { "name": "Arduino Leonardo Ethernet" }, - { "name": "Arduino Micro" }, - { "name": "Arduino Esplora" }, - { "name": "Arduino Mini" }, - { "name": "Arduino Ethernet" }, - { "name": "Arduino Fio" }, - { "name": "Arduino BT" }, - { "name": "Arduino LilyPadUSB" }, - { "name": "Arduino Lilypad" }, - { "name": "Arduino Pro" }, - { "name": "Arduino ATMegaNG" }, - { "name": "Arduino Robot Control" }, - { "name": "Arduino Robot Motor" }, - { "name": "Arduino Gemma" }, - { "name": "Adafruit Circuit Playground" }, - { "name": "Arduino Yún Mini" }, - { "name": "Arduino Industrial 101" }, - { "name": "Linino One" } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "avr-gcc", - "version": "7.3.0-atmel3.6.1-arduino7" - }, - { - "packager": "arduino", - "name": "avrdude", - "version": "6.3.0-arduino17" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.3.0" - } - ] - } - ], - "tools": [ - { - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", - "checksum": "SHA-256:ebe96b34c4f434667cab0187b881ed585e7c7eb990fe6b69be3c81ec7e11e845", - "size": "44423906" - }, - { - "host": "i686-mingw32", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", - "checksum": "SHA-256:fd8c111c861144f932728e00abd3f7d1107e186eb9cd6083a54c7236ea78b7c2", - "size": "84537449" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz", - "checksum": "SHA-256:3598acf21600f17a8e4a4e8e193dc422b894dc09384759b270b2ece5facb59c2", - "size": "52518522" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz", - "checksum": "SHA-256:d23f6626148396d6ec42a5b4d928955a703e0757829195fa71a939e5b86eecf6", - "size": "51395093" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz", - "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz", - "checksum": "SHA-256:ba1994235f69c526c564f65343f22ddbc9822b2ea8c5ee07dd79d89f6ace2498", - "size": "51029223" - } - ] - }, - { - "name": "arm-none-eabi-gcc", - "version": "7-2017q4", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2019-q4-major-linuxarm.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2019-q4-major-linuxarm.tar.bz2", - "checksum": "SHA-256:34180943d95f759c66444a40b032f7dd9159a562670fc334f049567de140c51b", - "size": "96613739" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2018-q2-update-linuxarm64.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2018-q2-update-linuxarm64.tar.bz2", - "checksum": "SHA-256:6fb5752fb4d11012bd0a1ceb93a19d0641ff7cf29d289b3e6b86b99768e66f76", - "size": "99558726" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2017-q4-major-win32-arduino1.zip", - "archiveFileName": "gcc-arm-none-eabi-7-2017-q4-major-win32-arduino1.zip", - "checksum": "SHA-256:96dd0091856f4d2eb21046eba571321feecf7d50b9c156f708b2a8b683903382", - "size": "131761924" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2017-q4-major-mac.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2017-q4-major-mac.tar.bz2", - "checksum": "SHA-256:89b776c7cf0591c810b5b60067e4dc113b5b71bc50084a536e71b894a97fdccb", - "size": "104550003" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2017-q4-major-linux64.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2017-q4-major-linux64.tar.bz2", - "checksum": "SHA-256:96a029e2ae130a1210eaa69e309ea40463028eab18ba19c1086e4c2dafe69a6a", - "size": "99857645" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/gcc-arm-none-eabi-7-2018-q2-update-linux32.tar.bz2", - "archiveFileName": "gcc-arm-none-eabi-7-2018-q2-update-linux32.tar.bz2", - "checksum": "SHA-256:090a0bc2b1956bc49392dff924a6c30fa57c88130097b1972204d67a45ce3cf3", - "size": "97427309" - } - ] - }, - { - "name": "bossac", - "version": "1.3-arduino", - "systems": [ - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-i686-linux-gnu.tar.bz2", - "archiveFileName": "bossac-1.3a-arduino-i686-linux-gnu.tar.bz2", - "checksum": "SHA-256:d6d10362f40729a7877e43474fcf02ad82cf83321cc64ca931f5c82b2d25d24f", - "size": "147359" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-x86_64-pc-linux-gnu.tar.bz2", - "archiveFileName": "bossac-1.3a-arduino-x86_64-pc-linux-gnu.tar.bz2", - "checksum": "SHA-256:c1daed033251296768fa8b63ad283e053da93427c0f3cd476a71a9188e18442c", - "size": "26179" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-i686-mingw32.tar.bz2", - "archiveFileName": "bossac-1.3a-arduino-i686-mingw32.tar.bz2", - "checksum": "SHA-256:a37727622e0f86cb4f2856ad0209568a5d804234dba3dc0778829730d61a5ec7", - "size": "265647" - }, - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-i386-apple-darwin11.tar.bz2", - "archiveFileName": "bossac-1.3a-arduino-i386-apple-darwin11.tar.bz2", - "checksum": "SHA-256:40770b225753e7a52bb165e8f37e6b760364f5c5e96048168d0178945bd96ad6", - "size": "39475" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.8.1-arduino2", - "systems": [ - { - "size": "24443285", - "checksum": "SHA-256:c19a7526235c364d7f62ec1a993d9b495973ba1813869ccf0241c65905896852", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.8.1-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "27152002", - "checksum": "SHA-256:24a931877bee5f36dc00a88877219a6d2f6a1fb7abb989fd04556b8432d2e14e", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "25876628", - "checksum": "SHA-256:2d701b4efbc8cec62dc299cde01730c5eebcf23d7e4393db8cf7744a9bf1d3de", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "46046691", - "checksum": "SHA-256:2eafb49fb803fa4d2c32d35e24c0b372fcd520ca0a790fa537a847179e382000", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.8.1-arduino2-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-i686-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.0.1-arduino2", - "systems": [ - { - "size": "264965", - "checksum": "SHA-256:71117cce0096dad6c091e2c34eb0b9a3386d3aec7d863d2da733d9e5eac3a6b1", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.0.1-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "292541", - "checksum": "SHA-256:2489004d1d98177eaf69796760451f89224007c98b39ebb5577a9a34f51425f1", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "283209", - "checksum": "SHA-256:6f633dd6270ad0d9ef19507bcbf8697b414a15208e4c0f71deec25ef89cdef3f", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "241618", - "checksum": "SHA-256:6c5483800ba753c80893607e30cade8ab77b182808fcc5ea15fa3019c63d76ae", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.0.1-arduino2-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-i686-mingw32.zip" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.8.1-arduino3", - "systems": [ - { - "size": "24447175", - "checksum": "SHA-256:28e207c66b3dc405367d0c5e68ce3c278e5ec3abb0e4974e7927fe0f9a532c40", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.8.1-arduino3-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-i386-apple-darwin11.tar.bz2" - }, - { - "size": "30556996", - "checksum": "SHA-256:028340abec6eb3085b82404dfc7ed143e1bb05b2da961b539ddcdba4a6f65533", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino3-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "28768022", - "checksum": "SHA-256:37796548ba9653267568f959cd8c7ebfe5b4bce4599898cf9f876d64e616cb87", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino3-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "46046917", - "checksum": "SHA-256:d6f0527793f9800f060408392a99eb290ed205730edbae43a1a25cbf6b6b588f", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.8.1-arduino3-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-i686-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.0.1-arduino3", - "systems": [ - { - "size": "264682", - "checksum": "SHA-256:df7cd4a76e45ab3767eb964f845f4d5e9d643df950ec32812923da1e9843d072", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.0.1-arduino3-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-i386-apple-darwin11.tar.bz2" - }, - { - "size": "748634", - "checksum": "SHA-256:bb7bff48f20a68e1fe559c3f3f644574df12ab5c98eb6a1491079f3c760434ad", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino3-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "495482", - "checksum": "SHA-256:96a0cfb83fe0452366159e3bf4e19ff10906a8957d1feafd3d98b49ab4b14405", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino3-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "241619", - "checksum": "SHA-256:ea59bfc2ee85039c85318b2ba52c47ef0573513444a785b72f59b22586a950f9", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.0.1-arduino3-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-i686-mingw32.zip" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.8.1-arduino5", - "systems": [ - { - "size": "24403768", - "checksum": "SHA-256:c8ffcd2db7a651b48ab4ea19db4b34fbae3e7f0210a0f294592af2bdabf2154b", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-4.8.1-arduino5-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "24437400", - "checksum": "SHA-256:111b3ef00d737d069eb237a8933406cbb928e4698689e24663cffef07688a901", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.8.1-arduino5-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i386-apple-darwin11.tar.bz2" - }, - { - "size": "27093036", - "checksum": "SHA-256:9054fcc174397a419ba56c4ce1bfcbcad275a6a080cc144905acc9b0351ee9cc", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino5-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "25882375", - "checksum": "SHA-256:7648b7f549b37191da0b0be53bae791b652f82ac3cb4e7877f85075aaf32141f", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.8.1-arduino5-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "46044779", - "checksum": "SHA-256:d4303226a7b41d3c445d901b5aa5903458def3fc7b7ff4ffef37cabeb37d424d", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.8.1-arduino5-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i686-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.0.1-arduino5", - "systems": [ - { - "size": "267095", - "checksum": "SHA-256:23ea1341dbc117ec067f2eb1a498ad2bdd7d11fff0143c00b2e018c39804f6b4", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.0.1-arduino5-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "264894", - "checksum": "SHA-256:41af8d3b0a586853c8317b4fb5163ca0db594a1870ddf680fd988c42166fc3e5", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.0.1-arduino5-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-i386-apple-darwin11.tar.bz2" - }, - { - "size": "292629", - "checksum": "SHA-256:d826cca7383461f7e8adde686372cf900e9cb3afd639555cf2d6c645b283a476", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino5-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "283121", - "checksum": "SHA-256:5933d66927bce46ababa9b68a8b7f1d53f68c4f3ff7a5ce4b85d7cf4e6c6bfee", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.0.1-arduino5-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "241634", - "checksum": "SHA-256:41f667f1f6a0ab8df46b4ffacd023176dcdef331d6db3b74bddd37d18cca0a44", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.0.1-arduino5-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-i686-mingw32.zip" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.9.2-atmel3.5.3-arduino", - "systems": [ - { - "size": "27046965", - "checksum": "SHA-256:adeee70be27cc3ee0e4b9e844610d9c534c7b21dae24ec3fa49808c2f04958de", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-i386-apple-darwin11.tar.bz2" - }, - { - "size": "27400001", - "checksum": "SHA-256:02dba9ee77694c23a4c304416a3808949c8faedf07f25a225a4189d850615ec6", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "29904544", - "checksum": "SHA-256:0711e885c0430859e7fea3831af8c69a0c25f92a90ecfda9281799a0acec7455", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "29077606", - "checksum": "SHA-256:fe0bb1d6369694779ceb671d457ccadbeafe855a11f6746b7db20055cea4df33", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "43847566", - "checksum": "SHA-256:445ce3117e87be7e196809fbbea373976160689b6d4b43dbf185eb4c914d1469", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-i686-mingw32.zip" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.9.2-atmel3.5.3-arduino2", - "systems": [ - { - "size": "27400889", - "checksum": "SHA-256:77f300d519bc6b9a25df17b36cb303218e9a258c059b2f6bff8f71a0d8f96821", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "27048070", - "checksum": "SHA-256:311258af188defe24a4b341e4e1f4dc93ca6c80516d3e3b55a2fc07a7050248b", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "43847945", - "checksum": "SHA-256:f8e6ede8746c70be01ec79a30803277cd94360cc5b2e104762da0fbcf536fcc6", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-mingw32.zip" - }, - { - "size": "29292729", - "checksum": "SHA-256:f108951e7c4dc90926d1fc76cc27549f6ea63c702a2bb7ff39647a19ae86ec68", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "29882960", - "checksum": "SHA-256:3903a6d1bb9fdd91727e504b5993d5501f119bcb7f99f7aee98a2101e5629188", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avr-gcc", - "version": "4.9.2-atmel3.5.4-arduino2", - "systems": [ - { - "size": "27764772", - "checksum": "SHA-256:ee36009e19bd238d1f6351cbc9aa5db69714761f67dec4c1d69d5d5d7758720c", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "28574644", - "checksum": "SHA-256:67b3ed3555eacf0b4fc6f62240773b9f0220171fe4de26bb8d711547fc884730", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "44386446", - "checksum": "SHA-256:6044551cd729d88ea6ffcccf10aad1934c5b164d61f4f5890b0e78524ffff853", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-mingw32.zip" - }, - { - "size": "29723974", - "checksum": "SHA-256:63a9d4cebbac06fd5fa8f48a2e2ba7d513837dcddc97f560129b4e466af901b5", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "30374404", - "checksum": "SHA-256:19480217f1524d78467b83cd742f503182bbcc76b5440093261f146828aa588c", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-4.9.2-atmel3.5.4-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.4-arduino2-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avr-gcc", - "version": "5.4.0-atmel3.6.1-arduino2", - "systems": [ - { - "size": "31449123", - "checksum": "SHA-256:6741f95cc3182a8729cf9670eb13d8dc5a19e881639ca61e53a2d78346a4e99f", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "33141295", - "checksum": "SHA-256:0fa9e4f2d6d09782dbc84dd91a302849cde2f192163cb9f29484c5f32785269a", - "host": "aarch64-linux-gnu", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "31894498", - "checksum": "SHA-256:abc50137543ba73e227b4d1b8510fff50a474bacd24f2c794f852904963849f8", - "host": "i386-apple-darwin11", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "45923772", - "checksum": "SHA-256:7eb5691a379b547798fae535b05d68bc02d3969f12d051b8a5a5f2f350ab0a7f", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-i686-w64-mingw32.zip" - }, - { - "size": "33022916", - "checksum": "SHA-256:51f87e04f3cdaa73565c751051ac118e02904ad8478f1475b300e1bffcd5538f", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "33522375", - "checksum": "SHA-256:05422b0d73b10357c12ea938f02cf50529422b89a4722756e70024aed3e69185", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-5.4.0-atmel3.6.1-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-5.4.0-atmel3.6.1-arduino2-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avr-gcc", - "version": "7.3.0-atmel3.6.1-arduino5", - "systems": [ - { - "size": "34462042", - "checksum": "SHA-256:f4acd5531c6b82c715e2edfa0aadb13fb718b4095b3ea1aa1f7fbde680069639", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "39381972", - "checksum": "SHA-256:dd9c70190be370a44fb47dab1514de6d8852b861dfa527964b65c740d8d50c10", - "host": "aarch64-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "38492678", - "checksum": "SHA-256:f48706317f04452544ab90e75bd1bb193f8af2cb1002f53aa702f27202c1b38f", - "host": "x86_64-apple-darwin14", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-x86_64-apple-darwin14.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-x86_64-apple-darwin14.tar.bz2" - }, - { - "size": "53727984", - "checksum": "SHA-256:6d4a5d089a36e5b5252befc73da204555b49e376ce7577ee19ca7f028b295830", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-i686-w64-mingw32.zip" - }, - { - "size": "38710087", - "checksum": "SHA-256:2ff12739d7ed09688d6b3c2c126e8df69b5bda1a07ab558799f0e576571e0e1d", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "39114120", - "checksum": "SHA-256:3effed8ffa1978b6e4a46f1aa2acc629e440b4d77244f71f9b79a916025206fb", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino5-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino5-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avr-gcc", - "version": "7.3.0-atmel3.6.1-arduino7", - "systems": [ - { - "size": "34683056", - "checksum": "SHA-256:3903553d035da59e33cff9941b857c3cb379cb0638105dfdf69c97f0acc8e7b5", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "38045723", - "checksum": "SHA-256:03d322b9df6da17289e9e7c6233c34a8535d9c645c19efc772ba19e56914f339", - "host": "aarch64-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "36684546", - "checksum": "SHA-256:f6ed2346953fcf88df223469088633eb86de997fa27ece117fd1ef170d69c1f8", - "host": "x86_64-apple-darwin14", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-x86_64-apple-darwin14.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-x86_64-apple-darwin14.tar.bz2" - }, - { - "size": "52519412", - "checksum": "SHA-256:a54f64755fff4cb792a1495e5defdd789902a2a3503982e81b898299cf39800e", - "host": "i686-mingw32", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-i686-w64-mingw32.zip" - }, - { - "size": "37176991", - "checksum": "SHA-256:954bbffb33545bcdcd473af993da2980bf32e8461ff55a18e0eebc7b2ef69a4c", - "host": "i686-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "37630618", - "checksum": "SHA-256:bd8c37f6952a2130ac9ee32c53f6a660feb79bee8353c8e289eb60fdcefed91e", - "host": "x86_64-linux-gnu", - "archiveFileName": "avr-gcc-7.3.0-atmel3.6.1-arduino7-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avr-gcc-7.3.0-atmel3.6.1-arduino7-x86_64-pc-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino2", - "systems": [ - { - "size": "643484", - "checksum": "SHA-256:26af86137d8a872f64d217cb262734860b36fe26d6d34faf72e951042f187885", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino2-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "653968", - "checksum": "SHA-256:32525ea3696c861030e1a6006a5f11971d1dad331e45bfa68dac35126476b04f", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino2-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-i386-apple-darwin11.tar.bz2" - }, - { - "size": "745081", - "checksum": "SHA-256:9635af5a35bdca11804c07582d7beec458140fb6e3308168c3deda18dc6790fa", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino2-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "731802", - "checksum": "SHA-256:790b6cb610c48e73a2a0f65dcee9903d2fd7f1b0a1f75008a9a21f50a60c7251", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino2-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "608496", - "checksum": "SHA-256:8eaf98ea41fbd4450483488ef31710cbcc43c0412dbc8e1e1b582feaab6eca30", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino2-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino6", - "systems": [ - { - "size": "644600", - "checksum": "SHA-256:2426207423d58eb0e5fc4df9493418f1cb54ba3f328fdc7c3bb582f920b9cbe7", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino6-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "696273", - "checksum": "SHA-256:d9a039c9e92d3dbb2011e75e6c044a1a4a2789e2fbf8386b1d580994811be084", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino6-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-i386-apple-darwin11.tar.bz2" - }, - { - "size": "746653", - "checksum": "SHA-256:97b4875cad6110c70101bb776f3ac37b64a2e73f036cd0b10afb6f4be96a6621", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino6-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "733127", - "checksum": "SHA-256:5f4bc4b0957b1d34cec9908b7f84a7c297b894b39fe16a4992c284b24c00d6fb", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino6-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "645859", - "checksum": "SHA-256:7468a1bcdfa459d175a095b102c0de28efc466accfb104305fbcad7832659ddc", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino6-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino6-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino8", - "systems": [ - { - "size": "644550", - "checksum": "SHA-256:25a6834ae48019fccf37024236a1f79fe21760414292a4f3fa058d937ceee1ce", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino8-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "697268", - "checksum": "SHA-256:be8a33a7ec01bb7123279466ffa31371e0aa4fccefffcc23ce71810b59531947", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino8-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-i386-apple-darwin11.tar.bz2" - }, - { - "size": "711544", - "checksum": "SHA-256:85f38d02e2398d3b7f93da2ca8b830ee65bb73f66cc7a7b30c466d3cebf2da6e", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino8-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "701718", - "checksum": "SHA-256:8e2e4bc71d22e9d11ed143763b97f3aa2d164cdeee678a9deaf5b36e245b2d20", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino8-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "645996", - "checksum": "SHA-256:3a7592f6c33efd658b820c73d1058d3c868a297cbddb37da5644973c3b516d5e", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino8-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino8-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino9", - "systems": [ - { - "size": "644550", - "checksum": "SHA-256:25a6834ae48019fccf37024236a1f79fe21760414292a4f3fa058d937ceee1ce", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino9-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "697309", - "checksum": "SHA-256:bfa06bc042dff252d3a8eded98da159484e75b46d2697da4d9446dcd2aea8465", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino9-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i386-apple-darwin11.tar.bz2" - }, - { - "size": "711229", - "checksum": "SHA-256:c8cccb84e2fe49ee837b24f0a60a99e9c371dae26e84c5b0b22b6b6aab2f1f6a", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino9-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "701590", - "checksum": "SHA-256:4235a2d58e3c3224c603d6c5f0610507ed6c48ebf4051fdcce9f77a7646e218b", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino9-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "645974", - "checksum": "SHA-256:f3c5cfa8d0b3b0caee81c5b35fb6acff89c342ef609bf4266734c6266a256d4f", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino9-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino9-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino14", - "systems": [ - { - "size": "219616", - "checksum": "SHA-256:d1a06275490d59a431c419788bbc53ffd5a79510dac1a35e63cf488621ba5589", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino14-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "229688", - "checksum": "SHA-256:439f5de150695e3732dd598bb182dae6ec1e3a5cdb580f855d9b58e485e84e66", - "host": "aarch64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino14-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "256917", - "checksum": "SHA-256:47d03991522722ce92120c60c4118685b7861909d895f34575001137961e4a63", - "host": "i386-apple-darwin11", - "archiveFileName": "avrdude-6.3.0-arduino14-i386-apple-darwin12.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-i386-apple-darwin11.tar.bz2" - }, - { - "size": "253366", - "checksum": "SHA-256:7986e8f3059353dc08f9234f7dbc98d9b2fa2242f046f02a8243a060f7358bfc", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino14-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "244293", - "checksum": "SHA-256:4f100e3843c635064997df91d2a079ab15cd30d1d7fa227280abe6a7c3bc74ca", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino14-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "328363", - "checksum": "SHA-256:69293e0de2eff8de89f553477795c25005f674a320bbba4b0222beb0194aa297", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino14-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino14-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino16", - "systems": [ - { - "size": "219642", - "checksum": "SHA-256:6fc443445440f0e2d95d70013ed075bceffc2a1babc1e7d4f1ae69c3fe268c57", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino16-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "229997", - "checksum": "SHA-256:7a2726ab2fd18b910abc3d9dd33c4b40d18c34cf12c46f3367932e7fd87c0197", - "host": "aarch64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino16-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "279172", - "checksum": "SHA-256:f93dc12a4b30a335ab24b3c628e6cad0ebf2f8adfb7ef50f87c0fc17165b2156", - "host": "x86_64-apple-darwin15", - "archiveFileName": "avrdude-6.3.0-arduino16-i386-apple-darwin11.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-i386-apple-darwin11.tar.bz2" - }, - { - "size": "254085", - "checksum": "SHA-256:57856d6e388d333d924afa3e2d5525161dbe0dc670e7caae2720e249606175a7", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino16-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "244393", - "checksum": "SHA-256:bdf73358991243a9a8de11a42c80c4ec4b14c82f2222cb0c3c181f62656c41fb", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino16-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "328456", - "checksum": "SHA-256:781c16a8bf813fa68fc0f47d427279053c9e098c3aed7165449ac4f0137304dd", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino16-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino16-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "avrdude", - "version": "6.3.0-arduino17", - "systems": [ - { - "size": "219631", - "checksum": "SHA-256:2a8e68c5d803aa6f902ef219f177ec3a4c28275d85cbe272962ad2cd374f50d1", - "host": "arm-linux-gnueabihf", - "archiveFileName": "avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2" - }, - { - "size": "229852", - "checksum": "SHA-256:6cf948f751acfe7b96684537f2291c766ec8b54b4f7dc95539864821456fa9fc", - "host": "aarch64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2" - }, - { - "size": "279045", - "checksum": "SHA-256:120cc9edaae699e7e9ac50b1b8eb0e7d51fdfa555bac54233c2511e6ee5418c9", - "host": "x86_64-apple-darwin12", - "archiveFileName": "avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2" - }, - { - "size": "254271", - "checksum": "SHA-256:accdfb920af2aabf4f7461d2ac73c0751760f525216dc4e7657427a78c60d13d", - "host": "x86_64-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2" - }, - { - "size": "244550", - "checksum": "SHA-256:5c8cc6c17db9300e1451fe41cd7178b0442b4490ee6fdbc0aed9811aef96c05f", - "host": "i686-linux-gnu", - "archiveFileName": "avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2" - }, - { - "size": "328460", - "checksum": "SHA-256:e99188873c7c5ad8f8f906f068c33600e758b2e36cce3adbd518a21bd266749d", - "host": "i686-mingw32", - "archiveFileName": "avrdude-6.3.0-arduino17-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.0.0", - "systems": [ - { - "size": "2044124", - "checksum": "SHA-256:850a86876403cb45c944590a8cc7f9d8ef6d53ed853f7a9593ec395c4c1c6b2d", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.0.0-linux32.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-linux32.tar.bz2" - }, - { - "size": "2178772", - "checksum": "SHA-256:f01f25e02787492a8a30414230635adae76ed85228045437433892d185991f9e", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.0.0-linux64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-linux64.tar.bz2" - }, - { - "size": "1961623", - "checksum": "SHA-256:0ca6c0a93bfad50be0b6e62dc51ba6c3267b809bab4ec91ef9606ab7d838e46b", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.0.0-linuxarm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-linuxarm.tar.bz2" - }, - { - "size": "2180617", - "checksum": "SHA-256:e63c6034da2c1a7fe453eaa29c22df88627cc0aa3c5cbab7635c19367b74ee59", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.0.0-osx.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-osx.tar.bz2" - }, - { - "size": "2247970", - "checksum": "SHA-256:7bced1489217e07661ea1e75702a10a874b54f6146e2414ee47684c7eac014d1", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.0.0-windows.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.0.0-windows.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.1.1", - "systems": [ - { - "size": "2045036", - "checksum": "SHA-256:7ac91ef1d5b357c0ceb790be02ef54986db598ba5a42fffbd6c8ecbdd6a271ef", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.1.1-linux_386.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-linux_386.tar.bz2" - }, - { - "size": "2178288", - "checksum": "SHA-256:eb5ad0a457dd7f610f7f9b85454399c36755673d61a16f9d07cdfcbbb32ec277", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.1.1-linux_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-linux_amd64.tar.bz2" - }, - { - "size": "1962115", - "checksum": "SHA-256:e4880d83df3d3f6f4b7b7bcde161e80a0556877468803a3c6066ee4ad18a374c", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.1.1-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-linux_arm.tar.bz2" - }, - { - "size": "2181376", - "checksum": "SHA-256:a1ce7cf578982f3af5e4fab6b5839e44830d7a41cb093faba5c4b45952a6fa55", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.1.1-darwin_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-darwin_amd64.tar.bz2" - }, - { - "size": "2248431", - "checksum": "SHA-256:b2d3610c77f969a68cd75b6ea66bf63ec10c263937009d99147fbcd975c90006", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.1.1-windows_386.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.1.1-windows_386.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.2.0", - "systems": [ - { - "size": "1839854", - "checksum": "SHA-256:7157a0b56620fb43b8dfb4afd958f8b294476a5ce4322c212167ca5d4092f2d9", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.0-linux_386.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-linux_386.tar.bz2" - }, - { - "size": "1974030", - "checksum": "SHA-256:f672c1c407c4cb10729a1d891bdb8b010e2043e5415e1c2559bf39cdeaede78c", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.0-linux_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-linux_amd64.tar.bz2" - }, - { - "size": "1787138", - "checksum": "SHA-256:ac49ffcd3239a6a52215f89dbda012d28f1296e6d79fc0efc3df06f919105744", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.2.0-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-linux_arm.tar.bz2" - }, - { - "size": "1992476", - "checksum": "SHA-256:160e83e77d7a60514ca40fedf34f539124aac4b9ae0e2bfdf8fda11d958de38f", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.2.0-darwin_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-darwin_amd64.tar.bz2" - }, - { - "size": "2003964", - "checksum": "SHA-256:9d26747093ab7966bfeffced9dbd7def0e164bba0db89f5efb3f7f8011496c8f", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.2.0-windows_386.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.0-windows_386.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.2.1", - "systems": [ - { - "size": "2133779", - "checksum": "SHA-256:2ffdf64b78486c1d0bf28dc23d0ca36ab75ca92e84b9487246da01888abea6d4", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.1-linux_386.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-linux_386.tar.bz2" - }, - { - "size": "2257689", - "checksum": "SHA-256:5b82310d53688480f34a916aac31cd8f2dd2be65dd8fa6c2445262262e1948f9", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.1-linux_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-linux_amd64.tar.bz2" - }, - { - "size": "2093132", - "checksum": "SHA-256:ad54b3dcd586212941fd992bab573b53d13207a419a3f2981c970a085ae0e9e0", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.2.1-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-linux_arm.tar.bz2" - }, - { - "size": "2093132", - "checksum": "SHA-256:ad54b3dcd586212941fd992bab573b53d13207a419a3f2981c970a085ae0e9e0", - "host": "aarch64-linux-gnu", - "archiveFileName": "arduinoOTA-1.2.1-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-linux_arm.tar.bz2" - }, - { - "size": "2244088", - "checksum": "SHA-256:93a6d9f9c0c765d237be1665bf7a0a8e2b0b6d2a8531eae92db807f5515088a7", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.2.1-darwin_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-darwin_amd64.tar.bz2" - }, - { - "size": "2237511", - "checksum": "SHA-256:e1ebf21f2c073fce25c09548c656da90d4ef6c078401ec6f323e0c58335115e5", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.2.1-windows_386.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.2.1-windows_386.zip" - } - ] - }, - { - "name": "arduinoOTA", - "version": "1.3.0", - "systems": [ - { - "size": "2633516", - "checksum": "SHA-256:3e7f59d6fbc7a724598303f0d3289d0c4fd137a8973437980658379a024887b2", - "host": "i686-linux-gnu", - "archiveFileName": "arduinoOTA-1.3.0-linux_386.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-linux_386.tar.bz2" - }, - { - "size": "2716248", - "checksum": "SHA-256:aa45ee2441ffc3a122daec5802941d1fa2ac47adf5c5c481b5e0daa4dc259ffa", - "host": "x86_64-linux-gnu", - "archiveFileName": "arduinoOTA-1.3.0-linux_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-linux_amd64.tar.bz2" - }, - { - "size": "2567435", - "checksum": "SHA-256:1888587409b56aef4ba0ab0e6703b3dccba7cc3a022756ba9b908247e5d5a656", - "host": "arm-linux-gnueabihf", - "archiveFileName": "arduinoOTA-1.3.0-linux_arm.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-linux_arm.tar.bz2" - }, - { - "size": "2472427", - "checksum": "SHA-256:835ed8f37cffac37e979d1b0f6041559592d3d98be52f0e8611b76c4858e4113", - "host": "aarch64-linux-gnu", - "archiveFileName": "arduinoOTA-1.3.0-linux_arm64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-linux_arm64.tar.bz2" - }, - { - "size": "2766116", - "checksum": "SHA-256:d5d0f82ff829c0e434d12a2ee640a6fbd78f893ab37782edbb8b5bf2359d119e", - "host": "i386-apple-darwin11", - "archiveFileName": "arduinoOTA-1.3.0-darwin_amd64.tar.bz2", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-darwin_amd64.tar.bz2" - }, - { - "size": "2768948", - "checksum": "SHA-256:051943844eee442460d2c709edefadca184287fffd2b6c100dd53aa742aa05f6", - "host": "i686-mingw32", - "archiveFileName": "arduinoOTA-1.3.0-windows_386.zip", - "url": "http://downloads.arduino.cc/tools/arduinoOTA-1.3.0-windows_386.zip" - } - ] - }, - { - "name": "bossac", - "version": "1.5-arduino", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "bossac-1.5-arduino2-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:7b61b7814e5b57bcbd853439fc9cd3e98af4abfdd369bf039c6917f9599e44b9", - "size": "199550" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-mingw32.tar.gz", - "archiveFileName": "bossac-1.5-arduino2-mingw32.tar.gz", - "checksum": "SHA-256:9d849a34f0b26c25c6a8c4d741cd749dea238cade73b57a3048f248c431d9cc9", - "size": "222283" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-i386-apple-darwin14.3.0.tar.gz", - "archiveFileName": "bossac-1.5-arduino2-i386-apple-darwin14.3.0.tar.gz", - "checksum": "SHA-256:8f07e50a1f887cb254092034c6a4482d73209568cd83cb624d6625d66794f607", - "size": "64120" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.5-arduino2-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:42785329155dcb39872d4d30a2a9d31e0f0ce3ae7e34a3ed3d840cbc909c4657", - "size": "30431" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-i486-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.5-arduino2-i486-linux-gnu.tar.gz", - "checksum": "SHA-256:ac56e553bbd6d992fa5592ace90996806230ab582f2bf9f8590836fec9dabef6", - "size": "29783" - } - ] - }, - { - "name": "bossac", - "version": "1.6-arduino", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-mingw32.tar.gz", - "archiveFileName": "bossac-1.6-arduino-mingw32.tar.gz", - "checksum": "SHA-256:b59d64d3f7a43c894d0fba2dd1241bbaeefedf8c902130a24d8ec63b08f9ff6a", - "size": "222517" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-i386-apple-darwin14.4.0.tar.gz", - "archiveFileName": "bossac-1.6-arduino-i386-apple-darwin14.4.0.tar.gz", - "checksum": "SHA-256:6b3b686a782b6587c64c85db80085c9089c5ea1b051e49e5af17b3c6109c8efa", - "size": "64538" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.6-arduino-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:2ce7a54d609b4ce3b678147202b2556dd1ce5b318de48a018c676521b994c7a7", - "size": "30649" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-i486-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.6-arduino-i486-linux-gnu.tar.gz", - "checksum": "SHA-256:5c320bf5cfdbf03e3f648642e6de325e459a061fcf96b2215cb955263f7467b2", - "size": "30072" - } - ] - }, - { - "name": "bossac", - "version": "1.6.1-arduino", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:8c4e63db982178919c824e7a35580dffc95c3426afa7285de3eb583982d4d391", - "size": "201341" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-mingw32.tar.gz", - "archiveFileName": "bossac-1.6.1-arduino-mingw32.tar.gz", - "checksum": "SHA-256:d59f43e2e83a337d04c4ae88b195a4ee175b8d87fff4c43144d23412a4a9513b", - "size": "222918" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-i386-apple-darwin14.5.0.tar.gz", - "archiveFileName": "bossac-1.6.1-arduino-i386-apple-darwin14.5.0.tar.gz", - "checksum": "SHA-256:2f80ef569a3fb19da60ab3489e49d8fe7d4699876acf30ff4938c632230a09aa", - "size": "64587" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.6.1-arduino-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:b78afc66c00ccfdd69a08bd3959c260a0c64ccce78a71d5a1135ae4437ff40db", - "size": "30869" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-i486-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.6.1-arduino-i486-linux-gnu.tar.gz", - "checksum": "SHA-256:1e211347569d75193b337296a10dd25b0ce04419e3d7dc644355178b6b514f92", - "size": "30320" - } - ] - }, - { - "name": "bossac", - "version": "1.7.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-mingw32.tar.gz", - "archiveFileName": "bossac-1.7.0-mingw32.tar.gz", - "checksum": "SHA-256:9ef7d11b4fabca0adc17102a0290957d5cc26ce46b422c3a5344722c80acc7b2", - "size": "243066" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-i386-apple-darwin15.6.0.tar.gz", - "archiveFileName": "bossac-1.7.0-i386-apple-darwin15.6.0.tar.gz", - "checksum": "SHA-256:feac36ab38876c163dcf51bdbcfbed01554eede3d41c59a0e152e170fe5164d2", - "size": "63822" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:9475c0c8596c1ba12dcbce60e48fef7559087fa8eccbea7bab732113f3c181ee", - "size": "31373" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-i686-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:17003b0bdc698d52eeb91b09c34aec501c6e0285b4aa88659ab7cc407a451a4d", - "size": "31086" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arm-linux-gnueabihf.tar.gz", - "archiveFileName": "bossac-1.7.0-arm-linux-gnueabihf.tar.gz", - "checksum": "SHA-256:09e46d0af61b2189caaac0bc6d4dd15cb22c167fdedc56ec98602dd5f10e68e0", - "size": "27382" - } - ] - }, - { - "name": "bossac", - "version": "1.7.0-arduino3", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-windows.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-windows.tar.gz", - "checksum": "SHA-256:62745cc5a98c26949ec9041ef20420643c561ec43e99dae659debf44e6836526", - "size": "3607421" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-osx.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-osx.tar.gz", - "checksum": "SHA-256:adb3c14debd397d8135e9e970215c6972f0e592c7af7532fa15f9ce5e64b991f", - "size": "75510" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-linux64.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-linux64.tar.gz", - "checksum": "SHA-256:1ae54999c1f97234a5c603eb99ad39313b11746a4ca517269a9285afa05f9100", - "size": "207271" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-linux32.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-linux32.tar.gz", - "checksum": "SHA-256:4ac4354746d1a09258f49a43ef4d1baf030d81c022f8434774268b00f55d3ec3", - "size": "193577" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-linuxarm.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-linuxarm.tar.gz", - "checksum": "SHA-256:626c6cc548046901143037b782bf019af1663bae0d78cf19181a876fb9abbb90", - "size": "193941" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.7.0-arduino3-linuxaarch64.tar.gz", - "archiveFileName": "bossac-1.7.0-arduino3-linuxaarch64.tar.gz", - "checksum": "SHA-256:a098b2cc23e29f0dc468416210d097c4a808752cd5da1a7b9b8b7b931a04180b", - "size": "268365" - } - ] - }, - { - "name": "bossac", - "version": "1.8.0-48-gb176eee", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-i686-w64-mingw32.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-i686-w64-mingw32.tar.gz", - "checksum": "SHA-256:4523a6897f3dfd673fe821c5cfbac8d6a12782e7a36b312b9ee7d41deec2a10a", - "size": "91219" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-i386-apple-darwin16.1.0.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-i386-apple-darwin16.1.0.tar.gz", - "checksum": "SHA-256:581ecc16021de36638ae14e9e064ffb4a1d532a11502f4252da8bcdf5ce1d649", - "size": "39150" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:1347eec67f5b90b785abdf6c8a8aa59129d0c016de7ff9b5ac1690378eacca3c", - "size": "37798" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-i486-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-i486-linux-gnu.tar.gz", - "checksum": "SHA-256:4c7492f876b8269aa9d8bcaad3aeda31acf1a0292383093b6d9f5f1d23fdafc3", - "size": "37374" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.8-48-gb176eee-arm-linux-gnueabihf.tar.gz", - "archiveFileName": "bossac-1.8-48-gb176eee-arm-linux-gnueabihf.tar.gz", - "checksum": "SHA-256:2001e4a592f3aefd22f213b1ddd6f5d8d5e74bd04080cf1b97c24cbaa81b10ed", - "size": "34825" - } - ] - }, - { - "name": "bossac", - "version": "1.9.1-arduino1", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-windows.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-windows.tar.gz", - "checksum": "SHA-256:fe2d6ef78ca711c78e104e258357ed06b09e95e9356dc72d8d2c9f6670af4b7a", - "size": "1260118" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-osx.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-osx.tar.gz", - "checksum": "SHA-256:c356632f98d5bae9b4f5d3ad823a5ee89b23078c2b835e8ac39a208f4855b0e6", - "size": "47835" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-linux64.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-linux64.tar.gz", - "checksum": "SHA-256:d3d324a3503a8db825c01f3b38519e4d4824c4d0e42cb399a16c1e074f9a9a86", - "size": "399453" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-linux32.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-linux32.tar.gz", - "checksum": "SHA-256:eec622b8b5a8642af94ec23febfe14c928edd734f144db73b146bf6708d2057f", - "size": "384792" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-linuxarm.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-linuxarm.tar.gz", - "checksum": "SHA-256:b42061d2fa2dbd6910d0d295e024f2cff7bb44f3e2ecc0bc2fe71a1f31b0ecba", - "size": "361799" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino1-linuxaarch64.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino1-linuxaarch64.tar.gz", - "checksum": "SHA-256:b271013841e1e25ee55f241e8c50a56ed775d3b322844e1e3099231ba17f3868", - "size": "442657" - } - ] - }, - { - "name": "bossac", - "version": "1.9.1-arduino2", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-windows.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-windows.tar.gz", - "checksum": "SHA-256:5c994d04354f0db8e4bea136f49866d2ba537f0af74b2e78026f2d4fc75e3e39", - "size": "1260628" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-osx.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-osx.tar.gz", - "checksum": "SHA-256:b7732129364a378676604db6579c9b8dab50dd965fb50d7a3afff1839c97ff80", - "size": "47870" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-linux64.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-linux64.tar.gz", - "checksum": "SHA-256:9eb549874391521999cee13dc823a2cfc8866b8246945339a281808d99c72d2c", - "size": "399532" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-linux32.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-linux32.tar.gz", - "checksum": "SHA-256:10d69f53f169f25afee2dd583dfd9dc803c10543e6c5260d106725cb0d174900", - "size": "384951" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-linuxarm.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-linuxarm.tar.gz", - "checksum": "SHA-256:c9539d161d23231b5beb1d09a71829744216c7f5bc2857a491999c3e567f5b19", - "size": "361915" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/bossac-1.9.1-arduino2-linuxaarch64.tar.gz", - "archiveFileName": "bossac-1.9.1-arduino2-linuxaarch64.tar.gz", - "checksum": "SHA-256:c167fa0ea223966f4d21f5592da3888bcbfbae385be6c5c4e41f8abff35f5cb1", - "size": "442853" - } - ] - }, - { - "name": "openocd", - "version": "0.9.0-arduino", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-dev-arduino-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:a84e7c4cba853f2c937d77286f8a0ca317447d3873e51cbd2a2d41424e044a18", - "size": "1402283" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-i686-pc-cygwin.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-arduino-i686-pc-cygwin.tar.bz2", - "checksum": "SHA-256:5310bdd3730168a33b09b68558e908ca8b2fec25620c488f50a5fb35d0d1effd", - "size": "2360705" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-x86_64-apple-darwin14.3.0.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-arduino-x86_64-apple-darwin14.3.0.tar.bz2", - "checksum": "SHA-256:ef90769c07b8018cec3a5054e690ac6c196e03720e102ac5038c3f9da4e44782", - "size": "2275101" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-x86_64-linux-gnu.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-arduino-x86_64-linux-gnu.tar.bz2", - "checksum": "SHA-256:c350409f7badf213dfcc516ea34289461ad92d87806e8e33945508a2c6b2c0b3", - "size": "1210796" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-i486-linux-gnu.tar.bz2", - "archiveFileName": "OpenOCD-0.9.0-arduino-i486-linux-gnu.tar.bz2", - "checksum": "SHA-256:4c9793dfd7822b0fc959d039e5ecabfa89092ee2911abfdc7b5905deb171499a", - "size": "1129654" - } - ] - }, - { - "name": "openocd", - "version": "0.9.0-arduino5-static", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino5-static-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:cef48c1448664612dd25168f0a56962aec4ce2f1d7c06dafd86a1b606dc8ae20", - "size": "1319000" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-i686-w64-mingw32.zip", - "archiveFileName": "openocd-0.9.0-arduino5-static-i686-w64-mingw32.zip", - "checksum": "SHA-256:54c70a0bfa1b0a3a592d6ee9ab532f9715e1dede2e7d46a3232abd72de274c5a", - "size": "1641209" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-x86_64-apple-darwin15.6.0.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino5-static-x86_64-apple-darwin15.6.0.tar.bz2", - "checksum": "SHA-256:14be5c5400e1a32c3d6a15f9c8d2f438634974ab263ff437b91b527e5b5d53a4", - "size": "1235752" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-x86_64-linux-gnu.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino5-static-x86_64-linux-gnu.tar.bz2", - "checksum": "SHA-256:8e378bdcd71c93a39818c16b49b91128c8028e3d9675551ba7eff39462391ba2", - "size": "1393855" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino5-static-i686-linux-gnu.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino5-static-i686-linux-gnu.tar.bz2", - "checksum": "SHA-256:8e0787f54e204fe6e9071b2b7edf8a5e695492696f1182d447647fe5c0bd55bd", - "size": "1341739" - } - ] - }, - { - "name": "openocd", - "version": "0.9.0-arduino6-static", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-arm-linux-gnueabihf.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino6-static-arm-linux-gnueabihf.tar.bz2", - "checksum": "SHA-256:5d596c90510f80d66f64a3615d74063a6a61f07b79be475592a3c76bf0deb3ca", - "size": "1319020" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-i686-w64-mingw32.zip", - "archiveFileName": "openocd-0.9.0-arduino6-static-i686-w64-mingw32.zip", - "checksum": "SHA-256:dde6c8cd42c179e819eeebee1d09829b0768ecb89b75fb10e1f053c1c65f9cf1", - "size": "1641514" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-x86_64-apple-darwin15.6.0.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino6-static-x86_64-apple-darwin15.6.0.tar.bz2", - "checksum": "SHA-256:00cd65339bc981ff0d4ab4876df8f89b1e60e476441fabca31d5fc2968bad9be", - "size": "1222523" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-x86_64-linux-gnu.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino6-static-x86_64-linux-gnu.tar.bz2", - "checksum": "SHA-256:d2f58bbd0661b755fdb8a307d197f119d838b066f5510b25ee766e47d1774543", - "size": "1394293" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/openocd-0.9.0-arduino6-static-i686-linux-gnu.tar.bz2", - "archiveFileName": "openocd-0.9.0-arduino6-static-i686-linux-gnu.tar.bz2", - "checksum": "SHA-256:88d948c2062c73c0c93e649e099aaac4b009018cff365f44cfc5b47907043dc9", - "size": "1340444" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino7", - "systems": [ - { - "size": "1638575", - "checksum": "SHA-256:f8e0d783e80a3d5f75ee82e9542315871d46e1e283a97447735f1cbcd8986b06", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino7-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1580739", - "checksum": "SHA-256:d47d728a9a8d98f28dc22e31d7127ced9de0d5e268292bf935e050ef1d2bdfd0", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino7-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1498970", - "checksum": "SHA-256:1e539a587a0c54a551ce0dc542af10a2520b1c93bbfe2ca4ebaef4c83411df1a", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino7-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1701581", - "checksum": "SHA-256:91d418bd309ec1e98795c622cd25c936aa537c0b3828fa5bcb191389378a1b27", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino7-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "1626347", - "checksum": "SHA-256:08a18f39d72a5626383503053a30a5da89eed7fdccb6f514b20b77403eb1b2b4", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino7-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2016965", - "checksum": "SHA-256:f251aec5471296e18aa540c3078d66475357a76a77c16c06a2d9345f4e12b3d5", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino7-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino7-static-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino8", - "systems": [ - { - "size": "1714346", - "checksum": "SHA-256:86c4ea3086b4a1475fd8a1e1daf4585748be093dad4160e816b1bf2502501fb2", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino8-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1778371", - "checksum": "SHA-256:500cb112ee92092bbfce69649b90d0284752c5766f5aaf5c24dc754100788ef9", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino8-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1653652", - "checksum": "SHA-256:584b513ebbc4a645a68234d964ba56f042aaf7668d84ba47398a07a294516cc4", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino8-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1845547", - "checksum": "SHA-256:455d4123146bf6b4b095de86d3340fd01e39bba9c70b2f0bb8e979ac4dddac39", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino8-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "1781892", - "checksum": "SHA-256:5b44889984daefa966b8251edb98445169107ca32f974ca598d4c59e7d2c8901", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino8-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2190397", - "checksum": "SHA-256:35a92f32f2762ef9405d2c684ec7bea2e70c01068f380251aecd9290f5bd5b24", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino8-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino8-static-i686-w64-mingw32.zip" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino9", - "systems": [ - { - "size": "1714657", - "checksum": "SHA-256:b814b16b52cef21eacf456cc7a89d7b5d4cb1385bfb8fb82963b7d8151824d93", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino9-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1778177", - "checksum": "SHA-256:f0443e771f5e3a779949498d3c9bfffd1dd27cdf0ad7136a2db5e80447a7175a", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino9-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1782958", - "checksum": "SHA-256:a22872918df899cb808f9286141d42438ae5611156c143cfb692069f52a2bddd", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino9-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2190484", - "checksum": "SHA-256:f53f9a2b7f48a2ebc00ea9196bf559d15987d3779bcea4118ebec8925da5a1f6", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino9-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-i686-w64-mingw32.zip" - }, - { - "size": "1655311", - "checksum": "SHA-256:6d47f97919f317bb6e5f1f903127604271d66d149f4625f29b8e0eb5f6c94c64", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino9-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1844365", - "checksum": "SHA-256:f624552b5ba56aa78d0c1a0e5d18cf2b5694db2ed44080968e22aa1af8f23c1b", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino9-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino9-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino12", - "systems": [ - { - "size": "1778706", - "checksum": "SHA-256:86e15186a44b87c00f5ddd9c05849d2ec107783dd18a5ac984ce2a71e34084ed", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino12-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1855234", - "checksum": "SHA-256:5c6ca6189f61894ee77b29bc342f96cd14e4d7627fabeb2a8d2e2c534316cc38", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino12-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1844359", - "checksum": "SHA-256:4938742d3fec62941187666b8ded44d8f6c7a404920ff49d97fca484b9fd08af", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino12-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2276602", - "checksum": "SHA-256:1e23c0f1f809725db3e1f8d1e1f460a37fb7b2cf95e93c6e328e527501ab084c", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino12-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-i686-w64-mingw32.zip" - }, - { - "size": "1723600", - "checksum": "SHA-256:b40d135449401870302bec073326d6f1df79da38d9dd21326314a5a90189a06e", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino12-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1918845", - "checksum": "SHA-256:bc48be10916f69f3a4b050f04babc14ee99dad1fc5da55ce606077991edab1d0", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino12-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino12-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino13", - "systems": [ - { - "size": "1820630", - "checksum": "SHA-256:47ae7a1a7961ac9daef001b011505b38777baac3c02dd7e673f62601df841427", - "host": "aarch64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino13-static-aarch64-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-aarch64-linux-gnu.tar.bz2" - }, - { - "size": "1896478", - "checksum": "SHA-256:4dd38b701019ad2fbb58173a3bc6c58effd39501a4a8266256dfe169e7516655", - "host": "arm-linux-gnueabihf", - "archiveFileName": "openocd-0.10.0-arduino13-static-arm-linux-gnueabihf.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-arm-linux-gnueabihf.tar.bz2" - }, - { - "size": "1883854", - "checksum": "SHA-256:788093504b25d2b9b772657215254ba178ed37773364ce240de68281efe40bd5", - "host": "i686-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino13-static-i686-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-i686-ubuntu12.04-linux-gnu.tar.bz2" - }, - { - "size": "2334654", - "checksum": "SHA-256:2f3b87c644569f47780b16b071cd0929a64a8899ec769f4ca7480d20d5503365", - "host": "i686-mingw32", - "archiveFileName": "openocd-0.10.0-arduino13-static-i686-w64-mingw32.zip", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-i686-w64-mingw32.zip" - }, - { - "size": "1767137", - "checksum": "SHA-256:0f3f6e5e03355ffbbc84c4b4750e63c9315b7638c56d63df1b7795968208e6ba", - "host": "i386-apple-darwin11", - "archiveFileName": "openocd-0.10.0-arduino13-static-x86_64-apple-darwin13.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-x86_64-apple-darwin13.tar.bz2" - }, - { - "size": "1955043", - "checksum": "SHA-256:e4b2ffbc9a29be21c32c6921c2e7c0ee39c664c4faca28a5f839c1df32d3bd24", - "host": "x86_64-linux-gnu", - "archiveFileName": "openocd-0.10.0-arduino13-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2", - "url": "http://downloads.arduino.cc/tools/openocd-0.10.0-arduino13-static-x86_64-ubuntu12.04-linux-gnu.tar.bz2" - } - ] - }, - { - "name": "CMSIS", - "version": "4.0.0-atmel", - "systems": [ - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", - "archiveFileName": "CMSIS-4.0.0.tar.bz2", - "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", - "size": "17642623" - } - ] - }, - { - "name": "CMSIS", - "version": "4.5.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - }, - { - "host": "all", - "url": "http://downloads.arduino.cc/CMSIS-4.5.0.tar.bz2", - "archiveFileName": "CMSIS-4.5.0.tar.bz2", - "checksum": "SHA-256:cd8f7eae9fc7c8b4a1b5e40b89b9666d33953b47d3d2eb81844f5af729fa224d", - "size": "31525196" - } - ] - }, - { - "name": "CMSIS-Atmel", - "version": "1.0.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - }, - { - "host": "all", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.0.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.0.0.tar.bz2", - "checksum": "SHA-256:b3c954570a2f8d9821c372e0864f5f0b86cfbeab8114ce95821f5c49758c7256", - "size": "1281654" - } - ] - }, - { - "name": "CMSIS-Atmel", - "version": "1.1.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "i686-pc-linux-gnu", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - }, - { - "host": "all", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.1.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.1.0.tar.bz2", - "checksum": "SHA-256:3ea5ec0451f42dc2b97f869b027a9cf696241cfc927cfc48d74ccc7b396ba41b", - "size": "1659108" - } - ] - }, - { - "name": "CMSIS-Atmel", - "version": "1.2.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "x86_64-apple-darwin", - "url": "http://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "arm-linux-gnueabihf", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "aarch64-linux-gnu", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - }, - { - "host": "all", - "url": "https://downloads.arduino.cc/CMSIS-Atmel-1.2.0.tar.bz2", - "archiveFileName": "CMSIS-Atmel-1.2.0.tar.bz2", - "checksum": "SHA-256:5e02670be7e36be9691d059bee0b04ee8b249404687531f33893922d116b19a5", - "size": "2221805" - } - ] - }, - { - "name": "dfu-util", - "version": "0.9.0-arduino1", - "systems": [ - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-osx.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-osx.tar.bz2", - "size": "68361", - "checksum": "SHA-256:ea9216c627b7aa2d3a9bffab97df937e3c580cce66753c428dc697c854a35271" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-arm.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-arm.tar.bz2", - "size": "194826", - "checksum": "SHA-256:480637bf578e74b19753666a049f267d8ebcd9dfc8660d48f246bb76d5b806f9" - }, - { - "host": "x86_64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-linux64.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-linux64.tar.bz2", - "size": "66230", - "checksum": "SHA-256:e8a4d5477ab8c44d8528f35bc7dfafa5f3f04dace513906514aea31adc6fd3ba" - }, - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-linux32.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-linux32.tar.bz2", - "size": "62608", - "checksum": "SHA-256:17d69213914da04dadd6464d8adbcd3581dd930eb666b8f3336ab5383ce2127f" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino1-windows.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino1-windows.tar.bz2", - "size": "377537", - "checksum": "SHA-256:29be01b298348be8b822391be7147b71a969d47bd5457d5b24cfa5981dbce78e" - } - ] - }, - { - "name": "dfu-util", - "version": "0.9.0-arduino2", - "systems": [ - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-osx.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-osx.tar.bz2", - "size": "65137", - "checksum": "SHA-256:00e87178b81d5721f334d4b688267f19f36eed1d9710a912c9e44bb1a748f766" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-arm.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-arm.tar.bz2", - "size": "198568", - "checksum": "SHA-256:b364a8fe1de697d7dd6c4135d341ddff6dbda7e33c707321c7dceab85dfc560b" - }, - { - "host": "x86_64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-linux64.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-linux64.tar.bz2", - "size": "70996", - "checksum": "SHA-256:628e01772007e622dff6af82220c27bcdf1d0726ba886bd2b36807601f66e4e8" - }, - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-linux32.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-linux32.tar.bz2", - "size": "71002", - "checksum": "SHA-256:7a6cec3d89c65119c52b6109cd92a9ec84bdf8a9d12083444d2c89e7ac16c84b" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/dfu-util-0.9.0-arduino2-windows.tar.bz2", - "archiveFileName": "dfu-util-0.9.0-arduino2-windows.tar.bz2", - "size": "394993", - "checksum": "SHA-256:8ec0e66acdc41941b6e25545f8c12e7eb7ba01a0bafae0b4ab4c99a70deb2ea5" - } - ] - }, - { - "name": "windows-drivers", - "version": "1.6.9", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/drivers-arduino-windows-1.6.9.zip", - "archiveFileName": "drivers-arduino-windows-1.6.9.zip", - "checksum": "SHA-256:10d456ab18d164d42545255db8bef4ac9e1bf660cc89acb7a0980b5a486654ac", - "size": "7071714" - } - ] - }, - { - "name": "windows-drivers", - "version": "1.8.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/drivers-arduino-windows-1.8.0.zip", - "archiveFileName": "drivers-arduino-windows-1.8.0.zip", - "checksum": "SHA-256:60614b326ad6860ed0cb99eb4cb2cb69f9ba6ba3784396d5441fe3f99004f8ec", - "size": "16302148" - } - ] - }, - { - "name": "dfu-util", - "version": "0.8.0-stm32-arduino1", - "systems": [ - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-darwin_amd64.tar.bz2", - "checksum": "SHA-256:bb146803a4152ce2647d72b2cde68ff95eb3017c2460f24c4db922adac1fbd12", - "host": "i386-apple-darwin11", - "size": "68381", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-darwin_amd64.tar.bz2" - }, - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-linux_arm.tar.bz2", - "checksum": "SHA-256:607e6b0f2d2787ed7837f26da30b100131e3db207f84b8aca94a377db6e9ae50", - "host": "arm-linux-gnueabihf", - "size": "213760", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-linux_arm.tar.bz2" - }, - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-stm32-linux_amd64.tar.bz2", - "checksum": "SHA-256:e44287494ebd22f59fc79766a94e20306e59c6c799f5bb1cddeed80db95000d9", - "host": "x86_64-linux-gnu", - "size": "68575", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-linux_amd64.tar.bz2" - }, - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-linux_386.tar.bz2", - "checksum": "SHA-256:58131e35ad5d7053b281bc6176face7b117c5ad63331e43c6801f8ccd57f59a4", - "host": "i686-linux-gnu", - "size": "69097", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-linux_386.tar.bz2" - }, - { - "archiveFileName": "dfu-util-0.8.0-stm32-arduino1-windows_386.tar.bz2", - "checksum": "SHA-256:25c2f84e1acf1f10fd2aa1afced441366d4545fd41eae56e64f0b990b4ce9f55", - "host": "i686-mingw32", - "size": "159753", - "url": "http://downloads.arduino.cc/arduino.org/dfu-util-0.8.0-stm32-arduino1-windows_386.tar.bz2" - } - ] - }, - { - "name": "arduinoSTM32load", - "version": "2.0.0", - "systems": [ - { - "archiveFileName": "arduinoSTM32load-2.0.0-darwin_amd64.tar.bz2", - "checksum": "SHA-256:92fb9714091850febaa9d159501cbca5ba68d03020e5e2d4eff596154040bfaa", - "host": "i386-apple-darwin11", - "size": "807514", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-darwin_amd64.tar.bz2" - }, - { - "archiveFileName": "arduinoSTM32load-2.0.0-linux_arm.tar.bz2", - "checksum": "SHA-256:fc0d8058b57bda849e1ffc849f83f54b0b85f97954176db317da1c745c174e08", - "host": "arm-linux-gnueabihf", - "size": "809480", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-linux_arm.tar.bz2" - }, - { - "archiveFileName": "arduinoSTM32load-2.0.0-linux_amd64.tar.bz2", - "checksum": "SHA-256:0ed5cf1ea05fe6c33567817c54daf9c296d058a3607c428e0b0bd9aad89b9809", - "host": "x86_64-linux-gnu", - "size": "818885", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-linux_amd64.tar.bz2" - }, - { - "archiveFileName": "arduinoSTM32load-2.0.0-linux_386.tar.bz2", - "checksum": "SHA-256:fad50abaaca034e6d647d09b042291b761982aabfd42b6156411c86e4f873ca7", - "host": "i686-linux-gnu", - "size": "814283", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-linux_386.tar.bz2" - }, - { - "archiveFileName": "arduinoSTM32load-2.0.0-windows_386.tar.bz2", - "checksum": "SHA-256:79467c0cde4b88c4884acb09445a2186af4e41f901eee56e99b5d89b7065d085", - "host": "i686-mingw32", - "size": "786335", - "url": "http://downloads.arduino.cc/arduino.org/arduinoSTM32load-2.0.0-windows_386.tar.bz2" - } - ] - }, - { - "name": "openocd", - "version": "0.10.0-arduino1-static", - "systems": [ - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-osx-static.tar.gz", - "archiveFileName": "OpenOCD-0.10.0-nrf52-osx-static.tar.gz", - "size": "1529841", - "checksum": "SHA-256:46bd02c1d42c5d94c4936e4d4a0ff29697b621840be9a6f882e316203122049d" - }, - { - "host": "x86_64-linux-gnu", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-linux64-static.tar.gz", - "archiveFileName": "OpenOCD-0.10.0-nrf52-linux64-static.tar.gz", - "size": "1777984", - "checksum": "SHA-256:1c9ae77930dd7377d8c13f84abe7307b67fdcd6da74cc1ce269a79e138e7a00a" - }, - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-linux32-static.tar.gz", - "archiveFileName": "OpenOCD-0.10.0-nrf52-linux32-static.tar.gz", - "size": "1713236", - "checksum": "SHA-256:777371df34828810e1bea623b0f7c98f28fedf30fd3bc8e7d8f0a5745fb4e258" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-win32-static.zip", - "archiveFileName": "OpenOCD-0.10.0-nrf52-win32-static.zip", - "size": "1773642", - "checksum": "SHA-256:9371b25d000bd589c058a5bf10720617adb91fd8b8a21d2e887cf45eaa2df93c" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/arduino.org/OpenOCD-0.10.0-nrf52-arm-static.tar.gz", - "archiveFileName": "OpenOCD-0.10.0-nrf52-arm-static.tar.gz", - "size": "1526863", - "checksum": "SHA-256:b5172422077f87ff05b76ff40034979678c9c640e9d08cee15ce55e40dd8c929" - } - ] - }, - { - "name": "fwupdater", - "version": "0.0.6", - "systems": [ - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-linux32.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-linux32.tar.bz2", - "checksum": "SHA-256:8c4e562a8e6fa3d916c4bf6bb24d7eec0df013d8cc45dff187e5c63086a92c11", - "size": "7334059" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-linux64.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-linux64.tar.bz2", - "checksum": "SHA-256:0e9132518acfe66e5a4e17ba4b6dd0c89dbd90cc0d9b4a54e007ac24d51fd36a", - "size": "7383853" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-windows.zip", - "archiveFileName": "FirmwareUpdater-0.0.6-windows.zip", - "checksum": "SHA-256:33a92661f43b8d025ca5f57be1116537ed153703067d9c86297619d58988feff", - "size": "7580663" - }, - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-osx.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-osx.tar.bz2", - "checksum": "SHA-256:3584d7581ff2469bdfde9de6f57d87b2a0370de5c902e9df687b7322a5405018", - "size": "7368819" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-linuxarm.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-linuxarm.tar.bz2", - "checksum": "SHA-256:276f027e552eb620064b09591c7a7c79927c93c017428436c81f71bad666803c", - "size": "7180391" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.6-linuxarm64.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.6-linuxarm64.tar.bz2", - "checksum": "SHA-256:d6a2e72b4869c031b434380da6e6a8a4a6269f8ee6312a3d23e85ea133a37ae9", - "size": "7149332" - } - ] - }, - { - "name": "fwupdater", - "version": "0.0.7", - "systems": [ - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-linux32.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-linux32.tar.bz2", - "checksum": "SHA-256:05e26d5df253246cf68ba8a8f5f2de1032ac6f4d7af5310b8080ef6f54030fb4", - "size": "13077590" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-linux64.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-linux64.tar.bz2", - "checksum": "SHA-256:e8a36b7ae19060748b8b0540c9c0c9341d8d4c7a630441922a030223f767258d", - "size": "13134534" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-windows.zip", - "archiveFileName": "FirmwareUpdater-0.0.7-windows.zip", - "checksum": "SHA-256:e881dd8a4bbb35f7271157e8dd226c2e032ac1115106170b0aaf9c969817df86", - "size": "13337495" - }, - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-osx.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-osx.tar.bz2", - "checksum": "SHA-256:647ad713d68a1531ba56c88e5b3db9516cc0072ca1d401de5142d85ffcfd931a", - "size": "13064291" - }, - { - "host": "arm-linux-gnueabihf", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-linuxarm.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-linuxarm.tar.bz2", - "checksum": "SHA-256:b6e09c07e816a35935585db07e07437023d44e66d1d2f05861708ea6ceff7629", - "size": "12929770" - }, - { - "host": "aarch64-linux-gnu", - "url": "http://downloads.arduino.cc/tools/FirmwareUpdater-0.0.7-linuxarm64.tar.bz2", - "archiveFileName": "FirmwareUpdater-0.0.7-linuxarm64.tar.bz2", - "checksum": "SHA-256:620f81148b13f70cdecbe59bbcbf605c7e0aae85f9cbee8ec48202f6018f23ce", - "size": "12897349" - } - ] - }, - { - "name": "nrf5x-cl-tools", - "version": "9.3.1", - "systems": [ - { - "host": "i386-apple-darwin11", - "url": "http://downloads.arduino.cc/arduino.org/nRF5x-Command-Line-Tools_9_3_1_OSX.tar.bz2", - "archiveFileName": "nRF5x-Command-Line-Tools_9_3_1_OSX.tar.bz2", - "size": "341674", - "checksum": "SHA-256:41e4580271b39459a7ef1b078d11ee08d8f4f23fab7ff03f3fe8c3bc986a0ed4" - }, - { - "host": "x86_64-linux-gnu", - "url": "http://downloads.arduino.cc/arduino.org/nRF5x-Command-Line-Tools_9_3_1_Linux-x86_64.tar.bz2", - "archiveFileName": "nRF5x-Command-Line-Tools_9_3_1_Linux-x86_64.tar.bz2", - "size": "167414", - "checksum": "SHA-256:4074fffe678d60968006a72edd182c6506b264472c9957bc3eaa39336bfcf972" - }, - { - "host": "i686-linux-gnu", - "url": "http://downloads.arduino.cc/arduino.org/nRF5x-Command-Line-Tools_9_3_1_Linux-i386.tar.bz2", - "archiveFileName": "nRF5x-Command-Line-Tools_9_3_1_Linux-i386.tar.bz2", - "size": "155680", - "checksum": "SHA-256:e880059b303e5aad3a8b34c83dfd8c22beee77ae2074fbd37511e3baa91464a5" - }, - { - "host": "i686-mingw32", - "url": "http://downloads.arduino.cc/arduino.org/nRF5x-Command-Line-Tools_9_3_1_Win32.tar.bz2", - "archiveFileName": "nRF5x-Command-Line-Tools_9_3_1_Win32.tar.bz2", - "size": "812257", - "checksum": "SHA-256:a4467350e39314690cec2e96b80e7e3cab463c84eff9b81593ad57754d76ee00" - } - ] - } - ] - } - ] -} diff --git a/arduino/errors.go b/commands/cmderrors/cmderrors.go similarity index 65% rename from arduino/errors.go rename to commands/cmderrors/cmderrors.go index c9f81e8f270..bcc33bc3a8f 100644 --- a/arduino/errors.go +++ b/commands/cmderrors/cmderrors.go @@ -13,21 +13,19 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package arduino +package cmderrors import ( "fmt" "strings" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) -var tr = i18n.Tr - func composeErrorMsg(msg string, cause error) string { if cause == nil { return msg @@ -37,19 +35,19 @@ func composeErrorMsg(msg string, cause error) string { // CommandError is an error that may be converted into a gRPC status. type CommandError interface { - // ToRPCStatus convertes the error into a *status.Status - ToRPCStatus() *status.Status + // GRPCStatus convertes the error into a *status.Status + GRPCStatus() *status.Status } // InvalidInstanceError is returned if the instance used in the command is not valid. type InvalidInstanceError struct{} func (e *InvalidInstanceError) Error() string { - return tr("Invalid instance") + return i18n.Tr("Invalid instance") } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidInstanceError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidInstanceError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -59,11 +57,11 @@ type InvalidFQBNError struct { } func (e *InvalidFQBNError) Error() string { - return composeErrorMsg(tr("Invalid FQBN"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid FQBN"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidFQBNError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidFQBNError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -77,11 +75,11 @@ type InvalidURLError struct { } func (e *InvalidURLError) Error() string { - return composeErrorMsg(tr("Invalid URL"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid URL"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidURLError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidURLError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -95,11 +93,11 @@ type InvalidLibraryError struct { } func (e *InvalidLibraryError) Error() string { - return composeErrorMsg(tr("Invalid library"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid library"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidLibraryError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidLibraryError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -113,11 +111,11 @@ type InvalidVersionError struct { } func (e *InvalidVersionError) Error() string { - return composeErrorMsg(tr("Invalid version"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid version"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidVersionError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidVersionError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -132,15 +130,15 @@ type NoBoardsDetectedError struct { } func (e *NoBoardsDetectedError) Error() string { - return tr( + return i18n.Tr( "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be identified", - e.Port.Address, - e.Port.Protocol, + e.Port.GetAddress(), + e.Port.GetProtocol(), ) } -// ToRPCStatus converts the error into a *status.Status -func (e *NoBoardsDetectedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *NoBoardsDetectedError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -152,15 +150,15 @@ type MultipleBoardsDetectedError struct { } func (e *MultipleBoardsDetectedError) Error() string { - return tr( + return i18n.Tr( "Please specify an FQBN. Multiple possible boards detected on port %[1]s with protocol %[2]s", - e.Port.Address, - e.Port.Protocol, + e.Port.GetAddress(), + e.Port.GetProtocol(), ) } -// ToRPCStatus converts the error into a *status.Status -func (e *MultipleBoardsDetectedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MultipleBoardsDetectedError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -168,11 +166,11 @@ func (e *MultipleBoardsDetectedError) ToRPCStatus() *status.Status { type MissingFQBNError struct{} func (e *MissingFQBNError) Error() string { - return tr("Missing FQBN (Fully Qualified Board Name)") + return i18n.Tr("Missing FQBN (Fully Qualified Board Name)") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingFQBNError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingFQBNError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -182,15 +180,15 @@ type UnknownFQBNError struct { } func (e *UnknownFQBNError) Error() string { - return composeErrorMsg(tr("Unknown FQBN"), e.Cause) + return composeErrorMsg(i18n.Tr("Unknown FQBN"), e.Cause) } func (e *UnknownFQBNError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *UnknownFQBNError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *UnknownFQBNError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -201,15 +199,15 @@ type UnknownProfileError struct { } func (e *UnknownProfileError) Error() string { - return composeErrorMsg(tr("Profile '%s' not found", e.Profile), e.Cause) + return composeErrorMsg(i18n.Tr("Profile '%s' not found", e.Profile), e.Cause) } func (e *UnknownProfileError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *UnknownProfileError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *UnknownProfileError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -219,15 +217,15 @@ type InvalidProfileError struct { } func (e *InvalidProfileError) Error() string { - return composeErrorMsg(tr("Invalid profile"), e.Cause) + return composeErrorMsg(i18n.Tr("Invalid profile"), e.Cause) } func (e *InvalidProfileError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidProfileError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidProfileError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -235,11 +233,11 @@ func (e *InvalidProfileError) ToRPCStatus() *status.Status { type MissingPortAddressError struct{} func (e *MissingPortAddressError) Error() string { - return tr("Missing port address") + return i18n.Tr("Missing port address") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingPortAddressError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingPortAddressError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -247,11 +245,11 @@ func (e *MissingPortAddressError) ToRPCStatus() *status.Status { type MissingPortProtocolError struct{} func (e *MissingPortProtocolError) Error() string { - return tr("Missing port protocol") + return i18n.Tr("Missing port protocol") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingPortProtocolError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingPortProtocolError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -259,11 +257,11 @@ func (e *MissingPortProtocolError) ToRPCStatus() *status.Status { type MissingPortError struct{} func (e *MissingPortError) Error() string { - return tr("Missing port") + return i18n.Tr("Missing port") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingPortError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingPortError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -273,11 +271,11 @@ type NoMonitorAvailableForProtocolError struct { } func (e *NoMonitorAvailableForProtocolError) Error() string { - return tr("No monitor available for the port protocol %s", e.Protocol) + return i18n.Tr("No monitor available for the port protocol %s", e.Protocol) } -// ToRPCStatus converts the error into a *status.Status -func (e *NoMonitorAvailableForProtocolError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *NoMonitorAvailableForProtocolError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -285,23 +283,24 @@ func (e *NoMonitorAvailableForProtocolError) ToRPCStatus() *status.Status { type MissingProgrammerError struct{} func (e *MissingProgrammerError) Error() string { - return tr("Missing programmer") + return i18n.Tr("Missing programmer") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingProgrammerError) ToRPCStatus() *status.Status { - return status.New(codes.InvalidArgument, e.Error()) +// GRPCStatus converts the error into a *status.Status +func (e *MissingProgrammerError) GRPCStatus() *status.Status { + s, _ := status.New(codes.InvalidArgument, e.Error()).WithDetails(&rpc.MissingProgrammerError{}) + return s } // ProgrammerRequiredForUploadError is returned when the upload can be done only using a programmer type ProgrammerRequiredForUploadError struct{} func (e *ProgrammerRequiredForUploadError) Error() string { - return tr("A programmer is required to upload") + return i18n.Tr("A programmer is required to upload") } -// ToRPCStatus converts the error into a *status.Status -func (e *ProgrammerRequiredForUploadError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *ProgrammerRequiredForUploadError) GRPCStatus() *status.Status { st, _ := status. New(codes.InvalidArgument, e.Error()). WithDetails(&rpc.ProgrammerIsRequiredForUploadError{}) @@ -319,8 +318,8 @@ func (ife *InitFailedError) Error() string { return ife.Cause.Error() } -// ToRPCStatus converts the error into a *status.Status -func (ife *InitFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (ife *InitFailedError) GRPCStatus() *status.Status { st, _ := status. New(ife.Code, ife.Cause.Error()). WithDetails(&rpc.FailedInstanceInitError{ @@ -337,15 +336,15 @@ type ProgrammerNotFoundError struct { } func (e *ProgrammerNotFoundError) Error() string { - return composeErrorMsg(tr("Programmer '%s' not found", e.Programmer), e.Cause) + return composeErrorMsg(i18n.Tr("Programmer '%s' not found", e.Programmer), e.Cause) } func (e *ProgrammerNotFoundError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *ProgrammerNotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *ProgrammerNotFoundError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -356,15 +355,15 @@ type MonitorNotFoundError struct { } func (e *MonitorNotFoundError) Error() string { - return composeErrorMsg(tr("Monitor '%s' not found", e.Monitor), e.Cause) + return composeErrorMsg(i18n.Tr("Monitor '%s' not found", e.Monitor), e.Cause) } func (e *MonitorNotFoundError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *MonitorNotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MonitorNotFoundError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -375,11 +374,11 @@ type InvalidPlatformPropertyError struct { } func (e *InvalidPlatformPropertyError) Error() string { - return tr("Invalid '%[1]s' property: %[2]s", e.Property, e.Value) + return i18n.Tr("Invalid '%[1]s' property: %[2]s", e.Property, e.Value) } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidPlatformPropertyError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidPlatformPropertyError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -389,11 +388,11 @@ type MissingPlatformPropertyError struct { } func (e *MissingPlatformPropertyError) Error() string { - return tr("Property '%s' is undefined", e.Property) + return i18n.Tr("Property '%s' is undefined", e.Property) } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingPlatformPropertyError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingPlatformPropertyError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -404,11 +403,11 @@ type PlatformNotFoundError struct { } func (e *PlatformNotFoundError) Error() string { - return composeErrorMsg(tr("Platform '%s' not found", e.Platform), e.Cause) + return composeErrorMsg(i18n.Tr("Platform '%s' not found", e.Platform), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *PlatformNotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *PlatformNotFoundError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -422,11 +421,11 @@ type PlatformLoadingError struct { } func (e *PlatformLoadingError) Error() string { - return composeErrorMsg(tr("Error loading hardware platform"), e.Cause) + return composeErrorMsg(i18n.Tr("Error loading hardware platform"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *PlatformLoadingError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *PlatformLoadingError) GRPCStatus() *status.Status { s, _ := status.New(codes.FailedPrecondition, e.Error()). WithDetails(&rpc.PlatformLoadingError{}) return s @@ -443,11 +442,11 @@ type LibraryNotFoundError struct { } func (e *LibraryNotFoundError) Error() string { - return composeErrorMsg(tr("Library '%s' not found", e.Library), e.Cause) + return composeErrorMsg(i18n.Tr("Library '%s' not found", e.Library), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *LibraryNotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *LibraryNotFoundError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -462,11 +461,11 @@ type LibraryDependenciesResolutionFailedError struct { } func (e *LibraryDependenciesResolutionFailedError) Error() string { - return composeErrorMsg(tr("No valid dependencies solution found"), e.Cause) + return composeErrorMsg(i18n.Tr("No valid dependencies solution found"), e.Cause) } -// ToRPCStatus converts the error into a *status.Status -func (e *LibraryDependenciesResolutionFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *LibraryDependenciesResolutionFailedError) GRPCStatus() *status.Status { return status.New(codes.FailedPrecondition, e.Error()) } @@ -480,11 +479,11 @@ type PlatformAlreadyAtTheLatestVersionError struct { } func (e *PlatformAlreadyAtTheLatestVersionError) Error() string { - return tr("Platform '%s' is already at the latest version", e.Platform) + return i18n.Tr("Platform '%s' is already at the latest version", e.Platform) } -// ToRPCStatus converts the error into a *status.Status -func (e *PlatformAlreadyAtTheLatestVersionError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *PlatformAlreadyAtTheLatestVersionError) GRPCStatus() *status.Status { st, _ := status. New(codes.AlreadyExists, e.Error()). WithDetails(&rpc.AlreadyAtLatestVersionError{}) @@ -495,11 +494,11 @@ func (e *PlatformAlreadyAtTheLatestVersionError) ToRPCStatus() *status.Status { type MissingSketchPathError struct{} func (e *MissingSketchPathError) Error() string { - return tr("Missing sketch path") + return i18n.Tr("Missing sketch path") } -// ToRPCStatus converts the error into a *status.Status -func (e *MissingSketchPathError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MissingSketchPathError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -509,7 +508,7 @@ type CantCreateSketchError struct { } func (e *CantCreateSketchError) Error() string { - return composeErrorMsg(tr("Can't create sketch"), e.Cause) + return composeErrorMsg(i18n.Tr("Can't create sketch"), e.Cause) } func (e *CantCreateSketchError) Unwrap() error { @@ -522,7 +521,7 @@ type CantUpdateSketchError struct { } func (e *CantUpdateSketchError) Error() string { - return composeErrorMsg(tr("Can't update sketch"), e.Cause) + return composeErrorMsg(i18n.Tr("Can't update sketch"), e.Cause) } func (e *CantUpdateSketchError) Unwrap() error { @@ -535,15 +534,15 @@ type CantOpenSketchError struct { } func (e *CantOpenSketchError) Error() string { - return composeErrorMsg(tr("Can't open sketch"), e.Cause) + return composeErrorMsg(i18n.Tr("Can't open sketch"), e.Cause) } func (e *CantOpenSketchError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *CantOpenSketchError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *CantOpenSketchError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -561,8 +560,8 @@ func (e *FailedInstallError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedInstallError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedInstallError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -572,15 +571,15 @@ type FailedLibraryInstallError struct { } func (e *FailedLibraryInstallError) Error() string { - return composeErrorMsg(tr("Library install failed"), e.Cause) + return composeErrorMsg(i18n.Tr("Library install failed"), e.Cause) } func (e *FailedLibraryInstallError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedLibraryInstallError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedLibraryInstallError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -598,8 +597,8 @@ func (e *FailedUninstallError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedUninstallError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedUninstallError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -617,8 +616,8 @@ func (e *FailedDownloadError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedDownloadError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedDownloadError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -636,8 +635,8 @@ func (e *FailedUploadError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedUploadError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedUploadError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -655,8 +654,8 @@ func (e *FailedDebugError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedDebugError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedDebugError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -666,15 +665,15 @@ type FailedMonitorError struct { } func (e *FailedMonitorError) Error() string { - return composeErrorMsg(tr("Port monitor error"), e.Cause) + return composeErrorMsg(i18n.Tr("Port monitor error"), e.Cause) } func (e *FailedMonitorError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *FailedMonitorError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *FailedMonitorError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -692,8 +691,8 @@ func (e *CompileFailedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *CompileFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *CompileFailedError) GRPCStatus() *status.Status { return status.New(codes.Internal, e.Error()) } @@ -711,8 +710,8 @@ func (e *InvalidArgumentError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *InvalidArgumentError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *InvalidArgumentError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -730,8 +729,8 @@ func (e *NotFoundError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *NotFoundError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *NotFoundError) GRPCStatus() *status.Status { return status.New(codes.NotFound, e.Error()) } @@ -749,8 +748,8 @@ func (e *PermissionDeniedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *PermissionDeniedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *PermissionDeniedError) GRPCStatus() *status.Status { return status.New(codes.PermissionDenied, e.Error()) } @@ -768,8 +767,8 @@ func (e *UnavailableError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *UnavailableError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *UnavailableError) GRPCStatus() *status.Status { return status.New(codes.Unavailable, e.Error()) } @@ -779,15 +778,15 @@ type TempDirCreationFailedError struct { } func (e *TempDirCreationFailedError) Error() string { - return composeErrorMsg(tr("Cannot create temp dir"), e.Cause) + return composeErrorMsg(i18n.Tr("Cannot create temp dir"), e.Cause) } func (e *TempDirCreationFailedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *TempDirCreationFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *TempDirCreationFailedError) GRPCStatus() *status.Status { return status.New(codes.Unavailable, e.Error()) } @@ -797,15 +796,15 @@ type TempFileCreationFailedError struct { } func (e *TempFileCreationFailedError) Error() string { - return composeErrorMsg(tr("Cannot create temp file"), e.Cause) + return composeErrorMsg(i18n.Tr("Cannot create temp file"), e.Cause) } func (e *TempFileCreationFailedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *TempFileCreationFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *TempFileCreationFailedError) GRPCStatus() *status.Status { return status.New(codes.Unavailable, e.Error()) } @@ -816,15 +815,15 @@ type SignatureVerificationFailedError struct { } func (e *SignatureVerificationFailedError) Error() string { - return composeErrorMsg(tr("'%s' has an invalid signature", e.File), e.Cause) + return composeErrorMsg(i18n.Tr("'%s' has an invalid signature", e.File), e.Cause) } func (e *SignatureVerificationFailedError) Unwrap() error { return e.Cause } -// ToRPCStatus converts the error into a *status.Status -func (e *SignatureVerificationFailedError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *SignatureVerificationFailedError) GRPCStatus() *status.Status { return status.New(codes.Unavailable, e.Error()) } @@ -837,12 +836,12 @@ type MultiplePlatformsError struct { } func (e *MultiplePlatformsError) Error() string { - return tr("Found %d platforms matching \"%s\": %s", + return i18n.Tr("Found %d platforms matching \"%s\": %s", len(e.Platforms), e.UserPlatform, strings.Join(e.Platforms, ", ")) } -// ToRPCStatus converts the error into a *status.Status -func (e *MultiplePlatformsError) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MultiplePlatformsError) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } @@ -856,7 +855,7 @@ type MultipleLibraryInstallDetected struct { } func (e *MultipleLibraryInstallDetected) Error() string { - res := tr("The library %s has multiple installations:", e.LibName) + "\n" + res := i18n.Tr("The library %s has multiple installations:", e.LibName) + "\n" for _, lib := range e.LibsDir { res += fmt.Sprintf("- %s\n", lib) } @@ -864,7 +863,23 @@ func (e *MultipleLibraryInstallDetected) Error() string { return res } -// ToRPCStatus converts the error into a *status.Status -func (e *MultipleLibraryInstallDetected) ToRPCStatus() *status.Status { +// GRPCStatus converts the error into a *status.Status +func (e *MultipleLibraryInstallDetected) GRPCStatus() *status.Status { return status.New(codes.InvalidArgument, e.Error()) } + +// InstanceNeedsReinitialization +type InstanceNeedsReinitialization struct { +} + +func (e *InstanceNeedsReinitialization) Error() string { + return i18n.Tr("The instance is no longer valid and needs to be reinitialized") +} + +// GRPCStatus converts the error into a *status.Status +func (e *InstanceNeedsReinitialization) GRPCStatus() *status.Status { + st, _ := status. + New(codes.InvalidArgument, e.Error()). + WithDetails(&rpc.InstanceNeedsReinitializationError{}) + return st +} diff --git a/commands/core/download.go b/commands/core/download.go deleted file mode 100644 index 78d7539d9da..00000000000 --- a/commands/core/download.go +++ /dev/null @@ -1,65 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -var tr = i18n.Tr - -// PlatformDownload FIXMEDOC -func PlatformDownload(ctx context.Context, req *rpc.PlatformDownloadRequest, downloadCB rpc.DownloadProgressCB) (*rpc.PlatformDownloadResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - - version, err := commands.ParseVersion(req) - if err != nil { - return nil, &arduino.InvalidVersionError{Cause: err} - } - - ref := &packagemanager.PlatformReference{ - Package: req.PlatformPackage, - PlatformArchitecture: req.Architecture, - PlatformVersion: version, - } - platform, tools, err := pme.FindPlatformReleaseDependencies(ref) - if err != nil { - return nil, &arduino.PlatformNotFoundError{Platform: ref.String(), Cause: err} - } - - if err := pme.DownloadPlatformRelease(platform, nil, downloadCB); err != nil { - return nil, err - } - - for _, tool := range tools { - if err := pme.DownloadToolRelease(tool, nil, downloadCB); err != nil { - return nil, err - } - } - - return &rpc.PlatformDownloadResponse{}, nil -} diff --git a/commands/core/install.go b/commands/core/install.go deleted file mode 100644 index 6a159f7de50..00000000000 --- a/commands/core/install.go +++ /dev/null @@ -1,81 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "context" - "fmt" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// PlatformInstall FIXMEDOC -func PlatformInstall(ctx context.Context, req *rpc.PlatformInstallRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (*rpc.PlatformInstallResponse, error) { - install := func() error { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return &arduino.InvalidInstanceError{} - } - defer release() - - version, err := commands.ParseVersion(req) - if err != nil { - return &arduino.InvalidVersionError{Cause: err} - } - - ref := &packagemanager.PlatformReference{ - Package: req.PlatformPackage, - PlatformArchitecture: req.Architecture, - PlatformVersion: version, - } - platformRelease, tools, err := pme.FindPlatformReleaseDependencies(ref) - if err != nil { - return &arduino.PlatformNotFoundError{Platform: ref.String(), Cause: err} - } - - // Prerequisite checks before install - if platformRelease.IsInstalled() { - taskCB(&rpc.TaskProgress{Name: tr("Platform %s already installed", platformRelease), Completed: true}) - return nil - } - - if req.GetNoOverwrite() { - if installed := pme.GetInstalledPlatformRelease(platformRelease.Platform); installed != nil { - return fmt.Errorf("%s: %s", - tr("Platform %s already installed", installed), - tr("could not overwrite")) - } - } - - if err := pme.DownloadAndInstallPlatformAndTools(platformRelease, tools, downloadCB, taskCB, req.GetSkipPostInstall(), req.GetSkipPreUninstall()); err != nil { - return err - } - - return nil - } - - if err := install(); err != nil { - return nil, err - } - if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil { - return nil, err - } - return &rpc.PlatformInstallResponse{}, nil -} diff --git a/commands/core/list.go b/commands/core/list.go deleted file mode 100644 index 10d582de2d1..00000000000 --- a/commands/core/list.go +++ /dev/null @@ -1,90 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "fmt" - "sort" - "strings" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// PlatformList returns a list of installed platforms, optionally filtered by -// those requiring an update. -func PlatformList(req *rpc.PlatformListRequest) (*rpc.PlatformListResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - - res := []*rpc.Platform{} - for _, targetPackage := range pme.GetPackages() { - for _, platform := range targetPackage.Platforms { - platformRelease := pme.GetInstalledPlatformRelease(platform) - - // The All flags adds to the list of installed platforms the installable platforms (from the indexes) - // If both All and UpdatableOnly are set All takes precedence - if req.All { - installedVersion := "" - if platformRelease == nil { // if the platform is not installed - platformRelease = platform.GetLatestRelease() - } else { - installedVersion = platformRelease.Version.String() - } - // it could happen, especially with indexes not perfectly compliant with specs that a platform do not contain a valid release - if platformRelease != nil { - rpcPlatform := commands.PlatformReleaseToRPC(platformRelease) - rpcPlatform.Installed = installedVersion - res = append(res, rpcPlatform) - continue - } - } - - if platformRelease != nil { - latest := platform.GetLatestRelease() - if latest == nil { - return nil, &arduino.PlatformNotFoundError{Platform: platform.String(), Cause: fmt.Errorf(tr("the platform has no releases"))} - } - - // show only the updatable platforms - if req.UpdatableOnly && latest == platformRelease { - continue - } - - rpcPlatform := commands.PlatformReleaseToRPC(platformRelease) - rpcPlatform.Installed = platformRelease.Version.String() - rpcPlatform.Latest = latest.Version.String() - res = append(res, rpcPlatform) - } - } - } - // Sort result alphabetically and put deprecated platforms at the bottom - sort.Slice(res, func(i, j int) bool { - return strings.ToLower(res[i].Name) < strings.ToLower(res[j].Name) - }) - sort.SliceStable(res, func(i, j int) bool { - if !res[i].Deprecated && res[j].Deprecated { - return true - } - return false - }) - return &rpc.PlatformListResponse{InstalledPlatforms: res}, nil -} diff --git a/commands/core/search_test.go b/commands/core/search_test.go deleted file mode 100644 index b96c19912af..00000000000 --- a/commands/core/search_test.go +++ /dev/null @@ -1,354 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "testing" - - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/internal/cli/instance" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" - "github.com/stretchr/testify/require" -) - -func TestPlatformSearch(t *testing.T) { - - dataDir := paths.TempDir().Join("test", "data_dir") - downloadDir := paths.TempDir().Join("test", "staging") - t.Setenv("ARDUINO_DATA_DIR", dataDir.String()) - t.Setenv("ARDUINO_DOWNLOADS_DIR", downloadDir.String()) - dataDir.MkdirAll() - downloadDir.MkdirAll() - defer paths.TempDir().Join("test").RemoveAll() - err := paths.New("testdata").Join("package_index.json").CopyTo(dataDir.Join("package_index.json")) - require.Nil(t, err) - - configuration.Settings = configuration.Init(paths.TempDir().Join("test", "arduino-cli.yaml").String()) - - inst := instance.CreateAndInit() - require.NotNil(t, inst) - - res, stat := PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "retrokit", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - - require.Len(t, res.SearchOutput, 2) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.5", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "retrokit", - AllVersions: false, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 1) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - // Search the Package Maintainer - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "Retrokits (www.retrokits.com)", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 2) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.5", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - // Search using the Package name - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "Retrokits-RK002", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 2) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.5", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - // Search using the Platform name - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "rk002", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 2) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.5", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "Retrokits-RK002:arm", - Installed: "", - Latest: "1.0.6", - Name: "RK002", - Maintainer: "Retrokits (www.retrokits.com)", - Website: "https://www.retrokits.com", - Email: "info@retrokits.com", - Boards: []*rpc.Board{{Name: "RK002"}}, - Type: []string{"Contributed"}, - Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, - Indexed: true, - MissingMetadata: true, - }) - - // Search using a board name - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "Yún", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 1) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "arduino:avr", - Installed: "", - Latest: "1.8.3", - Name: "Arduino AVR Boards", - Maintainer: "Arduino", - Website: "https://www.arduino.cc/", - Email: "packages@arduino.cc", - Type: []string{"Arduino"}, - Boards: []*rpc.Board{ - {Name: "Arduino Yún"}, - {Name: "Arduino Uno"}, - {Name: "Arduino Uno WiFi"}, - {Name: "Arduino Diecimila"}, - {Name: "Arduino Nano"}, - {Name: "Arduino Mega"}, - {Name: "Arduino MegaADK"}, - {Name: "Arduino Leonardo"}, - {Name: "Arduino Leonardo Ethernet"}, - {Name: "Arduino Micro"}, - {Name: "Arduino Esplora"}, - {Name: "Arduino Mini"}, - {Name: "Arduino Ethernet"}, - {Name: "Arduino Fio"}, - {Name: "Arduino BT"}, - {Name: "Arduino LilyPadUSB"}, - {Name: "Arduino Lilypad"}, - {Name: "Arduino Pro"}, - {Name: "Arduino ATMegaNG"}, - {Name: "Arduino Robot Control"}, - {Name: "Arduino Robot Motor"}, - {Name: "Arduino Gemma"}, - {Name: "Adafruit Circuit Playground"}, - {Name: "Arduino Yún Mini"}, - {Name: "Arduino Industrial 101"}, - {Name: "Linino One"}, - }, - Help: &rpc.HelpResources{Online: "http://www.arduino.cc/en/Reference/HomePage"}, - Indexed: true, - MissingMetadata: true, - }) - - res, stat = PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "yun", - AllVersions: true, - }) - require.Nil(t, stat) - require.NotNil(t, res) - require.Len(t, res.SearchOutput, 1) - require.Contains(t, res.SearchOutput, &rpc.Platform{ - Id: "arduino:avr", - Installed: "", - Latest: "1.8.3", - Name: "Arduino AVR Boards", - Maintainer: "Arduino", - Website: "https://www.arduino.cc/", - Email: "packages@arduino.cc", - Type: []string{"Arduino"}, - Boards: []*rpc.Board{ - {Name: "Arduino Yún"}, - {Name: "Arduino Uno"}, - {Name: "Arduino Uno WiFi"}, - {Name: "Arduino Diecimila"}, - {Name: "Arduino Nano"}, - {Name: "Arduino Mega"}, - {Name: "Arduino MegaADK"}, - {Name: "Arduino Leonardo"}, - {Name: "Arduino Leonardo Ethernet"}, - {Name: "Arduino Micro"}, - {Name: "Arduino Esplora"}, - {Name: "Arduino Mini"}, - {Name: "Arduino Ethernet"}, - {Name: "Arduino Fio"}, - {Name: "Arduino BT"}, - {Name: "Arduino LilyPadUSB"}, - {Name: "Arduino Lilypad"}, - {Name: "Arduino Pro"}, - {Name: "Arduino ATMegaNG"}, - {Name: "Arduino Robot Control"}, - {Name: "Arduino Robot Motor"}, - {Name: "Arduino Gemma"}, - {Name: "Adafruit Circuit Playground"}, - {Name: "Arduino Yún Mini"}, - {Name: "Arduino Industrial 101"}, - {Name: "Linino One"}, - }, - Help: &rpc.HelpResources{Online: "http://www.arduino.cc/en/Reference/HomePage"}, - Indexed: true, - MissingMetadata: true, - }) -} - -func TestPlatformSearchSorting(t *testing.T) { - dataDir := paths.TempDir().Join("test", "data_dir") - downloadDir := paths.TempDir().Join("test", "staging") - t.Setenv("ARDUINO_DATA_DIR", dataDir.String()) - t.Setenv("ARDUINO_DOWNLOADS_DIR", downloadDir.String()) - dataDir.MkdirAll() - downloadDir.MkdirAll() - defer paths.TempDir().Join("test").RemoveAll() - err := paths.New("testdata").Join("package_index.json").CopyTo(dataDir.Join("package_index.json")) - require.Nil(t, err) - - configuration.Settings = configuration.Init(paths.TempDir().Join("test", "arduino-cli.yaml").String()) - - inst := instance.CreateAndInit() - require.NotNil(t, inst) - - res, stat := PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "", - AllVersions: false, - }) - require.Nil(t, stat) - require.NotNil(t, res) - - require.Len(t, res.SearchOutput, 3) - require.Equal(t, res.SearchOutput[0].Name, "Arduino AVR Boards") - require.Equal(t, res.SearchOutput[0].Deprecated, false) - require.Equal(t, res.SearchOutput[1].Name, "RK002") - require.Equal(t, res.SearchOutput[1].Deprecated, false) - require.Equal(t, res.SearchOutput[2].Name, "Platform") - require.Equal(t, res.SearchOutput[2].Deprecated, true) - -} diff --git a/commands/core/uninstall.go b/commands/core/uninstall.go deleted file mode 100644 index ec0ae20bc08..00000000000 --- a/commands/core/uninstall.go +++ /dev/null @@ -1,80 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// PlatformUninstall FIXMEDOC -func PlatformUninstall(ctx context.Context, req *rpc.PlatformUninstallRequest, taskCB rpc.TaskProgressCB) (*rpc.PlatformUninstallResponse, error) { - if err := platformUninstall(ctx, req, taskCB); err != nil { - return nil, err - } - if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil { - return nil, err - } - return &rpc.PlatformUninstallResponse{}, nil -} - -// platformUninstall is the implementation of platform unistaller -func platformUninstall(ctx context.Context, req *rpc.PlatformUninstallRequest, taskCB rpc.TaskProgressCB) error { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return &arduino.InvalidInstanceError{} - } - defer release() - - ref := &packagemanager.PlatformReference{ - Package: req.PlatformPackage, - PlatformArchitecture: req.Architecture, - } - if ref.PlatformVersion == nil { - platform := pme.FindPlatform(ref) - if platform == nil { - return &arduino.PlatformNotFoundError{Platform: ref.String()} - } - platformRelease := pme.GetInstalledPlatformRelease(platform) - if platformRelease == nil { - return &arduino.PlatformNotFoundError{Platform: ref.String()} - } - ref.PlatformVersion = platformRelease.Version - } - - platform, tools, err := pme.FindPlatformReleaseDependencies(ref) - if err != nil { - return &arduino.NotFoundError{Message: tr("Can't find dependencies for platform %s", ref), Cause: err} - } - - if err := pme.UninstallPlatform(platform, taskCB, req.GetSkipPreUninstall()); err != nil { - return err - } - - for _, tool := range tools { - if !pme.IsToolRequired(tool) { - taskCB(&rpc.TaskProgress{Name: tr("Uninstalling %s, tool is no more required", tool)}) - pme.UninstallTool(tool, taskCB, req.GetSkipPreUninstall()) - } - } - - return nil -} diff --git a/commands/core/upgrade.go b/commands/core/upgrade.go deleted file mode 100644 index 2baaf2c97d6..00000000000 --- a/commands/core/upgrade.go +++ /dev/null @@ -1,65 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package core - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// PlatformUpgrade FIXMEDOC -func PlatformUpgrade(ctx context.Context, req *rpc.PlatformUpgradeRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (*rpc.PlatformUpgradeResponse, error) { - upgrade := func() (*cores.PlatformRelease, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - - // Extract all PlatformReference to platforms that have updates - ref := &packagemanager.PlatformReference{ - Package: req.PlatformPackage, - PlatformArchitecture: req.Architecture, - } - platform, err := pme.DownloadAndInstallPlatformUpgrades(ref, downloadCB, taskCB, req.GetSkipPostInstall(), req.GetSkipPreUninstall()) - if err != nil { - return platform, err - } - - return platform, nil - } - - var rpcPlatform *rpc.Platform - - platformRelease, err := upgrade() - if platformRelease != nil { - rpcPlatform = commands.PlatformReleaseToRPC(platformRelease) - } - if err != nil { - return &rpc.PlatformUpgradeResponse{Platform: rpcPlatform}, err - } - if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil { - return nil, err - } - - return &rpc.PlatformUpgradeResponse{Platform: rpcPlatform}, nil -} diff --git a/commands/daemon/daemon.go b/commands/daemon/daemon.go deleted file mode 100644 index ec7fd10e9d9..00000000000 --- a/commands/daemon/daemon.go +++ /dev/null @@ -1,510 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package daemon - -import ( - "context" - "errors" - "fmt" - "io" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/board" - "github.com/arduino/arduino-cli/commands/compile" - "github.com/arduino/arduino-cli/commands/core" - "github.com/arduino/arduino-cli/commands/lib" - "github.com/arduino/arduino-cli/commands/monitor" - "github.com/arduino/arduino-cli/commands/sketch" - "github.com/arduino/arduino-cli/commands/upload" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/sirupsen/logrus" - "google.golang.org/grpc/metadata" -) - -// ArduinoCoreServerImpl FIXMEDOC -type ArduinoCoreServerImpl struct { - // Force compile error for unimplemented methods - rpc.UnsafeArduinoCoreServiceServer - - VersionString string -} - -var tr = i18n.Tr - -func convertErrorToRPCStatus(err error) error { - if err == nil { - return nil - } - if cmdErr, ok := err.(arduino.CommandError); ok { - return cmdErr.ToRPCStatus().Err() - } - return err -} - -// BoardDetails FIXMEDOC -func (s *ArduinoCoreServerImpl) BoardDetails(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetailsResponse, error) { - resp, err := board.Details(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// BoardList FIXMEDOC -func (s *ArduinoCoreServerImpl) BoardList(ctx context.Context, req *rpc.BoardListRequest) (*rpc.BoardListResponse, error) { - ports, _, err := board.List(req) - if err != nil { - return nil, convertErrorToRPCStatus(err) - } - return &rpc.BoardListResponse{ - Ports: ports, - }, nil -} - -// BoardListAll FIXMEDOC -func (s *ArduinoCoreServerImpl) BoardListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListAllResponse, error) { - resp, err := board.ListAll(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// BoardSearch exposes to the gRPC interface the board search command -func (s *ArduinoCoreServerImpl) BoardSearch(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchResponse, error) { - resp, err := board.Search(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// BoardListWatch FIXMEDOC -func (s *ArduinoCoreServerImpl) BoardListWatch(req *rpc.BoardListWatchRequest, stream rpc.ArduinoCoreService_BoardListWatchServer) error { - syncSend := NewSynchronizedSend(stream.Send) - if req.Instance == nil { - err := fmt.Errorf(tr("no instance specified")) - syncSend.Send(&rpc.BoardListWatchResponse{ - EventType: "error", - Error: err.Error(), - }) - return err - } - - eventsChan, err := board.Watch(stream.Context(), req) - if err != nil { - return convertErrorToRPCStatus(err) - } - - for event := range eventsChan { - if err := syncSend.Send(event); err != nil { - logrus.Infof("sending board watch message: %v", err) - } - } - - return nil -} - -// Destroy FIXMEDOC -func (s *ArduinoCoreServerImpl) Destroy(ctx context.Context, req *rpc.DestroyRequest) (*rpc.DestroyResponse, error) { - resp, err := commands.Destroy(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// UpdateIndex FIXMEDOC -func (s *ArduinoCoreServerImpl) UpdateIndex(req *rpc.UpdateIndexRequest, stream rpc.ArduinoCoreService_UpdateIndexServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := commands.UpdateIndex(stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.UpdateIndexResponse{DownloadProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// UpdateLibrariesIndex FIXMEDOC -func (s *ArduinoCoreServerImpl) UpdateLibrariesIndex(req *rpc.UpdateLibrariesIndexRequest, stream rpc.ArduinoCoreService_UpdateLibrariesIndexServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := commands.UpdateLibrariesIndex(stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.UpdateLibrariesIndexResponse{DownloadProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// Create FIXMEDOC -func (s *ArduinoCoreServerImpl) Create(ctx context.Context, req *rpc.CreateRequest) (*rpc.CreateResponse, error) { - var userAgent []string - if md, ok := metadata.FromIncomingContext(ctx); ok { - userAgent = md.Get("user-agent") - } - if len(userAgent) == 0 { - userAgent = []string{"gRPCClientUnknown/0.0.0"} - } - res, err := commands.Create(req, userAgent...) - return res, convertErrorToRPCStatus(err) -} - -// Init FIXMEDOC -func (s *ArduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCoreService_InitServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := commands.Init(req, func(message *rpc.InitResponse) { syncSend.Send(message) }) - return convertErrorToRPCStatus(err) -} - -// Version FIXMEDOC -func (s *ArduinoCoreServerImpl) Version(ctx context.Context, req *rpc.VersionRequest) (*rpc.VersionResponse, error) { - return &rpc.VersionResponse{Version: s.VersionString}, nil -} - -// NewSketch FIXMEDOC -func (s *ArduinoCoreServerImpl) NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchResponse, error) { - resp, err := sketch.NewSketch(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// LoadSketch FIXMEDOC -func (s *ArduinoCoreServerImpl) LoadSketch(ctx context.Context, req *rpc.LoadSketchRequest) (*rpc.LoadSketchResponse, error) { - resp, err := sketch.LoadSketch(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// SetSketchDefaults FIXMEDOC -func (s *ArduinoCoreServerImpl) SetSketchDefaults(ctx context.Context, req *rpc.SetSketchDefaultsRequest) (*rpc.SetSketchDefaultsResponse, error) { - resp, err := sketch.SetSketchDefaults(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// Compile FIXMEDOC -func (s *ArduinoCoreServerImpl) Compile(req *rpc.CompileRequest, stream rpc.ArduinoCoreService_CompileServer) error { - syncSend := NewSynchronizedSend(stream.Send) - outStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.CompileResponse{OutStream: data}) }) - errStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.CompileResponse{ErrStream: data}) }) - compileResp, compileErr := compile.Compile( - stream.Context(), req, outStream, errStream, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.CompileResponse{Progress: p}) }) - outStream.Close() - errStream.Close() - var compileRespSendErr error - if compileResp != nil { - compileRespSendErr = syncSend.Send(compileResp) - } - if compileErr != nil { - return convertErrorToRPCStatus(compileErr) - } - return compileRespSendErr -} - -// PlatformInstall FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformInstall(req *rpc.PlatformInstallRequest, stream rpc.ArduinoCoreService_PlatformInstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := core.PlatformInstall( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.PlatformInstallResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.PlatformInstallResponse{TaskProgress: p}) }, - ) - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// PlatformDownload FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformDownload(req *rpc.PlatformDownloadRequest, stream rpc.ArduinoCoreService_PlatformDownloadServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := core.PlatformDownload( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.PlatformDownloadResponse{Progress: p}) }, - ) - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// PlatformUninstall FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformUninstall(req *rpc.PlatformUninstallRequest, stream rpc.ArduinoCoreService_PlatformUninstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := core.PlatformUninstall( - stream.Context(), req, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.PlatformUninstallResponse{TaskProgress: p}) }, - ) - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// PlatformUpgrade FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformUpgrade(req *rpc.PlatformUpgradeRequest, stream rpc.ArduinoCoreService_PlatformUpgradeServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := core.PlatformUpgrade( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.PlatformUpgradeResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.PlatformUpgradeResponse{TaskProgress: p}) }, - ) - if err2 := syncSend.Send(resp); err2 != nil { - return err2 - } - return convertErrorToRPCStatus(err) -} - -// PlatformSearch FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformSearch(ctx context.Context, req *rpc.PlatformSearchRequest) (*rpc.PlatformSearchResponse, error) { - resp, err := core.PlatformSearch(req) - return resp, convertErrorToRPCStatus(err) -} - -// PlatformList FIXMEDOC -func (s *ArduinoCoreServerImpl) PlatformList(ctx context.Context, req *rpc.PlatformListRequest) (*rpc.PlatformListResponse, error) { - platforms, err := core.PlatformList(req) - return platforms, convertErrorToRPCStatus(err) -} - -// Upload FIXMEDOC -func (s *ArduinoCoreServerImpl) Upload(req *rpc.UploadRequest, stream rpc.ArduinoCoreService_UploadServer) error { - syncSend := NewSynchronizedSend(stream.Send) - outStream := feedStreamTo(func(data []byte) { - syncSend.Send(&rpc.UploadResponse{ - Message: &rpc.UploadResponse_OutStream{OutStream: data}, - }) - }) - errStream := feedStreamTo(func(data []byte) { - syncSend.Send(&rpc.UploadResponse{ - Message: &rpc.UploadResponse_ErrStream{ErrStream: data}, - }) - }) - res, err := upload.Upload(stream.Context(), req, outStream, errStream) - outStream.Close() - errStream.Close() - if res != nil { - syncSend.Send(&rpc.UploadResponse{ - Message: &rpc.UploadResponse_Result{ - Result: res, - }, - }) - } - return convertErrorToRPCStatus(err) -} - -// UploadUsingProgrammer FIXMEDOC -func (s *ArduinoCoreServerImpl) UploadUsingProgrammer(req *rpc.UploadUsingProgrammerRequest, stream rpc.ArduinoCoreService_UploadUsingProgrammerServer) error { - syncSend := NewSynchronizedSend(stream.Send) - outStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.UploadUsingProgrammerResponse{OutStream: data}) }) - errStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.UploadUsingProgrammerResponse{ErrStream: data}) }) - err := upload.UsingProgrammer(stream.Context(), req, outStream, errStream) - outStream.Close() - errStream.Close() - if err != nil { - return convertErrorToRPCStatus(err) - } - return nil -} - -// SupportedUserFields FIXMEDOC -func (s *ArduinoCoreServerImpl) SupportedUserFields(ctx context.Context, req *rpc.SupportedUserFieldsRequest) (*rpc.SupportedUserFieldsResponse, error) { - res, err := upload.SupportedUserFields(ctx, req) - return res, convertErrorToRPCStatus(err) -} - -// BurnBootloader FIXMEDOC -func (s *ArduinoCoreServerImpl) BurnBootloader(req *rpc.BurnBootloaderRequest, stream rpc.ArduinoCoreService_BurnBootloaderServer) error { - syncSend := NewSynchronizedSend(stream.Send) - outStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.BurnBootloaderResponse{OutStream: data}) }) - errStream := feedStreamTo(func(data []byte) { syncSend.Send(&rpc.BurnBootloaderResponse{ErrStream: data}) }) - resp, err := upload.BurnBootloader(stream.Context(), req, outStream, errStream) - outStream.Close() - errStream.Close() - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// ListProgrammersAvailableForUpload FIXMEDOC -func (s *ArduinoCoreServerImpl) ListProgrammersAvailableForUpload(ctx context.Context, req *rpc.ListProgrammersAvailableForUploadRequest) (*rpc.ListProgrammersAvailableForUploadResponse, error) { - resp, err := upload.ListProgrammersAvailableForUpload(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// LibraryDownload FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryDownload(req *rpc.LibraryDownloadRequest, stream rpc.ArduinoCoreService_LibraryDownloadServer) error { - syncSend := NewSynchronizedSend(stream.Send) - resp, err := lib.LibraryDownload( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.LibraryDownloadResponse{Progress: p}) }, - ) - if err != nil { - return convertErrorToRPCStatus(err) - } - return syncSend.Send(resp) -} - -// LibraryInstall FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryInstall(req *rpc.LibraryInstallRequest, stream rpc.ArduinoCoreService_LibraryInstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.LibraryInstall( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.LibraryInstallResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.LibraryInstallResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// LibraryUpgrade FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryUpgrade(req *rpc.LibraryUpgradeRequest, stream rpc.ArduinoCoreService_LibraryUpgradeServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.LibraryUpgrade( - stream.Context(), req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.LibraryUpgradeResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.LibraryUpgradeResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// LibraryUninstall FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryUninstall(req *rpc.LibraryUninstallRequest, stream rpc.ArduinoCoreService_LibraryUninstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.LibraryUninstall(stream.Context(), req, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.LibraryUninstallResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// LibraryUpgradeAll FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryUpgradeAll(req *rpc.LibraryUpgradeAllRequest, stream rpc.ArduinoCoreService_LibraryUpgradeAllServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.LibraryUpgradeAll(req, - func(p *rpc.DownloadProgress) { syncSend.Send(&rpc.LibraryUpgradeAllResponse{Progress: p}) }, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.LibraryUpgradeAllResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// LibraryResolveDependencies FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryResolveDependencies(ctx context.Context, req *rpc.LibraryResolveDependenciesRequest) (*rpc.LibraryResolveDependenciesResponse, error) { - resp, err := lib.LibraryResolveDependencies(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// LibrarySearch FIXMEDOC -func (s *ArduinoCoreServerImpl) LibrarySearch(ctx context.Context, req *rpc.LibrarySearchRequest) (*rpc.LibrarySearchResponse, error) { - resp, err := lib.LibrarySearch(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// LibraryList FIXMEDOC -func (s *ArduinoCoreServerImpl) LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.LibraryListResponse, error) { - resp, err := lib.LibraryList(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// ArchiveSketch FIXMEDOC -func (s *ArduinoCoreServerImpl) ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.ArchiveSketchResponse, error) { - resp, err := sketch.ArchiveSketch(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// ZipLibraryInstall FIXMEDOC -func (s *ArduinoCoreServerImpl) ZipLibraryInstall(req *rpc.ZipLibraryInstallRequest, stream rpc.ArduinoCoreService_ZipLibraryInstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.ZipLibraryInstall( - stream.Context(), req, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.ZipLibraryInstallResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// GitLibraryInstall FIXMEDOC -func (s *ArduinoCoreServerImpl) GitLibraryInstall(req *rpc.GitLibraryInstallRequest, stream rpc.ArduinoCoreService_GitLibraryInstallServer) error { - syncSend := NewSynchronizedSend(stream.Send) - err := lib.GitLibraryInstall( - stream.Context(), req, - func(p *rpc.TaskProgress) { syncSend.Send(&rpc.GitLibraryInstallResponse{TaskProgress: p}) }, - ) - return convertErrorToRPCStatus(err) -} - -// EnumerateMonitorPortSettings FIXMEDOC -func (s *ArduinoCoreServerImpl) EnumerateMonitorPortSettings(ctx context.Context, req *rpc.EnumerateMonitorPortSettingsRequest) (*rpc.EnumerateMonitorPortSettingsResponse, error) { - resp, err := monitor.EnumerateMonitorPortSettings(ctx, req) - return resp, convertErrorToRPCStatus(err) -} - -// Monitor FIXMEDOC -func (s *ArduinoCoreServerImpl) Monitor(stream rpc.ArduinoCoreService_MonitorServer) error { - syncSend := NewSynchronizedSend(stream.Send) - - // The configuration must be sent on the first message - req, err := stream.Recv() - if err != nil { - return err - } - - portProxy, _, err := monitor.Monitor(stream.Context(), req) - if err != nil { - return err - } - - // Send a message with Success set to true to notify the caller of the port being now active - _ = syncSend.Send(&rpc.MonitorResponse{Success: true}) - - cancelCtx, cancel := context.WithCancel(stream.Context()) - go func() { - defer cancel() - for { - msg, err := stream.Recv() - if errors.Is(err, io.EOF) { - return - } - if err != nil { - syncSend.Send(&rpc.MonitorResponse{Error: err.Error()}) - return - } - if conf := msg.GetPortConfiguration(); conf != nil { - for _, c := range conf.GetSettings() { - if err := portProxy.Config(c.SettingId, c.Value); err != nil { - syncSend.Send(&rpc.MonitorResponse{Error: err.Error()}) - } - } - } - tx := msg.GetTxData() - for len(tx) > 0 { - n, err := portProxy.Write(tx) - if errors.Is(err, io.EOF) { - return - } - if err != nil { - syncSend.Send(&rpc.MonitorResponse{Error: err.Error()}) - return - } - tx = tx[n:] - } - } - }() - - go func() { - defer cancel() - buff := make([]byte, 4096) - for { - n, err := portProxy.Read(buff) - if errors.Is(err, io.EOF) { - break - } - if err != nil { - syncSend.Send(&rpc.MonitorResponse{Error: err.Error()}) - break - } - if err := syncSend.Send(&rpc.MonitorResponse{RxData: buff[:n]}); err != nil { - break - } - } - }() - - <-cancelCtx.Done() - portProxy.Close() - return nil -} diff --git a/commands/daemon/debug.go b/commands/daemon/debug.go deleted file mode 100644 index 0e024881788..00000000000 --- a/commands/daemon/debug.go +++ /dev/null @@ -1,67 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package daemon - -import ( - "context" - "os" - - cmd "github.com/arduino/arduino-cli/commands/debug" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/pkg/errors" -) - -// Debug returns a stream response that can be used to fetch data from the -// target. The first message passed through the `Debug` request must -// contain DebugRequest configuration params, not data. -func (s *ArduinoCoreServerImpl) Debug(stream rpc.ArduinoCoreService_DebugServer) error { - // Grab the first message - msg, err := stream.Recv() - if err != nil { - return err - } - - // Ensure it's a config message and not data - req := msg.GetDebugRequest() - if req == nil { - return errors.Errorf(tr("First message must contain debug request, not data")) - } - - // Launch debug recipe attaching stdin and out to grpc streaming - signalChan := make(chan os.Signal) - defer close(signalChan) - outStream := feedStreamTo(func(data []byte) { stream.Send(&rpc.DebugResponse{Data: data}) }) - resp, debugErr := cmd.Debug(stream.Context(), req, - consumeStreamFrom(func() ([]byte, error) { - command, err := stream.Recv() - if command.GetSendInterrupt() { - signalChan <- os.Interrupt - } - return command.GetData(), err - }), - outStream, - signalChan) - outStream.Close() - if debugErr != nil { - return debugErr - } - return stream.Send(resp) -} - -// GetDebugConfig return metadata about a debug session -func (s *ArduinoCoreServerImpl) GetDebugConfig(ctx context.Context, req *rpc.GetDebugConfigRequest) (*rpc.GetDebugConfigResponse, error) { - return cmd.GetDebugConfig(ctx, req) -} diff --git a/commands/daemon/settings.go b/commands/daemon/settings.go deleted file mode 100644 index 60b7169fc87..00000000000 --- a/commands/daemon/settings.go +++ /dev/null @@ -1,179 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package daemon - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "strings" - - "github.com/arduino/arduino-cli/configuration" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" -) - -// SettingsService implements the `Settings` service -type SettingsService struct { - rpc.UnimplementedSettingsServiceServer -} - -// GetAll returns a message with a string field containing all the settings -// currently in use, marshalled in JSON format. -func (s *SettingsService) GetAll(ctx context.Context, req *rpc.GetAllRequest) (*rpc.GetAllResponse, error) { - b, err := json.Marshal(configuration.Settings.AllSettings()) - if err == nil { - return &rpc.GetAllResponse{ - JsonData: string(b), - }, nil - } - - return nil, err -} - -// mapper converts a map of nested maps to a map of scalar values. -// For example: -// -// {"foo": "bar", "daemon":{"port":"420"}, "sketch": {"always_export_binaries": "true"}} -// -// would convert to: -// -// {"foo": "bar", "daemon.port":"420", "sketch.always_export_binaries": "true"} -func mapper(toMap map[string]interface{}) map[string]interface{} { - res := map[string]interface{}{} - for k, v := range toMap { - switch data := v.(type) { - case map[string]interface{}: - for mK, mV := range mapper(data) { - // Concatenate keys - res[fmt.Sprintf("%s.%s", k, mK)] = mV - } - // This is done to avoid skipping keys containing empty maps - if len(data) == 0 { - res[k] = map[string]interface{}{} - } - default: - res[k] = v - } - } - return res -} - -// Merge applies multiple settings values at once. -func (s *SettingsService) Merge(ctx context.Context, req *rpc.MergeRequest) (*rpc.MergeResponse, error) { - var toMerge map[string]interface{} - if err := json.Unmarshal([]byte(req.GetJsonData()), &toMerge); err != nil { - return nil, err - } - - mapped := mapper(toMerge) - - // Set each value individually. - // This is done because Viper ignores empty strings or maps when - // using the MergeConfigMap function. - for k, v := range mapped { - configuration.Settings.Set(k, v) - } - - return &rpc.MergeResponse{}, nil -} - -// GetValue returns a settings value given its key. If the key is not present -// an error will be returned, so that we distinguish empty settings from missing -// ones. -func (s *SettingsService) GetValue(ctx context.Context, req *rpc.GetValueRequest) (*rpc.GetValueResponse, error) { - key := req.GetKey() - - // Check if settings key actually existing, we don't use Viper.InConfig() - // since that doesn't check for keys formatted like daemon.port or those set - // with Viper.Set(). This way we check for all existing settings for sure. - keyExists := false - for _, k := range configuration.Settings.AllKeys() { - if k == key || strings.HasPrefix(k, key) { - keyExists = true - break - } - } - if !keyExists { - return nil, errors.New(tr("key not found in settings")) - } - - b, err := json.Marshal(configuration.Settings.Get(key)) - value := &rpc.GetValueResponse{} - if err == nil { - value.Key = key - value.JsonData = string(b) - } - - return value, err -} - -// SetValue updates or set a value for a certain key. -func (s *SettingsService) SetValue(ctx context.Context, val *rpc.SetValueRequest) (*rpc.SetValueResponse, error) { - key := val.GetKey() - var value interface{} - - err := json.Unmarshal([]byte(val.GetJsonData()), &value) - if err == nil { - configuration.Settings.Set(key, value) - } - - return &rpc.SetValueResponse{}, err -} - -// Write to file set in request the settings currently stored in memory. -// We don't have a Read() function, that's not necessary since we only want one config file to be used -// and that's picked up when the CLI is run as daemon, either using the default path or a custom one -// set with the --config-file flag. -func (s *SettingsService) Write(ctx context.Context, req *rpc.WriteRequest) (*rpc.WriteResponse, error) { - if err := configuration.Settings.WriteConfigAs(req.FilePath); err != nil { - return nil, err - } - return &rpc.WriteResponse{}, nil -} - -// Delete removes a key from the config file -func (s *SettingsService) Delete(ctx context.Context, req *rpc.DeleteRequest) (*rpc.DeleteResponse, error) { - toDelete := req.GetKey() - - // Check if settings key actually existing, we don't use Viper.InConfig() - // since that doesn't check for keys formatted like daemon.port or those set - // with Viper.Set(). This way we check for all existing settings for sure. - keyExists := false - keys := []string{} - for _, k := range configuration.Settings.AllKeys() { - if !strings.HasPrefix(k, toDelete) { - keys = append(keys, k) - continue - } - keyExists = true - } - - if !keyExists { - return nil, errors.New(tr("key not found in settings")) - } - - // Override current settings to delete the key - updatedSettings := configuration.Init("") - for _, k := range keys { - updatedSettings.Set(k, configuration.Settings.Get(k)) - } - configPath := configuration.Settings.ConfigFileUsed() - updatedSettings.SetConfigFile(configPath) - configuration.Settings = updatedSettings - - return &rpc.DeleteResponse{}, nil -} diff --git a/commands/daemon/settings_test.go b/commands/daemon/settings_test.go deleted file mode 100644 index b95c7fe2446..00000000000 --- a/commands/daemon/settings_test.go +++ /dev/null @@ -1,176 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package daemon - -import ( - "context" - "encoding/json" - "path/filepath" - "testing" - - "github.com/arduino/arduino-cli/configuration" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" - "github.com/arduino/go-paths-helper" - "github.com/stretchr/testify/require" -) - -var svc = SettingsService{} - -func init() { - configuration.Settings = configuration.Init(filepath.Join("testdata", "arduino-cli.yaml")) -} - -func reset() { - configuration.Settings = configuration.Init(filepath.Join("testdata", "arduino-cli.yaml")) -} - -func TestGetAll(t *testing.T) { - resp, err := svc.GetAll(context.Background(), &rpc.GetAllRequest{}) - require.Nil(t, err) - - content, err := json.Marshal(configuration.Settings.AllSettings()) - require.Nil(t, err) - - require.Equal(t, string(content), resp.GetJsonData()) -} - -func TestMerge(t *testing.T) { - // Verify defaults - require.Equal(t, "50051", configuration.Settings.GetString("daemon.port")) - require.Equal(t, "", configuration.Settings.GetString("foo")) - require.Equal(t, false, configuration.Settings.GetBool("sketch.always_export_binaries")) - - bulkSettings := `{"foo": "bar", "daemon":{"port":"420"}, "sketch": {"always_export_binaries": "true"}}` - res, err := svc.Merge(context.Background(), &rpc.MergeRequest{JsonData: bulkSettings}) - require.NotNil(t, res) - require.NoError(t, err) - - require.Equal(t, "420", configuration.Settings.GetString("daemon.port")) - require.Equal(t, "bar", configuration.Settings.GetString("foo")) - require.Equal(t, true, configuration.Settings.GetBool("sketch.always_export_binaries")) - - bulkSettings = `{"foo":"", "daemon": {}, "sketch": {"always_export_binaries": "false"}}` - res, err = svc.Merge(context.Background(), &rpc.MergeRequest{JsonData: bulkSettings}) - require.NotNil(t, res) - require.NoError(t, err) - - require.Equal(t, "50051", configuration.Settings.GetString("daemon.port")) - require.Equal(t, "", configuration.Settings.GetString("foo")) - require.Equal(t, false, configuration.Settings.GetBool("sketch.always_export_binaries")) - - bulkSettings = `{"daemon": {"port":""}}` - res, err = svc.Merge(context.Background(), &rpc.MergeRequest{JsonData: bulkSettings}) - require.NotNil(t, res) - require.NoError(t, err) - - require.Equal(t, "", configuration.Settings.GetString("daemon.port")) - // Verifies other values are not changed - require.Equal(t, "", configuration.Settings.GetString("foo")) - require.Equal(t, false, configuration.Settings.GetBool("sketch.always_export_binaries")) - - reset() -} - -func TestGetValue(t *testing.T) { - key := &rpc.GetValueRequest{Key: "daemon"} - resp, err := svc.GetValue(context.Background(), key) - require.NoError(t, err) - require.Equal(t, `{"port":"50051"}`, resp.GetJsonData()) - - key = &rpc.GetValueRequest{Key: "daemon.port"} - resp, err = svc.GetValue(context.Background(), key) - require.NoError(t, err) - require.Equal(t, `"50051"`, resp.GetJsonData()) -} - -func TestGetMergedValue(t *testing.T) { - // Verifies value is not set - key := &rpc.GetValueRequest{Key: "foo"} - res, err := svc.GetValue(context.Background(), key) - require.Nil(t, res) - require.Error(t, err, "Error getting settings value") - - // Merge value - bulkSettings := `{"foo": "bar"}` - _, err = svc.Merge(context.Background(), &rpc.MergeRequest{JsonData: bulkSettings}) - require.NoError(t, err) - - // Verifies value is correctly returned - key = &rpc.GetValueRequest{Key: "foo"} - res, err = svc.GetValue(context.Background(), key) - require.NoError(t, err) - require.Equal(t, `"bar"`, res.GetJsonData()) -} - -func TestGetValueNotFound(t *testing.T) { - key := &rpc.GetValueRequest{Key: "DOESNTEXIST"} - _, err := svc.GetValue(context.Background(), key) - require.NotNil(t, err) - require.Equal(t, `key not found in settings`, err.Error()) -} - -func TestSetValue(t *testing.T) { - val := &rpc.SetValueRequest{ - Key: "foo", - JsonData: `"bar"`, - } - _, err := svc.SetValue(context.Background(), val) - require.Nil(t, err) - require.Equal(t, "bar", configuration.Settings.GetString("foo")) -} - -func TestWrite(t *testing.T) { - // Writes some settings - val := &rpc.SetValueRequest{ - Key: "foo", - JsonData: `"bar"`, - } - _, err := svc.SetValue(context.Background(), val) - require.NoError(t, err) - - tempDir := paths.TempDir() - testFolder, err := tempDir.MkTempDir("testdata") - require.NoError(t, err) - defer testFolder.RemoveAll() - - // Verifies config files doesn't exist - configFile := testFolder.Join("arduino-cli.yml") - require.True(t, configFile.NotExist()) - - _, err = svc.Write(context.Background(), &rpc.WriteRequest{ - FilePath: configFile.String(), - }) - require.NoError(t, err) - - // Verifies config file is created. - // We don't verify the content since we expect config library, Viper, to work - require.True(t, configFile.Exist()) -} - -func TestDelete(t *testing.T) { - _, err := svc.Delete(context.Background(), &rpc.DeleteRequest{ - Key: "doesnotexist", - }) - require.Error(t, err) - - _, err = svc.Delete(context.Background(), &rpc.DeleteRequest{ - Key: "network", - }) - require.NoError(t, err) - - _, err = svc.GetValue(context.Background(), &rpc.GetValueRequest{Key: "network"}) - require.Error(t, err) -} diff --git a/commands/debug/debug.go b/commands/debug/debug.go deleted file mode 100644 index ab55e317508..00000000000 --- a/commands/debug/debug.go +++ /dev/null @@ -1,196 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package debug - -import ( - "context" - "fmt" - "io" - "os" - "path/filepath" - "runtime" - "time" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" - "github.com/sirupsen/logrus" -) - -var tr = i18n.Tr - -// Debug command launches a debug tool for a sketch. -// It also implements streams routing: -// gRPC In -> tool stdIn -// grpc Out <- tool stdOut -// grpc Out <- tool stdErr -// It also implements tool process lifecycle management -func Debug(ctx context.Context, req *rpc.GetDebugConfigRequest, inStream io.Reader, out io.Writer, interrupt <-chan os.Signal) (*rpc.DebugResponse, error) { - - // Get debugging command line to run debugger - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - - commandLine, err := getCommandLine(req, pme) - if err != nil { - return nil, err - } - - for i, arg := range commandLine { - fmt.Printf("%2d: %s\n", i, arg) - } - - // Run Tool - entry := logrus.NewEntry(logrus.StandardLogger()) - for i, param := range commandLine { - entry = entry.WithField(fmt.Sprintf("param%d", i), param) - } - entry.Debug("Executing debugger") - - cmd, err := executils.NewProcess(pme.GetEnvVarsForSpawnedProcess(), commandLine...) - if err != nil { - return nil, &arduino.FailedDebugError{Message: tr("Cannot execute debug tool"), Cause: err} - } - - // Get stdIn pipe from tool - in, err := cmd.StdinPipe() - if err != nil { - return &rpc.DebugResponse{Error: err.Error()}, nil - } - defer in.Close() - - // Merge tool StdOut and StdErr to stream them in the io.Writer passed stream - cmd.RedirectStdoutTo(out) - cmd.RedirectStderrTo(out) - - // Start the debug command - if err := cmd.Start(); err != nil { - return &rpc.DebugResponse{Error: err.Error()}, nil - } - - if interrupt != nil { - go func() { - for { - sig, ok := <-interrupt - if !ok { - break - } - cmd.Signal(sig) - } - }() - } - - go func() { - // Copy data from passed inStream into command stdIn - io.Copy(in, inStream) - // In any case, try process termination after a second to avoid leaving - // zombie process. - time.Sleep(time.Second) - cmd.Kill() - }() - - // Wait for process to finish - if err := cmd.Wait(); err != nil { - return &rpc.DebugResponse{Error: err.Error()}, nil - } - return &rpc.DebugResponse{}, nil -} - -// getCommandLine compose a debug command represented by a core recipe -func getCommandLine(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer) ([]string, error) { - debugInfo, err := getDebugProperties(req, pme) - if err != nil { - return nil, err - } - - cmdArgs := []string{} - add := func(s string) { cmdArgs = append(cmdArgs, s) } - - // Add path to GDB Client to command line - var gdbPath *paths.Path - switch debugInfo.GetToolchain() { - case "gcc": - gdbexecutable := debugInfo.ToolchainPrefix + "gdb" - if runtime.GOOS == "windows" { - gdbexecutable += ".exe" - } - gdbPath = paths.New(debugInfo.ToolchainPath).Join(gdbexecutable) - default: - return nil, &arduino.FailedDebugError{Message: tr("Toolchain '%s' is not supported", debugInfo.GetToolchain())} - } - add(gdbPath.String()) - - // Set GDB interpreter (default value should be "console") - gdbInterpreter := req.GetInterpreter() - if gdbInterpreter == "" { - gdbInterpreter = "console" - } - add("--interpreter=" + gdbInterpreter) - if gdbInterpreter != "console" { - add("-ex") - add("set pagination off") - } - - // Add extra GDB execution commands - add("-ex") - add("set remotetimeout 5") - - // Extract path to GDB Server - switch debugInfo.GetServer() { - case "openocd": - var openocdConf rpc.DebugOpenOCDServerConfiguration - if err := debugInfo.ServerConfiguration.UnmarshalTo(&openocdConf); err != nil { - return nil, err - } - - serverCmd := fmt.Sprintf(`target extended-remote | "%s"`, debugInfo.ServerPath) - - if cfg := openocdConf.GetScriptsDir(); cfg != "" { - serverCmd += fmt.Sprintf(` -s "%s"`, cfg) - } - - for _, script := range openocdConf.GetScripts() { - serverCmd += fmt.Sprintf(` --file "%s"`, script) - } - - serverCmd += ` -c "gdb_port pipe"` - serverCmd += ` -c "telnet_port 0"` - - add("-ex") - add(serverCmd) - - default: - return nil, &arduino.FailedDebugError{Message: tr("GDB server '%s' is not supported", debugInfo.GetServer())} - } - - // Add executable - add(debugInfo.Executable) - - // Transform every path to forward slashes (on Windows some tools further - // escapes the command line so the backslash "\" gets in the way). - for i, param := range cmdArgs { - cmdArgs[i] = filepath.ToSlash(param) - } - - return cmdArgs, nil -} diff --git a/commands/debug/debug_info.go b/commands/debug/debug_info.go deleted file mode 100644 index cd5308ece7c..00000000000 --- a/commands/debug/debug_info.go +++ /dev/null @@ -1,240 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package debug - -import ( - "context" - "encoding/json" - "regexp" - "strings" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" - "github.com/arduino/go-properties-orderedmap" - "github.com/sirupsen/logrus" - "google.golang.org/protobuf/types/known/anypb" -) - -// GetDebugConfig returns metadata to start debugging with the specified board -func GetDebugConfig(ctx context.Context, req *rpc.GetDebugConfigRequest) (*rpc.GetDebugConfigResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - return getDebugProperties(req, pme) -} - -func getDebugProperties(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer) (*rpc.GetDebugConfigResponse, error) { - // TODO: make a generic function to extract sketch from request - // and remove duplication in commands/compile.go - if req.GetSketchPath() == "" { - return nil, &arduino.MissingSketchPathError{} - } - sketchPath := paths.New(req.GetSketchPath()) - sk, err := sketch.New(sketchPath) - if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} - } - - // XXX Remove this code duplication!! - fqbnIn := req.GetFqbn() - if fqbnIn == "" && sk != nil { - fqbnIn = sk.GetDefaultFQBN() - } - if fqbnIn == "" { - return nil, &arduino.MissingFQBNError{} - } - fqbn, err := cores.ParseFQBN(fqbnIn) - if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} - } - - // Find target board and board properties - _, platformRelease, _, boardProperties, referencedPlatformRelease, err := pme.ResolveFQBN(fqbn) - if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} - } - - // Build configuration for debug - toolProperties := properties.NewMap() - if referencedPlatformRelease != nil { - toolProperties.Merge(referencedPlatformRelease.Properties) - } - toolProperties.Merge(platformRelease.Properties) - toolProperties.Merge(platformRelease.RuntimeProperties()) - toolProperties.Merge(boardProperties) - - // HOTFIX: Remove me when the `arduino:samd` core is updated - // (remember to remove it also in arduino/board/details.go) - if !toolProperties.ContainsKey("debug.executable") { - if platformRelease.String() == "arduino:samd@1.8.9" || platformRelease.String() == "arduino:samd@1.8.8" { - toolProperties.Set("debug.executable", "{build.path}/{build.project_name}.elf") - toolProperties.Set("debug.toolchain", "gcc") - toolProperties.Set("debug.toolchain.path", "{runtime.tools.arm-none-eabi-gcc-7-2017q4.path}/bin/") - toolProperties.Set("debug.toolchain.prefix", "arm-none-eabi-") - toolProperties.Set("debug.server", "openocd") - toolProperties.Set("debug.server.openocd.path", "{runtime.tools.openocd-0.10.0-arduino7.path}/bin/openocd") - toolProperties.Set("debug.server.openocd.scripts_dir", "{runtime.tools.openocd-0.10.0-arduino7.path}/share/openocd/scripts/") - toolProperties.Set("debug.server.openocd.script", "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}") - } - } - - for _, tool := range pme.GetAllInstalledToolsReleases() { - toolProperties.Merge(tool.RuntimeProperties()) - } - if requiredTools, err := pme.FindToolsRequiredForBuild(platformRelease, referencedPlatformRelease); err == nil { - for _, requiredTool := range requiredTools { - logrus.WithField("tool", requiredTool).Info("Tool required for debug") - toolProperties.Merge(requiredTool.RuntimeProperties()) - } - } - - if req.GetProgrammer() != "" { - if p, ok := platformRelease.Programmers[req.GetProgrammer()]; ok { - toolProperties.Merge(p.Properties) - } else if refP, ok := referencedPlatformRelease.Programmers[req.GetProgrammer()]; ok { - toolProperties.Merge(refP.Properties) - } else { - return nil, &arduino.ProgrammerNotFoundError{Programmer: req.GetProgrammer()} - } - } - - var importPath *paths.Path - if importDir := req.GetImportDir(); importDir != "" { - importPath = paths.New(importDir) - } else { - importPath = sk.DefaultBuildPath() - } - if !importPath.Exist() { - return nil, &arduino.NotFoundError{Message: tr("Compiled sketch not found in %s", importPath)} - } - if !importPath.IsDir() { - return nil, &arduino.NotFoundError{Message: tr("Expected compiled sketch in directory %s, but is a file instead", importPath)} - } - toolProperties.SetPath("build.path", importPath) - toolProperties.Set("build.project_name", sk.Name+".ino") - - // Set debug port property - port := req.GetPort() - if port.GetAddress() != "" { - toolProperties.Set("debug.port", port.Address) - portFile := strings.TrimPrefix(port.Address, "/dev/") - toolProperties.Set("debug.port.file", portFile) - } - - // Extract and expand all debugging properties - debugProperties := properties.NewMap() - for k, v := range toolProperties.SubTree("debug").AsMap() { - debugProperties.Set(k, toolProperties.ExpandPropsInString(v)) - } - - if !debugProperties.ContainsKey("executable") { - return nil, &arduino.FailedDebugError{Message: tr("Debugging not supported for board %s", req.GetFqbn())} - } - - server := debugProperties.Get("server") - toolchain := debugProperties.Get("toolchain") - - var serverConfiguration anypb.Any - switch server { - case "openocd": - openocdProperties := debugProperties.SubTree("server." + server) - scripts := openocdProperties.ExtractSubIndexLists("scripts") - if s := openocdProperties.Get("script"); s != "" && len(scripts) == 0 { - // backward compatibility: use "script" property if there are no "scipts.N" - scripts = append(scripts, s) - } - openocdConf := &rpc.DebugOpenOCDServerConfiguration{ - Path: openocdProperties.Get("path"), - ScriptsDir: openocdProperties.Get("scripts_dir"), - Scripts: scripts, - } - if err := serverConfiguration.MarshalFrom(openocdConf); err != nil { - return nil, err - } - } - - var toolchainConfiguration anypb.Any - switch toolchain { - case "gcc": - gccConf := &rpc.DebugGCCToolchainConfiguration{} - if err := toolchainConfiguration.MarshalFrom(gccConf); err != nil { - return nil, err - } - } - - cortexDebugCustomJson := "" - if cortexDebugProps := debugProperties.SubTree("cortex-debug.custom"); cortexDebugProps.Size() > 0 { - cortexDebugCustomJson = convertToJsonMap(cortexDebugProps) - } - return &rpc.GetDebugConfigResponse{ - Executable: debugProperties.Get("executable"), - Server: server, - ServerPath: debugProperties.Get("server." + server + ".path"), - ServerConfiguration: &serverConfiguration, - SvdFile: debugProperties.Get("svd_file"), - Toolchain: toolchain, - ToolchainPath: debugProperties.Get("toolchain.path"), - ToolchainPrefix: debugProperties.Get("toolchain.prefix"), - ToolchainConfiguration: &toolchainConfiguration, - CortexDebugCustomJson: cortexDebugCustomJson, - }, nil -} - -// Extract a JSON from a given properies.Map and converts key-indexed arrays -// like: -// -// my.indexed.array.0=first -// my.indexed.array.1=second -// my.indexed.array.2=third -// -// into the corresponding JSON arrays. -func convertToJsonMap(in *properties.Map) string { - // XXX: Maybe this method could be a good candidate for propertis.Map? - - // Find the values that should be kept as is, and the indexed arrays - // that should be later converted into arrays. - arraysKeys := map[string]bool{} - stringKeys := []string{} - trailingNumberMatcher := regexp.MustCompile(`^(.*)\.[0-9]+$`) - for _, k := range in.Keys() { - match := trailingNumberMatcher.FindAllStringSubmatch(k, -1) - if len(match) > 0 && len(match[0]) > 1 { - arraysKeys[match[0][1]] = true - } else { - stringKeys = append(stringKeys, k) - } - } - - // Compose a map that can be later marshaled into JSON keeping - // the arrays where they are expected to be. - res := map[string]any{} - for _, k := range stringKeys { - res[k] = in.Get(k) - } - for k := range arraysKeys { - res[k] = in.ExtractSubIndexLists(k) - } - - data, _ := json.MarshalIndent(res, "", " ") - return string(data) -} diff --git a/commands/instances.go b/commands/instances.go index ea1a42b45e8..5b5fe09fcdb 100644 --- a/commands/instances.go +++ b/commands/instances.go @@ -17,78 +17,115 @@ package commands import ( "context" + "errors" "fmt" "net/url" "path/filepath" + "runtime" "strings" + "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packageindex" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/arduino/utils" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packageindex" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/locales" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) -var tr = i18n.Tr - -func installTool(pm *packagemanager.PackageManager, tool *cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { +func installTool(ctx context.Context, pm *packagemanager.PackageManager, tool *cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, checks resources.IntegrityCheckMode) error { pme, release := pm.NewExplorer() defer release() - taskCB(&rpc.TaskProgress{Name: tr("Downloading missing tool %s", tool)}) - if err := pme.DownloadToolRelease(tool, nil, downloadCB); err != nil { - return fmt.Errorf(tr("downloading %[1]s tool: %[2]s"), tool, err) + + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading missing tool %s", tool)}) + if err := pme.DownloadToolRelease(ctx, tool, downloadCB); err != nil { + return errors.New(i18n.Tr("downloading %[1]s tool: %[2]s", tool, err)) } taskCB(&rpc.TaskProgress{Completed: true}) - if err := pme.InstallTool(tool, taskCB, true); err != nil { - return fmt.Errorf(tr("installing %[1]s tool: %[2]s"), tool, err) + if err := pme.InstallTool(tool, taskCB, true, checks); err != nil { + return errors.New(i18n.Tr("installing %[1]s tool: %[2]s", tool, err)) } return nil } -// Create a new CoreInstance ready to be initialized, supporting directories are also created. -func Create(req *rpc.CreateRequest, extraUserAgent ...string) (*rpc.CreateResponse, error) { - inst, err := instances.Create(extraUserAgent...) +// Create a new Instance ready to be initialized, supporting directories are also created. +func (s *arduinoCoreServerImpl) Create(ctx context.Context, req *rpc.CreateRequest) (*rpc.CreateResponse, error) { + var userAgent string + if md, ok := metadata.FromIncomingContext(ctx); ok { + userAgent = strings.Join(md.Get("user-agent"), " ") + } + + // Setup downloads directory + downloadsDir := s.settings.DownloadsDir() + if downloadsDir.NotExist() { + err := downloadsDir.MkdirAll() + if err != nil { + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Failed to create downloads directory"), Cause: err} + } + } + + // Setup data directory + dataDir := s.settings.DataDir() + userPackagesDir := s.settings.UserDir().Join("hardware") + packagesDir := s.settings.PackagesDir() + if packagesDir.NotExist() { + err := packagesDir.MkdirAll() + if err != nil { + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Failed to create data directory"), Cause: err} + } + } + + config, err := s.settings.DownloaderConfig(ctx) + if err != nil { + return nil, err + } + inst, err := instances.Create(dataDir, packagesDir, userPackagesDir, downloadsDir, userAgent, config) if err != nil { return nil, err } return &rpc.CreateResponse{Instance: inst}, nil } +// InitStreamResponseToCallbackFunction returns a gRPC stream to be used in Init that sends +// all responses to the callback function. +func InitStreamResponseToCallbackFunction(ctx context.Context, cb func(r *rpc.InitResponse) error) rpc.ArduinoCoreService_InitServer { + return streamResponseToCallback(ctx, cb) +} + // Init loads installed libraries and Platforms in CoreInstance with specified ID, // a gRPC status error is returned if the CoreInstance doesn't exist. // All responses are sent through responseCallback, can be nil to ignore all responses. // Failures don't stop the loading process, in case of loading failure the Platform or library // is simply skipped and an error gRPC status is sent to responseCallback. -func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) error { - if responseCallback == nil { - responseCallback = func(r *rpc.InitResponse) {} - } - reqInst := req.GetInstance() - if reqInst == nil { - return &arduino.InvalidInstanceError{} - } +func (s *arduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCoreService_InitServer) error { + ctx := stream.Context() + instance := req.GetInstance() if !instances.IsValid(instance) { - return &arduino.InvalidInstanceError{} + return &cmderrors.InvalidInstanceError{} } // Setup callback functions - if responseCallback == nil { - responseCallback = func(r *rpc.InitResponse) {} + var responseCallback func(*rpc.InitResponse) error + if stream != nil { + syncSend := NewSynchronizedSend(stream.Send) + responseCallback = syncSend.Send + } else { + responseCallback = func(*rpc.InitResponse) error { return nil } } responseError := func(st *status.Status) { responseCallback(&rpc.InitResponse{ @@ -121,19 +158,16 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro if req.GetProfile() != "" { sk, err := sketch.New(paths.New(req.GetSketchPath())) if err != nil { - return &arduino.InvalidArgumentError{Cause: err} + return &cmderrors.InvalidArgumentError{Cause: err} } - profile = sk.GetProfile(req.GetProfile()) - if profile == nil { - return &arduino.UnknownProfileError{Profile: req.GetProfile()} + p, err := sk.GetProfile(req.GetProfile()) + if err != nil { + return err } + profile = p responseCallback(&rpc.InitResponse{ Message: &rpc.InitResponse_Profile{ - Profile: &rpc.Profile{ - Name: req.GetProfile(), - Fqbn: profile.FQBN, - // TODO: Other profile infos may be provided here... - }, + Profile: profile.ToRpc(), }, }) } @@ -142,27 +176,28 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro defaultIndexURL, _ := utils.URLParse(globals.DefaultIndexURL) allPackageIndexUrls := []*url.URL{defaultIndexURL} if profile == nil { - for _, u := range configuration.Settings.GetStringSlice("board_manager.additional_urls") { + for _, u := range s.settings.BoardManagerAdditionalUrls() { URL, err := utils.URLParse(u) if err != nil { - e := &arduino.InitFailedError{ + e := &cmderrors.InitFailedError{ Code: codes.InvalidArgument, - Cause: fmt.Errorf(tr("Invalid additional URL: %v", err)), + Cause: errors.New(i18n.Tr("Invalid additional URL: %v", err)), Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INVALID_INDEX_URL, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) continue } allPackageIndexUrls = append(allPackageIndexUrls, URL) } } - if err := firstUpdate(context.Background(), req.GetInstance(), downloadCallback, allPackageIndexUrls); err != nil { - e := &arduino.InitFailedError{ + + if err := firstUpdate(ctx, s, req.GetInstance(), s.settings.DataDir(), downloadCallback, allPackageIndexUrls); err != nil { + e := &cmderrors.InitFailedError{ Code: codes.InvalidArgument, Cause: err, Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_DOWNLOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } { @@ -171,30 +206,34 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro // after reinitializing an instance after installing or uninstalling a core. // If this is not done the information of the uninstall core is kept in memory, // even if it should not. - pmb, commitPackageManager := instances.GetPackageManager(instance).NewBuilder() + pm, err := instances.GetPackageManager(instance) + if err != nil { + return err + } + pmb, commitPackageManager := pm.NewBuilder() // Load packages index for _, URL := range allPackageIndexUrls { if URL.Scheme == "file" { _, err := pmb.LoadPackageIndexFromFile(paths.New(URL.Path)) if err != nil { - e := &arduino.InitFailedError{ + e := &cmderrors.InitFailedError{ Code: codes.FailedPrecondition, - Cause: fmt.Errorf(tr("Loading index file: %v", err)), + Cause: errors.New(i18n.Tr("Loading index file: %v", err)), Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } continue } if err := pmb.LoadPackageIndex(URL); err != nil { - e := &arduino.InitFailedError{ + e := &cmderrors.InitFailedError{ Code: codes.FailedPrecondition, - Cause: fmt.Errorf(tr("Loading index file: %v", err)), + Cause: errors.New(i18n.Tr("Loading index file: %v", err)), Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } } @@ -206,17 +245,15 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro // Load Platforms if profile == nil { for _, err := range pmb.LoadHardware() { - s := &arduino.PlatformLoadingError{Cause: err} - responseError(s.ToRPCStatus()) + s := &cmderrors.PlatformLoadingError{Cause: err} + responseError(s.GRPCStatus()) } } else { // Load platforms from profile - errs := pmb.LoadHardwareForProfile( - profile, true, downloadCallback, taskCallback, - ) + errs := pmb.LoadHardwareForProfile(ctx, profile, true, downloadCallback, taskCallback, s.settings) for _, err := range errs { - s := &arduino.PlatformLoadingError{Cause: err} - responseError(s.ToRPCStatus()) + s := &cmderrors.PlatformLoadingError{Cause: err} + responseError(s.GRPCStatus()) } // Load "builtin" tools @@ -231,12 +268,12 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro for name, tool := range pmb.GetOrCreatePackage("builtin").Tools { latest := tool.LatestRelease() if latest == nil { - e := &arduino.InitFailedError{ + e := &cmderrors.InitFailedError{ Code: codes.Internal, - Cause: fmt.Errorf(tr("can't find latest release of tool %s", name)), + Cause: errors.New(i18n.Tr("can't find latest release of tool %s", name)), Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } else if !latest.IsInstalled() { builtinToolsToInstall = append(builtinToolsToInstall, latest) } @@ -245,108 +282,137 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro // Install builtin tools if necessary if len(builtinToolsToInstall) > 0 { for _, toolRelease := range builtinToolsToInstall { - if err := installTool(pmb.Build(), toolRelease, downloadCallback, taskCallback); err != nil { - e := &arduino.InitFailedError{ + if err := installTool(ctx, pmb.Build(), toolRelease, downloadCallback, taskCallback, resources.IntegrityCheckFull); err != nil { + e := &cmderrors.InitFailedError{ Code: codes.Internal, Cause: err, Reason: rpc.FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR, } - responseError(e.ToRPCStatus()) + responseError(e.GRPCStatus()) } } // We installed at least one builtin tool after loading hardware // so we must reload again otherwise we would never found them. for _, err := range loadBuiltinTools() { - s := &arduino.PlatformLoadingError{Cause: err} - responseError(s.ToRPCStatus()) + s := &cmderrors.PlatformLoadingError{Cause: err} + responseError(s.GRPCStatus()) } } commitPackageManager() } - pme, release := instances.GetPackageManagerExplorer(instance) + pme, release, err := instances.GetPackageManagerExplorer(instance) + if err != nil { + return err + } defer release() for _, err := range pme.LoadDiscoveries() { - s := &arduino.PlatformLoadingError{Cause: err} - responseError(s.ToRPCStatus()) + s := &cmderrors.PlatformLoadingError{Cause: err} + responseError(s.GRPCStatus()) } // Create library manager and add libraries directories - lm := librariesmanager.NewLibraryManager( - pme.IndexDir, - pme.DownloadDir, - ) - _ = instances.SetLibraryManager(instance, lm) // should never fail + lmb := librariesmanager.NewBuilder() // Load libraries for _, pack := range pme.GetPackages() { for _, platform := range pack.Platforms { if platformRelease := pme.GetInstalledPlatformRelease(platform); platformRelease != nil { - lm.AddPlatformReleaseLibrariesDir(platformRelease, libraries.PlatformBuiltIn) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + PlatformRelease: platformRelease, + Path: platformRelease.GetLibrariesDir(), + Location: libraries.PlatformBuiltIn, + }) } } } - if err := lm.LoadIndex(); err != nil { - s := status.Newf(codes.FailedPrecondition, tr("Loading index file: %v"), err) + indexFileName, err := globals.LibrariesIndexResource.IndexFileName() + if err != nil { + // should never happen + panic("failed getting libraries index file name: " + err.Error()) + } + indexFile := pme.IndexDir.Join(indexFileName) + + logrus.WithField("index", indexFile).Info("Loading libraries index file") + li, err := librariesindex.LoadIndex(indexFile) + if err != nil { + s := status.New(codes.FailedPrecondition, i18n.Tr("Loading index file: %v", err)) responseError(s) + li = librariesindex.EmptyIndex } + instances.SetLibrariesIndex(instance, li) if profile == nil { // Add directories of libraries bundled with IDE - if bundledLibsDir := configuration.IDEBuiltinLibrariesDir(configuration.Settings); bundledLibsDir != nil { - lm.AddLibrariesDir(bundledLibsDir, libraries.IDEBuiltIn) + if bundledLibsDir := s.settings.IDEBuiltinLibrariesDir(); bundledLibsDir != nil { + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: bundledLibsDir, + Location: libraries.IDEBuiltIn, + }) } // Add libraries directory from config file - lm.AddLibrariesDir(configuration.LibrariesDir(configuration.Settings), libraries.User) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: s.settings.LibrariesDir(), + Location: libraries.User, + }) } else { // Load libraries required for profile for _, libraryRef := range profile.Libraries { uid := libraryRef.InternalUniqueIdentifier() - libRoot := configuration.ProfilesCacheDir(configuration.Settings).Join(uid) + libRoot := s.settings.ProfilesCacheDir().Join(uid) libDir := libRoot.Join(libraryRef.Library) if !libDir.IsDir() { // Download library - taskCallback(&rpc.TaskProgress{Name: tr("Downloading library %s", libraryRef)}) - libRelease := lm.Index.FindRelease(&librariesindex.Reference{ - Name: libraryRef.Library, - Version: libraryRef.Version, - }) - if libRelease == nil { - taskCallback(&rpc.TaskProgress{Name: tr("Library %s not found", libraryRef)}) - err := &arduino.LibraryNotFoundError{Library: libraryRef.Library} - responseError(err.ToRPCStatus()) + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Downloading library %s", libraryRef)}) + libRelease, err := li.FindRelease(libraryRef.Library, libraryRef.Version) + if err != nil { + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Library %s not found", libraryRef)}) + err := &cmderrors.LibraryNotFoundError{Library: libraryRef.Library} + responseError(err.GRPCStatus()) continue } - if err := libRelease.Resource.Download(lm.DownloadsDir, nil, libRelease.String(), downloadCallback, ""); err != nil { - taskCallback(&rpc.TaskProgress{Name: tr("Error downloading library %s", libraryRef)}) - e := &arduino.FailedLibraryInstallError{Cause: err} - responseError(e.ToRPCStatus()) + config, err := s.settings.DownloaderConfig(ctx) + if err != nil { + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Error downloading library %s", libraryRef)}) + e := &cmderrors.FailedLibraryInstallError{Cause: err} + responseError(e.GRPCStatus()) + continue + } + if err := libRelease.Resource.Download(ctx, pme.DownloadDir, config, libRelease.String(), downloadCallback, ""); err != nil { + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Error downloading library %s", libraryRef)}) + e := &cmderrors.FailedLibraryInstallError{Cause: err} + responseError(e.GRPCStatus()) continue } taskCallback(&rpc.TaskProgress{Completed: true}) // Install library - taskCallback(&rpc.TaskProgress{Name: tr("Installing library %s", libraryRef)}) - if err := libRelease.Resource.Install(lm.DownloadsDir, libRoot, libDir); err != nil { - taskCallback(&rpc.TaskProgress{Name: tr("Error installing library %s", libraryRef)}) - e := &arduino.FailedLibraryInstallError{Cause: err} - responseError(e.ToRPCStatus()) + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Installing library %s", libraryRef)}) + if err := libRelease.Resource.Install(pme.DownloadDir, libRoot, libDir, resources.IntegrityCheckFull); err != nil { + taskCallback(&rpc.TaskProgress{Name: i18n.Tr("Error installing library %s", libraryRef)}) + e := &cmderrors.FailedLibraryInstallError{Cause: err} + responseError(e.GRPCStatus()) continue } taskCallback(&rpc.TaskProgress{Completed: true}) } - lm.AddLibrariesDir(libRoot, libraries.User) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: libRoot, + Location: libraries.User, + }) } } - for _, status := range lm.RescanLibraries() { + lm, libsLoadingWarnings := lmb.Build() + _ = instances.SetLibraryManager(instance, lm) // should never fail + for _, status := range libsLoadingWarnings { logrus.WithError(status.Err()).Warnf("Error loading library") // TODO: report as warning: responseError(err) } @@ -354,117 +420,233 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro // Refreshes the locale used, this will change the // language of the CLI if the locale is different // after started. - i18n.Init(configuration.Settings.GetString("locale")) + if locale, ok, _ := s.settings.GetStringOk("locale"); ok { + locales.Init(locale) + } return nil } -// Destroy FIXMEDOC -func Destroy(ctx context.Context, req *rpc.DestroyRequest) (*rpc.DestroyResponse, error) { +// Destroy deletes an instance. +func (s *arduinoCoreServerImpl) Destroy(ctx context.Context, req *rpc.DestroyRequest) (*rpc.DestroyResponse, error) { if ok := instances.Delete(req.GetInstance()); !ok { - return nil, &arduino.InvalidInstanceError{} + return nil, &cmderrors.InvalidInstanceError{} } return &rpc.DestroyResponse{}, nil } +// UpdateLibrariesIndexStreamResponseToCallbackFunction returns a gRPC stream to be used in UpdateLibrariesIndex that sends +// all responses to the callback function. +func UpdateLibrariesIndexStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB) (rpc.ArduinoCoreService_UpdateLibrariesIndexServer, func() *rpc.UpdateLibrariesIndexResponse_Result) { + var result *rpc.UpdateLibrariesIndexResponse_Result + return streamResponseToCallback(ctx, func(r *rpc.UpdateLibrariesIndexResponse) error { + if r.GetDownloadProgress() != nil { + downloadCB(r.GetDownloadProgress()) + } + if r.GetResult() != nil { + result = r.GetResult() + } + return nil + }), func() *rpc.UpdateLibrariesIndexResponse_Result { + return result + } +} + // UpdateLibrariesIndex updates the library_index.json -func UpdateLibrariesIndex(ctx context.Context, req *rpc.UpdateLibrariesIndexRequest, downloadCB rpc.DownloadProgressCB) error { - logrus.Info("Updating libraries index") - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) UpdateLibrariesIndex(req *rpc.UpdateLibrariesIndexRequest, stream rpc.ArduinoCoreService_UpdateLibrariesIndexServer) error { + syncSend := NewSynchronizedSend(stream.Send) + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.UpdateLibrariesIndexResponse{ + Message: &rpc.UpdateLibrariesIndexResponse_DownloadProgress{DownloadProgress: p}}) + } + + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + indexDir := pme.IndexDir + release() + index := globals.LibrariesIndexResource + + resultCB := func(status rpc.IndexUpdateReport_Status) { + syncSend.Send(&rpc.UpdateLibrariesIndexResponse{ + Message: &rpc.UpdateLibrariesIndexResponse_Result_{ + Result: &rpc.UpdateLibrariesIndexResponse_Result{ + LibrariesIndex: &rpc.IndexUpdateReport{ + IndexUrl: index.URL.String(), + Status: status, + }, + }, + }, + }) } - if err := lm.IndexFile.Parent().MkdirAll(); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Could not create index directory"), Cause: err} + // Create the index directory if it doesn't exist + if err := indexDir.MkdirAll(); err != nil { + resultCB(rpc.IndexUpdateReport_STATUS_FAILED) + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Could not create index directory"), Cause: err} } - // Create a temp dir to stage all downloads - tmp, err := paths.MkTempDir("", "library_index_download") - if err != nil { - return &arduino.TempDirCreationFailedError{Cause: err} + // Check if the index file is already up-to-date + indexFileName, _ := index.IndexFileName() + if info, err := indexDir.Join(indexFileName).Stat(); err == nil { + ageSecs := int64(time.Since(info.ModTime()).Seconds()) + if ageSecs < req.GetUpdateIfOlderThanSecs() { + resultCB(rpc.IndexUpdateReport_STATUS_ALREADY_UP_TO_DATE) + return nil + } } - defer tmp.RemoveAll() - indexResource := resources.IndexResource{ - URL: librariesmanager.LibraryIndexWithSignatureArchiveURL, - EnforceSignatureVerification: true, + // Perform index update + config, err := s.settings.DownloaderConfig(stream.Context()) + if err != nil { + return err } - if err := indexResource.Download(lm.IndexFile.Parent(), downloadCB); err != nil { + if err := globals.LibrariesIndexResource.Download(stream.Context(), indexDir, downloadCB, config); err != nil { + resultCB(rpc.IndexUpdateReport_STATUS_FAILED) return err } + resultCB(rpc.IndexUpdateReport_STATUS_UPDATED) return nil } +// UpdateIndexStreamResponseToCallbackFunction returns a gRPC stream to be used in UpdateIndex that sends +// all responses to the callback function. +func UpdateIndexStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB) (rpc.ArduinoCoreService_UpdateIndexServer, func() *rpc.UpdateIndexResponse_Result) { + var result *rpc.UpdateIndexResponse_Result + return streamResponseToCallback(ctx, func(r *rpc.UpdateIndexResponse) error { + if r.GetDownloadProgress() != nil { + downloadCB(r.GetDownloadProgress()) + } + if r.GetResult() != nil { + result = r.GetResult() + } + return nil + }), func() *rpc.UpdateIndexResponse_Result { + return result + } +} + // UpdateIndex FIXMEDOC -func UpdateIndex(ctx context.Context, req *rpc.UpdateIndexRequest, downloadCB rpc.DownloadProgressCB) error { +func (s *arduinoCoreServerImpl) UpdateIndex(req *rpc.UpdateIndexRequest, stream rpc.ArduinoCoreService_UpdateIndexServer) error { if !instances.IsValid(req.GetInstance()) { - return &arduino.InvalidInstanceError{} + return &cmderrors.InvalidInstanceError{} + } + + report := func(indexURL string, status rpc.IndexUpdateReport_Status) *rpc.IndexUpdateReport { + return &rpc.IndexUpdateReport{ + IndexUrl: indexURL, + Status: status, + } } - indexpath := configuration.DataDir(configuration.Settings) + syncSend := NewSynchronizedSend(stream.Send) + var downloadCB rpc.DownloadProgressCB = func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.UpdateIndexResponse{ + Message: &rpc.UpdateIndexResponse_DownloadProgress{DownloadProgress: p}, + }) + } + indexpath := s.settings.DataDir() urls := []string{globals.DefaultIndexURL} if !req.GetIgnoreCustomPackageIndexes() { - urls = append(urls, configuration.Settings.GetStringSlice("board_manager.additional_urls")...) + urls = append(urls, s.settings.GetStringSlice("board_manager.additional_urls")...) } failed := false + result := &rpc.UpdateIndexResponse_Result{} for _, u := range urls { - URL, err := utils.URLParse(u) + URL, err := url.Parse(u) if err != nil { logrus.Warnf("unable to parse additional URL: %s", u) - msg := fmt.Sprintf("%s: %v", tr("Unable to parse URL"), err) - downloadCB.Start(u, tr("Downloading index: %s", u)) + msg := fmt.Sprintf("%s: %v", i18n.Tr("Unable to parse URL"), err) + downloadCB.Start(u, i18n.Tr("Downloading index: %s", u)) downloadCB.End(false, msg) failed = true + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(u, rpc.IndexUpdateReport_STATUS_FAILED)) continue } logrus.WithField("url", URL).Print("Updating index") if URL.Scheme == "file" { - downloadCB.Start(u, tr("Downloading index: %s", filepath.Base(URL.Path))) path := paths.New(URL.Path) + if URL.Scheme == "file" && runtime.GOOS == "windows" && len(URL.Path) > 1 { + // https://github.com/golang/go/issues/32456 + // Parsed local file URLs on Windows are returned with a leading / so we remove it + path = paths.New(URL.Path[1:]) + } if _, err := packageindex.LoadIndexNoSign(path); err != nil { - msg := fmt.Sprintf("%s: %v", tr("Invalid package index in %s", path), err) + msg := fmt.Sprintf("%s: %v", i18n.Tr("Invalid package index in %s", path), err) + downloadCB.Start(u, i18n.Tr("Downloading index: %s", filepath.Base(URL.Path))) downloadCB.End(false, msg) failed = true + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(u, rpc.IndexUpdateReport_STATUS_FAILED)) } else { - downloadCB.End(true, "") + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(u, rpc.IndexUpdateReport_STATUS_SKIPPED)) } continue } + // Check if the index is up-to-date indexResource := resources.IndexResource{URL: URL} + indexFileName, err := indexResource.IndexFileName() + if err != nil { + downloadCB.Start(u, i18n.Tr("Downloading index: %s", filepath.Base(URL.Path))) + downloadCB.End(false, i18n.Tr("Invalid index URL: %s", err)) + failed = true + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(u, rpc.IndexUpdateReport_STATUS_FAILED)) + continue + } + indexFile := indexpath.Join(indexFileName) + if info, err := indexFile.Stat(); err == nil { + ageSecs := int64(time.Since(info.ModTime()).Seconds()) + if ageSecs < req.GetUpdateIfOlderThanSecs() { + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(u, rpc.IndexUpdateReport_STATUS_ALREADY_UP_TO_DATE)) + continue + } + } + + config, err := s.settings.DownloaderConfig(stream.Context()) + if err != nil { + downloadCB.Start(u, i18n.Tr("Downloading index: %s", filepath.Base(URL.Path))) + downloadCB.End(false, i18n.Tr("Invalid network configuration: %s", err)) + failed = true + continue + } + if strings.HasSuffix(URL.Host, "arduino.cc") && strings.HasSuffix(URL.Path, ".json") { indexResource.SignatureURL, _ = url.Parse(u) // should not fail because we already parsed it indexResource.SignatureURL.Path += ".sig" } - if err := indexResource.Download(indexpath, downloadCB); err != nil { + if err := indexResource.Download(stream.Context(), indexpath, downloadCB, config); err != nil { failed = true + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(u, rpc.IndexUpdateReport_STATUS_FAILED)) + } else { + result.UpdatedIndexes = append(result.GetUpdatedIndexes(), report(u, rpc.IndexUpdateReport_STATUS_UPDATED)) } } - + syncSend.Send(&rpc.UpdateIndexResponse{ + Message: &rpc.UpdateIndexResponse_Result_{Result: result}, + }) if failed { - return &arduino.FailedDownloadError{Message: tr("Some indexes could not be updated.")} + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Some indexes could not be updated.")} } return nil } // firstUpdate downloads libraries and packages indexes if they don't exist. // This ideally is only executed the first time the CLI is run. -func firstUpdate(ctx context.Context, instance *rpc.Instance, downloadCb func(msg *rpc.DownloadProgress), externalPackageIndexes []*url.URL) error { - // Gets the data directory to verify if library_index.json and package_index.json exist - dataDir := configuration.DataDir(configuration.Settings) - libraryIndex := dataDir.Join("library_index.json") +func firstUpdate(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, indexDir *paths.Path, downloadCb func(msg *rpc.DownloadProgress), externalPackageIndexes []*url.URL) error { + libraryIndex := indexDir.Join("library_index.json") if libraryIndex.NotExist() { // The library_index.json file doesn't exists, that means the CLI is run for the first time // so we proceed with the first update that downloads the file req := &rpc.UpdateLibrariesIndexRequest{Instance: instance} - if err := UpdateLibrariesIndex(ctx, req, downloadCb); err != nil { + stream, _ := UpdateLibrariesIndexStreamResponseToCallbackFunction(ctx, downloadCb) + if err := srv.UpdateLibrariesIndex(req, stream); err != nil { return err } } @@ -475,18 +657,19 @@ func firstUpdate(ctx context.Context, instance *rpc.Instance, downloadCb func(ms } packageIndexFileName, err := (&resources.IndexResource{URL: URL}).IndexFileName() if err != nil { - return &arduino.FailedDownloadError{ - Message: tr("Error downloading index '%s'", URL), - Cause: &arduino.InvalidURLError{}} + return &cmderrors.FailedDownloadError{ + Message: i18n.Tr("Error downloading index '%s'", URL), + Cause: &cmderrors.InvalidURLError{}} } - packageIndexFile := dataDir.Join(packageIndexFileName) + packageIndexFile := indexDir.Join(packageIndexFileName) if packageIndexFile.NotExist() { // The index file doesn't exists, that means the CLI is run for the first time, // or the 3rd party package index URL has just been added. Similarly to the // library update we download that file and all the other package indexes from // additional_urls req := &rpc.UpdateIndexRequest{Instance: instance} - if err := UpdateIndex(ctx, req, downloadCb); err != nil { + stream, _ := UpdateIndexStreamResponseToCallbackFunction(ctx, downloadCb) + if err := srv.UpdateIndex(req, stream); err != nil { return err } break diff --git a/commands/internal/instances/instances.go b/commands/internal/instances/instances.go index 7b13f77234d..b327bbc1d88 100644 --- a/commands/internal/instances/instances.go +++ b/commands/internal/instances/instances.go @@ -1,25 +1,40 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + package instances import ( "sync" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/version" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/version" + "github.com/arduino/go-paths-helper" + "go.bug.st/downloader/v2" ) -var tr = i18n.Tr - // coreInstance is an instance of the Arduino Core Services. The user can // instantiate as many as needed by providing a different configuration // for each one. type coreInstance struct { pm *packagemanager.PackageManager lm *librariesmanager.LibrariesManager + li *librariesindex.Index } // instances contains all the running Arduino Core Services instances @@ -30,36 +45,80 @@ var instancesMux sync.Mutex // GetPackageManager returns a PackageManager. If the package manager is not found // (because the instance is invalid or has been destroyed), nil is returned. // Deprecated: use GetPackageManagerExplorer instead. -func GetPackageManager(inst *rpc.Instance) *packagemanager.PackageManager { +func GetPackageManager(inst *rpc.Instance) (*packagemanager.PackageManager, error) { instancesMux.Lock() i := instances[inst.GetId()] instancesMux.Unlock() if i == nil { - return nil + return nil, &cmderrors.InvalidInstanceError{} } - return i.pm + return i.pm, nil } // GetPackageManagerExplorer returns a new package manager Explorer. The // explorer holds a read lock on the underlying PackageManager and it should // be released by calling the returned "release" function. -func GetPackageManagerExplorer(req *rpc.Instance) (explorer *packagemanager.Explorer, release func()) { - pm := GetPackageManager(req) - if pm == nil { - return nil, nil +func GetPackageManagerExplorer(req *rpc.Instance) (explorer *packagemanager.Explorer, release func(), _err error) { + pm, err := GetPackageManager(req) + if err != nil { + return nil, nil, err } - return pm.NewExplorer() + pme, release := pm.NewExplorer() + return pme, release, nil } // GetLibraryManager returns the library manager for the given instance. -func GetLibraryManager(inst *rpc.Instance) *librariesmanager.LibrariesManager { +func GetLibraryManager(inst *rpc.Instance) (*librariesmanager.LibrariesManager, error) { instancesMux.Lock() i := instances[inst.GetId()] instancesMux.Unlock() if i == nil { - return nil + return nil, &cmderrors.InvalidInstanceError{} + } + return i.lm, nil +} + +// GetLibraryManagerExplorer returns the library manager Explorer for the given instance. +func GetLibraryManagerExplorer(inst *rpc.Instance) (*librariesmanager.Explorer, func(), error) { + lm, err := GetLibraryManager(inst) + if err != nil { + return nil, nil, err + } + lmi, release := lm.NewExplorer() + return lmi, release, nil +} + +// GetLibraryManagerInstaller returns the library manager Installer for the given instance. +func GetLibraryManagerInstaller(inst *rpc.Instance) (*librariesmanager.Installer, func(), error) { + lm, err := GetLibraryManager(inst) + if err != nil { + return nil, nil, err } - return i.lm + lmi, release := lm.NewInstaller() + return lmi, release, nil +} + +// GetLibrariesIndex returns the library index for the given instance. +func GetLibrariesIndex(inst *rpc.Instance) (*librariesindex.Index, error) { + instancesMux.Lock() + defer instancesMux.Unlock() + i := instances[inst.GetId()] + if i == nil { + return nil, &cmderrors.InvalidInstanceError{} + } + return i.li, nil +} + +// SetLibrariesIndex sets the library index for the given instance. +func SetLibrariesIndex(inst *rpc.Instance, li *librariesindex.Index) error { + instancesMux.Lock() + defer instancesMux.Unlock() + i := instances[inst.GetId()] + if i == nil { + return &cmderrors.InvalidInstanceError{} + } + i.li = li + return nil } // SetLibraryManager sets the library manager for the given instance. @@ -74,45 +133,23 @@ func SetLibraryManager(inst *rpc.Instance, lm *librariesmanager.LibrariesManager return true } -// Create a new *rpc.Instance ready to be initialized, supporting directories are also created. -func Create(extraUserAgent ...string) (*rpc.Instance, error) { - instance := &coreInstance{} - - // Setup downloads directory - downloadsDir := configuration.DownloadsDir(configuration.Settings) - if downloadsDir.NotExist() { - err := downloadsDir.MkdirAll() - if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Failed to create downloads directory"), Cause: err} - } +// Create a new *rpc.Instance ready to be initialized +func Create(dataDir, packagesDir, userPackagesDir, downloadsDir *paths.Path, extraUserAgent string, downloaderConfig downloader.Config) (*rpc.Instance, error) { + // Create package manager + userAgent := "arduino-cli/" + version.VersionInfo.VersionString + if extraUserAgent != "" { + userAgent += " " + extraUserAgent } + tempDir := dataDir.Join("tmp") - // Setup data directory - dataDir := configuration.DataDir(configuration.Settings) - packagesDir := configuration.PackagesDir(configuration.Settings) - if packagesDir.NotExist() { - err := packagesDir.MkdirAll() - if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Failed to create data directory"), Cause: err} - } - } + pm := packagemanager.NewBuilder(dataDir, packagesDir, userPackagesDir, downloadsDir, tempDir, userAgent, downloaderConfig).Build() + lm, _ := librariesmanager.NewBuilder().Build() - // Create package manager - userAgent := "arduino-cli/" + version.VersionInfo.VersionString - for _, ua := range extraUserAgent { - userAgent += " " + ua + instance := &coreInstance{ + pm: pm, + lm: lm, + li: librariesindex.EmptyIndex, } - instance.pm = packagemanager.NewBuilder( - dataDir, - configuration.PackagesDir(configuration.Settings), - downloadsDir, - dataDir.Join("tmp"), - userAgent, - ).Build() - instance.lm = librariesmanager.NewLibraryManager( - dataDir, - downloadsDir, - ) // Save instance instancesMux.Lock() diff --git a/commands/lib.go b/commands/lib.go deleted file mode 100644 index 8794f4ea94a..00000000000 --- a/commands/lib.go +++ /dev/null @@ -1,46 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package commands - -/* -import ( - "fmt" - "context" -) - -func (s *Service) ListLibraries(ctx context.Context, in *ListLibrariesReq) (*ListLibrariesResp, error) { - if in.Instance == nil { - return nil, fmt.Errorf("invalid request") - } - instance, ok := instances[in.Instance.Id] - if !ok { - return nil, fmt.Errorf("instance not found") - } - libs := lib.ListLibraries(instance.lm, in.Updatable) - - result := []*pb.Library{} - for _, lib := range libs.Libraries { - result = append(result, &pb.Library{ - Name: lib.Library.Name, - Paragraph: lib.Library.Paragraph, - Precompiled: lib.Library.Precompiled, - }) - } - return &pb.ListLibrariesResp{ - Libraries: result, - }, nil -} -*/ diff --git a/commands/lib/download.go b/commands/lib/download.go deleted file mode 100644 index 1d30ba1dc48..00000000000 --- a/commands/lib/download.go +++ /dev/null @@ -1,71 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/httpclient" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/sirupsen/logrus" -) - -var tr = i18n.Tr - -// LibraryDownload executes the download of the library. -// A DownloadProgressCB callback function must be passed to monitor download progress. -func LibraryDownload(ctx context.Context, req *rpc.LibraryDownloadRequest, downloadCB rpc.DownloadProgressCB) (*rpc.LibraryDownloadResponse, error) { - logrus.Info("Executing `arduino-cli lib download`") - - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} - } - - logrus.Info("Preparing download") - - lib, err := findLibraryIndexRelease(lm, req) - if err != nil { - return nil, err - } - - if err := downloadLibrary(lm, lib, downloadCB, func(*rpc.TaskProgress) {}, "download"); err != nil { - return nil, err - } - - return &rpc.LibraryDownloadResponse{}, nil -} - -func downloadLibrary(lm *librariesmanager.LibrariesManager, libRelease *librariesindex.Release, - downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, queryParameter string) error { - - taskCB(&rpc.TaskProgress{Name: tr("Downloading %s", libRelease)}) - config, err := httpclient.GetDownloaderConfig() - if err != nil { - return &arduino.FailedDownloadError{Message: tr("Can't download library"), Cause: err} - } - if err := libRelease.Resource.Download(lm.DownloadsDir, config, libRelease.String(), downloadCB, queryParameter); err != nil { - return &arduino.FailedDownloadError{Message: tr("Can't download library"), Cause: err} - } - taskCB(&rpc.TaskProgress{Completed: true}) - - return nil -} diff --git a/commands/lib/install.go b/commands/lib/install.go deleted file mode 100644 index d06102b57a6..00000000000 --- a/commands/lib/install.go +++ /dev/null @@ -1,163 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - "errors" - "fmt" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" - "github.com/sirupsen/logrus" -) - -// LibraryInstall resolves the library dependencies, then downloads and installs the libraries into the install location. -func LibraryInstall(ctx context.Context, req *rpc.LibraryInstallRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return &arduino.InvalidInstanceError{} - } - - toInstall := map[string]*rpc.LibraryDependencyStatus{} - installLocation := libraries.FromRPCLibraryInstallLocation(req.GetInstallLocation()) - if req.NoDeps { - toInstall[req.Name] = &rpc.LibraryDependencyStatus{ - Name: req.Name, - VersionRequired: req.Version, - } - } else { - res, err := LibraryResolveDependencies(ctx, &rpc.LibraryResolveDependenciesRequest{ - Instance: req.Instance, - Name: req.Name, - Version: req.Version, - }) - if err != nil { - return err - } - - for _, dep := range res.Dependencies { - if existingDep, has := toInstall[dep.Name]; has { - if existingDep.VersionRequired != dep.VersionRequired { - err := errors.New( - tr("two different versions of the library %[1]s are required: %[2]s and %[3]s", - dep.Name, dep.VersionRequired, existingDep.VersionRequired)) - return &arduino.LibraryDependenciesResolutionFailedError{Cause: err} - } - } - toInstall[dep.Name] = dep - } - } - - // Find the libReleasesToInstall to install - libReleasesToInstall := map[*librariesindex.Release]*librariesmanager.LibraryInstallPlan{} - for _, lib := range toInstall { - libRelease, err := findLibraryIndexRelease(lm, &rpc.LibraryInstallRequest{ - Name: lib.Name, - Version: lib.VersionRequired, - }) - if err != nil { - return err - } - - installTask, err := lm.InstallPrerequisiteCheck(libRelease.Library.Name, libRelease.Version, installLocation) - if err != nil { - return err - } - if installTask.UpToDate { - taskCB(&rpc.TaskProgress{Message: tr("Already installed %s", libRelease), Completed: true}) - continue - } - - if req.GetNoOverwrite() { - if installTask.ReplacedLib != nil { - return fmt.Errorf(tr("Library %[1]s is already installed, but with a different version: %[2]s", libRelease, installTask.ReplacedLib)) - } - } - libReleasesToInstall[libRelease] = installTask - } - - for libRelease, installTask := range libReleasesToInstall { - // Checks if libRelease is the requested library and not a dependency - downloadReason := "depends" - if libRelease.GetName() == req.Name { - downloadReason = "install" - if installTask.ReplacedLib != nil { - downloadReason = "upgrade" - } - if installLocation == libraries.IDEBuiltIn { - downloadReason += "-builtin" - } - } - if err := downloadLibrary(lm, libRelease, downloadCB, taskCB, downloadReason); err != nil { - return err - } - if err := installLibrary(lm, libRelease, installTask, taskCB); err != nil { - return err - } - } - - if err := commands.Init(&rpc.InitRequest{Instance: req.Instance}, nil); err != nil { - return err - } - - return nil -} - -func installLibrary(lm *librariesmanager.LibrariesManager, libRelease *librariesindex.Release, installTask *librariesmanager.LibraryInstallPlan, taskCB rpc.TaskProgressCB) error { - taskCB(&rpc.TaskProgress{Name: tr("Installing %s", libRelease)}) - logrus.WithField("library", libRelease).Info("Installing library") - - if libReplaced := installTask.ReplacedLib; libReplaced != nil { - taskCB(&rpc.TaskProgress{Message: tr("Replacing %[1]s with %[2]s", libReplaced, libRelease)}) - if err := lm.Uninstall(libReplaced); err != nil { - return &arduino.FailedLibraryInstallError{ - Cause: fmt.Errorf("%s: %s", tr("could not remove old library"), err)} - } - } - if err := lm.Install(libRelease, installTask.TargetPath); err != nil { - return &arduino.FailedLibraryInstallError{Cause: err} - } - - taskCB(&rpc.TaskProgress{Message: tr("Installed %s", libRelease), Completed: true}) - return nil -} - -// ZipLibraryInstall FIXMEDOC -func ZipLibraryInstall(ctx context.Context, req *rpc.ZipLibraryInstallRequest, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if err := lm.InstallZipLib(ctx, paths.New(req.Path), req.Overwrite); err != nil { - return &arduino.FailedLibraryInstallError{Cause: err} - } - taskCB(&rpc.TaskProgress{Message: tr("Library installed"), Completed: true}) - return nil -} - -// GitLibraryInstall FIXMEDOC -func GitLibraryInstall(ctx context.Context, req *rpc.GitLibraryInstallRequest, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if err := lm.InstallGitLib(req.Url, req.Overwrite); err != nil { - return &arduino.FailedLibraryInstallError{Cause: err} - } - taskCB(&rpc.TaskProgress{Message: tr("Library installed"), Completed: true}) - return nil -} diff --git a/commands/lib/resolve_deps.go b/commands/lib/resolve_deps.go deleted file mode 100644 index 1c26d026f97..00000000000 --- a/commands/lib/resolve_deps.go +++ /dev/null @@ -1,82 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - "errors" - "sort" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// LibraryResolveDependencies FIXMEDOC -func LibraryResolveDependencies(ctx context.Context, req *rpc.LibraryResolveDependenciesRequest) (*rpc.LibraryResolveDependenciesResponse, error) { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} - } - - // Search the requested lib - reqLibRelease, err := findLibraryIndexRelease(lm, req) - if err != nil { - return nil, err - } - - // Extract all installed libraries - installedLibs := map[string]*libraries.Library{} - for _, lib := range listLibraries(lm, false, false) { - installedLibs[lib.Library.Name] = lib.Library - } - - // Resolve all dependencies... - deps := lm.Index.ResolveDependencies(reqLibRelease) - - // If no solution has been found - if len(deps) == 0 { - // Check if there is a problem with the first level deps - for _, directDep := range reqLibRelease.GetDependencies() { - if _, ok := lm.Index.Libraries[directDep.GetName()]; !ok { - err := errors.New(tr("dependency '%s' is not available", directDep.GetName())) - return nil, &arduino.LibraryDependenciesResolutionFailedError{Cause: err} - } - } - - // Otherwise there is no possible solution, the depends field has an invalid formula - return nil, &arduino.LibraryDependenciesResolutionFailedError{} - } - - res := []*rpc.LibraryDependencyStatus{} - for _, dep := range deps { - // ...and add information on currently installed versions of the libraries - installed := "" - if installedLib, has := installedLibs[dep.GetName()]; has { - installed = installedLib.Version.String() - } - res = append(res, &rpc.LibraryDependencyStatus{ - Name: dep.GetName(), - VersionRequired: dep.GetVersion().String(), - VersionInstalled: installed, - }) - } - sort.Slice(res, func(i, j int) bool { - return res[i].Name < res[j].Name - }) - return &rpc.LibraryResolveDependenciesResponse{Dependencies: res}, nil -} diff --git a/commands/lib/search_test.go b/commands/lib/search_test.go deleted file mode 100644 index affb9ba6911..00000000000 --- a/commands/lib/search_test.go +++ /dev/null @@ -1,96 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "strings" - "testing" - - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - paths "github.com/arduino/go-paths-helper" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -var customIndexPath = paths.New("testdata", "test1") -var fullIndexPath = paths.New("testdata", "full") - -func TestSearchLibrary(t *testing.T) { - lm := librariesmanager.NewLibraryManager(customIndexPath, nil) - lm.LoadIndex() - - resp := searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: "test"}, lm) - assert := assert.New(t) - assert.Equal(resp.GetStatus(), rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS) - assert.Equal(len(resp.GetLibraries()), 2) - assert.True(strings.Contains(resp.GetLibraries()[0].Name, "Test")) - assert.True(strings.Contains(resp.GetLibraries()[1].Name, "Test")) -} - -func TestSearchLibrarySimilar(t *testing.T) { - lm := librariesmanager.NewLibraryManager(customIndexPath, nil) - lm.LoadIndex() - - resp := searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: "arduino"}, lm) - assert := assert.New(t) - assert.Equal(resp.GetStatus(), rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS) - assert.Equal(len(resp.GetLibraries()), 2) - libs := map[string]*rpc.SearchedLibrary{} - for _, l := range resp.GetLibraries() { - libs[l.Name] = l - } - assert.Contains(libs, "ArduinoTestPackage") - assert.Contains(libs, "Arduino") -} - -func TestSearchLibraryFields(t *testing.T) { - lm := librariesmanager.NewLibraryManager(fullIndexPath, nil) - lm.LoadIndex() - - query := func(q string) []string { - libs := []string{} - for _, lib := range searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: q}, lm).Libraries { - libs = append(libs, lib.Name) - } - return libs - } - - res := query("SparkFun_u-blox_GNSS") - require.Len(t, res, 3) - require.Equal(t, "SparkFun u-blox Arduino Library", res[0]) - require.Equal(t, "SparkFun u-blox GNSS Arduino Library", res[1]) - require.Equal(t, "SparkFun u-blox SARA-R5 Arduino Library", res[2]) - - res = query("SparkFun u-blox GNSS") - require.Len(t, res, 3) - require.Equal(t, "SparkFun u-blox Arduino Library", res[0]) - require.Equal(t, "SparkFun u-blox GNSS Arduino Library", res[1]) - require.Equal(t, "SparkFun u-blox SARA-R5 Arduino Library", res[2]) - - res = query("painlessMesh") - require.Len(t, res, 1) - require.Equal(t, "Painless Mesh", res[0]) - - res = query("cristian maglie") - require.Len(t, res, 2) - require.Equal(t, "Arduino_ConnectionHandler", res[0]) - require.Equal(t, "FlashStorage_SAMD", res[1]) - - res = query("flashstorage") - require.Len(t, res, 19) - require.Equal(t, "FlashStorage", res[0]) -} diff --git a/commands/lib/uninstall.go b/commands/lib/uninstall.go deleted file mode 100644 index 63b54ba064e..00000000000 --- a/commands/lib/uninstall.go +++ /dev/null @@ -1,59 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" -) - -// LibraryUninstall FIXMEDOC -func LibraryUninstall(ctx context.Context, req *rpc.LibraryUninstallRequest, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - ref, err := createLibIndexReference(lm, req) - if err != nil { - return &arduino.InvalidLibraryError{Cause: err} - } - - libs := lm.FindByReference(ref, libraries.User) - - if len(libs) == 0 { - taskCB(&rpc.TaskProgress{Message: tr("Library %s is not installed", req.Name), Completed: true}) - return nil - } - - if len(libs) == 1 { - taskCB(&rpc.TaskProgress{Name: tr("Uninstalling %s", libs)}) - lm.Uninstall(libs[0]) - taskCB(&rpc.TaskProgress{Completed: true}) - return nil - } - - libsDir := paths.NewPathList() - for _, lib := range libs { - libsDir.Add(lib.InstallDir) - } - return &arduino.MultipleLibraryInstallDetected{ - LibName: libs[0].Name, - LibsDir: libsDir, - Message: tr("Automatic library uninstall can't be performed in this case, please manually remove them."), - } -} diff --git a/commands/lib/upgrade.go b/commands/lib/upgrade.go deleted file mode 100644 index fe7e938a040..00000000000 --- a/commands/lib/upgrade.go +++ /dev/null @@ -1,93 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" -) - -// LibraryUpgradeAll upgrades all the available libraries -func LibraryUpgradeAll(req *rpc.LibraryUpgradeAllRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return &arduino.InvalidInstanceError{} - } - - if err := upgrade(req.Instance, listLibraries(lm, true, false), downloadCB, taskCB); err != nil { - return err - } - - if err := commands.Init(&rpc.InitRequest{Instance: req.GetInstance()}, nil); err != nil { - return err - } - - return nil -} - -// LibraryUpgrade upgrades a library -func LibraryUpgrade(ctx context.Context, req *rpc.LibraryUpgradeRequest, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return &arduino.InvalidInstanceError{} - } - - // Get the library to upgrade - name := req.GetName() - lib := filterByName(listLibraries(lm, false, false), name) - if lib == nil { - // library not installed... - return &arduino.LibraryNotFoundError{Library: name} - } - if lib.Available == nil { - taskCB(&rpc.TaskProgress{Message: tr("Library %s is already at the latest version", name), Completed: true}) - return nil - } - - // Install update - return upgrade(req.Instance, []*installedLib{lib}, downloadCB, taskCB) -} - -func upgrade(instance *rpc.Instance, libs []*installedLib, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { - for _, lib := range libs { - libInstallReq := &rpc.LibraryInstallRequest{ - Instance: instance, - Name: lib.Library.Name, - Version: "", - NoDeps: false, - NoOverwrite: false, - } - err := LibraryInstall(context.Background(), libInstallReq, downloadCB, taskCB) - if err != nil { - return err - } - } - - return nil -} - -func filterByName(libs []*installedLib, name string) *installedLib { - for _, lib := range libs { - if lib.Library.Name == name { - return lib - } - } - return nil -} diff --git a/commands/lib/utils.go b/commands/lib/utils.go deleted file mode 100644 index fa8290ab997..00000000000 --- a/commands/lib/utils.go +++ /dev/null @@ -1,49 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package lib - -import ( - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/commands" -) - -type libraryReferencer interface { - commands.Versioned - GetName() string -} - -func createLibIndexReference(lm *librariesmanager.LibrariesManager, req libraryReferencer) (*librariesindex.Reference, error) { - version, err := commands.ParseVersion(req) - if err != nil { - return nil, &arduino.InvalidVersionError{Cause: err} - } - - return &librariesindex.Reference{Name: req.GetName(), Version: version}, nil -} - -func findLibraryIndexRelease(lm *librariesmanager.LibrariesManager, req libraryReferencer) (*librariesindex.Release, error) { - ref, err := createLibIndexReference(lm, req) - if err != nil { - return nil, err - } - lib := lm.Index.FindRelease(ref) - if lib == nil { - return nil, &arduino.LibraryNotFoundError{Library: ref.String()} - } - return lib, nil -} diff --git a/commands/monitor/monitor.go b/commands/monitor/monitor.go deleted file mode 100644 index 4da0c902868..00000000000 --- a/commands/monitor/monitor.go +++ /dev/null @@ -1,176 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package monitor - -import ( - "context" - "fmt" - "io" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - pluggableMonitor "github.com/arduino/arduino-cli/arduino/monitor" - "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/i18n" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-properties-orderedmap" - "github.com/sirupsen/logrus" -) - -var tr = i18n.Tr - -// PortProxy is an io.ReadWriteCloser that maps into the monitor port of the board -type PortProxy struct { - rw io.ReadWriter - changeSettingsCB func(setting, value string) error - closeCB func() error -} - -func (p *PortProxy) Read(buff []byte) (int, error) { - return p.rw.Read(buff) -} - -func (p *PortProxy) Write(buff []byte) (int, error) { - return p.rw.Write(buff) -} - -// Config sets the port configuration setting to the specified value -func (p *PortProxy) Config(setting, value string) error { - return p.changeSettingsCB(setting, value) -} - -// Close the port -func (p *PortProxy) Close() error { - return p.closeCB() -} - -// Monitor opens a communication port. It returns a PortProxy to communicate with the port and a PortDescriptor -// that describes the available configuration settings. -func Monitor(ctx context.Context, req *rpc.MonitorRequest) (*PortProxy, *pluggableMonitor.PortDescriptor, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, nil, &arduino.InvalidInstanceError{} - } - defer release() - - m, boardSettings, err := findMonitorAndSettingsForProtocolAndBoard(pme, req.GetPort().GetProtocol(), req.GetFqbn()) - if err != nil { - return nil, nil, err - } - - if err := m.Run(); err != nil { - return nil, nil, &arduino.FailedMonitorError{Cause: err} - } - - descriptor, err := m.Describe() - if err != nil { - m.Quit() - return nil, nil, &arduino.FailedMonitorError{Cause: err} - } - - // Apply user-requested settings - if portConfig := req.GetPortConfiguration(); portConfig != nil { - for _, setting := range portConfig.Settings { - boardSettings.Remove(setting.SettingId) // Remove board settings overridden by the user - if err := m.Configure(setting.SettingId, setting.Value); err != nil { - logrus.Errorf("Could not set configuration %s=%s: %s", setting.SettingId, setting.Value, err) - } - } - } - // Apply specific board settings - for setting, value := range boardSettings.AsMap() { - m.Configure(setting, value) - } - - monIO, err := m.Open(req.GetPort().GetAddress(), req.GetPort().GetProtocol()) - if err != nil { - m.Quit() - return nil, nil, &arduino.FailedMonitorError{Cause: err} - } - - logrus.Infof("Port %s successfully opened", req.GetPort().GetAddress()) - return &PortProxy{ - rw: monIO, - changeSettingsCB: m.Configure, - closeCB: func() error { - m.Close() - return m.Quit() - }, - }, descriptor, nil -} - -func findMonitorAndSettingsForProtocolAndBoard(pme *packagemanager.Explorer, protocol, fqbn string) (*pluggableMonitor.PluggableMonitor, *properties.Map, error) { - if protocol == "" { - return nil, nil, &arduino.MissingPortProtocolError{} - } - - var monitorDepOrRecipe *cores.MonitorDependency - boardSettings := properties.NewMap() - - // If a board is specified search the monitor in the board package first - if fqbn != "" { - fqbn, err := cores.ParseFQBN(fqbn) - if err != nil { - return nil, nil, &arduino.InvalidFQBNError{Cause: err} - } - - _, boardPlatform, _, boardProperties, _, err := pme.ResolveFQBN(fqbn) - if err != nil { - return nil, nil, &arduino.UnknownFQBNError{Cause: err} - } - - boardSettings = cores.GetMonitorSettings(protocol, boardProperties) - - if mon, ok := boardPlatform.Monitors[protocol]; ok { - monitorDepOrRecipe = mon - } else if recipe, ok := boardPlatform.MonitorsDevRecipes[protocol]; ok { - // If we have a recipe we must resolve it - cmdLine := boardProperties.ExpandPropsInString(recipe) - cmdArgs, err := properties.SplitQuotedString(cmdLine, `"'`, false) - if err != nil { - return nil, nil, &arduino.InvalidArgumentError{Message: tr("Invalid recipe in platform.txt"), Cause: err} - } - id := fmt.Sprintf("%s-%s", boardPlatform, protocol) - return pluggableMonitor.New(id, cmdArgs...), boardSettings, nil - } - } - - if monitorDepOrRecipe == nil { - // Otherwise look in all package for a suitable monitor - for _, platformRel := range pme.InstalledPlatformReleases() { - if mon, ok := platformRel.Monitors[protocol]; ok { - monitorDepOrRecipe = mon - break - } - } - } - - if monitorDepOrRecipe == nil { - return nil, nil, &arduino.NoMonitorAvailableForProtocolError{Protocol: protocol} - } - - // If it is a monitor dependency, resolve tool and create a monitor client - tool := pme.FindMonitorDependency(monitorDepOrRecipe) - if tool == nil { - return nil, nil, &arduino.MonitorNotFoundError{Monitor: monitorDepOrRecipe.String()} - } - - return pluggableMonitor.New( - monitorDepOrRecipe.Name, - tool.InstallDir.Join(monitorDepOrRecipe.Name).String(), - ), boardSettings, nil -} diff --git a/commands/service.go b/commands/service.go new file mode 100644 index 00000000000..fb226be6035 --- /dev/null +++ b/commands/service.go @@ -0,0 +1,42 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/version" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// NewArduinoCoreServer returns an implementation of the ArduinoCoreService gRPC service +// that uses the provided version string. +func NewArduinoCoreServer() rpc.ArduinoCoreServiceServer { + return &arduinoCoreServerImpl{settings: configuration.NewSettings()} +} + +type arduinoCoreServerImpl struct { + rpc.UnsafeArduinoCoreServiceServer // Force compile error for unimplemented methods + + // Settings holds configurations of the CLI and the gRPC consumers + settings *configuration.Settings +} + +// Version returns the version of the Arduino CLI +func (s *arduinoCoreServerImpl) Version(ctx context.Context, req *rpc.VersionRequest) (*rpc.VersionResponse, error) { + return &rpc.VersionResponse{Version: version.VersionInfo.VersionString}, nil +} diff --git a/commands/board/details.go b/commands/service_board_details.go similarity index 59% rename from commands/board/details.go rename to commands/service_board_details.go index 17314aa1432..02a82bb6ffe 100644 --- a/commands/board/details.go +++ b/commands/service_board_details.go @@ -13,64 +13,57 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package board +package commands import ( "context" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/utils" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/pkg/fqbn" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) -// Details returns all details for a board including tools and HW identifiers. +// BoardDetails returns all details for a board including tools and HW identifiers. // This command basically gather al the information and translates it into the required grpc struct properties -func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetailsResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) BoardDetails(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetailsResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() - fqbn, err := cores.ParseFQBN(req.GetFqbn()) + fqbn, err := fqbn.Parse(req.GetFqbn()) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } - boardPackage, boardPlatform, board, boardProperties, boardRefPlatform, err := pme.ResolveFQBN(fqbn) + boardPackage, boardPlatformRelease, board, boardProperties, _, err := pme.ResolveFQBN(fqbn) if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } details := &rpc.BoardDetailsResponse{} details.Name = board.Name() details.Fqbn = board.FQBN() details.PropertiesId = board.BoardID - details.Official = fqbn.Package == "arduino" + details.Official = fqbn.Vendor == "arduino" details.Version = board.PlatformRelease.Version.String() details.IdentificationProperties = []*rpc.BoardIdentificationProperties{} for _, p := range board.GetIdentificationProperties() { - details.IdentificationProperties = append(details.IdentificationProperties, &rpc.BoardIdentificationProperties{ + details.IdentificationProperties = append(details.GetIdentificationProperties(), &rpc.BoardIdentificationProperties{ Properties: p.AsMap(), }) } for _, k := range boardProperties.Keys() { v := boardProperties.Get(k) - details.BuildProperties = append(details.BuildProperties, k+"="+v) + details.BuildProperties = append(details.GetBuildProperties(), k+"="+v) } if !req.GetDoNotExpandBuildProperties() { - details.BuildProperties, _ = utils.ExpandBuildProperties(details.BuildProperties) + details.BuildProperties, _ = utils.ExpandBuildProperties(details.GetBuildProperties()) } - details.DebuggingSupported = boardProperties.ContainsKey("debug.executable") || - boardPlatform.Properties.ContainsKey("debug.executable") || - (boardRefPlatform != nil && boardRefPlatform.Properties.ContainsKey("debug.executable")) || - // HOTFIX: Remove me when the `arduino:samd` core is updated - boardPlatform.String() == "arduino:samd@1.8.9" || - boardPlatform.String() == "arduino:samd@1.8.8" - details.Package = &rpc.Package{ Name: boardPackage.Name, Maintainer: boardPackage.Maintainer, @@ -81,16 +74,16 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai } details.Platform = &rpc.BoardPlatform{ - Architecture: boardPlatform.Platform.Architecture, - Category: boardPlatform.Platform.Category, - Name: boardPlatform.Platform.Name, + Architecture: boardPlatformRelease.Platform.Architecture, + Category: boardPlatformRelease.Category, + Name: boardPlatformRelease.Name, } - if boardPlatform.Resource != nil { - details.Platform.Url = boardPlatform.Resource.URL - details.Platform.ArchiveFilename = boardPlatform.Resource.ArchiveFileName - details.Platform.Checksum = boardPlatform.Resource.Checksum - details.Platform.Size = boardPlatform.Resource.Size + if boardPlatformRelease.Resource != nil { + details.Platform.Url = boardPlatformRelease.Resource.URL + details.Platform.ArchiveFilename = boardPlatformRelease.Resource.ArchiveFileName + details.Platform.Checksum = boardPlatformRelease.Resource.Checksum + details.Platform.Size = boardPlatformRelease.Resource.Size } details.ConfigOptions = []*rpc.ConfigOption{} @@ -111,14 +104,14 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai } configValue.Value = value configValue.ValueLabel = values.Get(value) - configOption.Values = append(configOption.Values, configValue) + configOption.Values = append(configOption.GetValues(), configValue) } - details.ConfigOptions = append(details.ConfigOptions, configOption) + details.ConfigOptions = append(details.GetConfigOptions(), configOption) } details.ToolsDependencies = []*rpc.ToolsDependencies{} - for _, tool := range boardPlatform.ToolDependencies { + for _, tool := range boardPlatformRelease.ToolDependencies { toolRelease := pme.FindToolDependency(tool) var systems []*rpc.Systems if toolRelease != nil { @@ -132,7 +125,7 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai }) } } - details.ToolsDependencies = append(details.ToolsDependencies, &rpc.ToolsDependencies{ + details.ToolsDependencies = append(details.GetToolsDependencies(), &rpc.ToolsDependencies{ Name: tool.ToolName, Packager: tool.ToolPackager, Version: tool.ToolVersion.String(), @@ -140,10 +133,11 @@ func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetai }) } + details.DefaultProgrammerId = board.GetDefaultProgrammerID() details.Programmers = []*rpc.Programmer{} - for id, p := range boardPlatform.Programmers { - details.Programmers = append(details.Programmers, &rpc.Programmer{ - Platform: boardPlatform.Platform.Name, + for id, p := range boardPlatformRelease.Programmers { + details.Programmers = append(details.GetProgrammers(), &rpc.Programmer{ + Platform: boardPlatformRelease.Name, Id: id, Name: p.Name, }) diff --git a/commands/service_board_identify.go b/commands/service_board_identify.go new file mode 100644 index 00000000000..787de81cee3 --- /dev/null +++ b/commands/service_board_identify.go @@ -0,0 +1,217 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "regexp" + "sort" + "strings" + "time" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/inventory" + "github.com/arduino/arduino-cli/pkg/fqbn" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-properties-orderedmap" + "github.com/sirupsen/logrus" +) + +// BoardIdentify identifies the board based on the provided properties +func (s *arduinoCoreServerImpl) BoardIdentify(ctx context.Context, req *rpc.BoardIdentifyRequest) (*rpc.BoardIdentifyResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + + props := properties.NewFromHashmap(req.GetProperties()) + res, err := identify(ctx, pme, props, s.settings, !req.GetUseCloudApiForUnknownBoardDetection()) + if err != nil { + return nil, err + } + return &rpc.BoardIdentifyResponse{ + Boards: res, + }, nil +} + +// identify returns a list of boards checking first the installed platforms or the Cloud API +func identify(ctx context.Context, pme *packagemanager.Explorer, properties *properties.Map, settings *configuration.Settings, skipCloudAPI bool) ([]*rpc.BoardListItem, error) { + if properties == nil { + return nil, nil + } + + // first query installed cores through the Package Manager + boards := []*rpc.BoardListItem{} + logrus.Debug("Querying installed cores for board identification...") + for _, board := range pme.IdentifyBoard(properties) { + fqbn, err := fqbn.Parse(board.FQBN()) + if err != nil { + return nil, &cmderrors.InvalidFQBNError{Cause: err} + } + fqbn.Configs = board.IdentifyBoardConfiguration(properties) + + // We need the Platform maintaner for sorting so we set it here + platform := &rpc.Platform{ + Metadata: &rpc.PlatformMetadata{ + Maintainer: board.PlatformRelease.Platform.Package.Maintainer, + }, + } + boards = append(boards, &rpc.BoardListItem{ + Name: board.Name(), + Fqbn: fqbn.String(), + IsHidden: board.IsHidden(), + Platform: platform, + }) + } + + // if installed cores didn't recognize the board, try querying + // the builder API if the board is a USB device port + if len(boards) == 0 && !skipCloudAPI && !settings.SkipCloudApiForBoardDetection() { + items, err := identifyViaCloudAPI(ctx, properties, settings) + if err != nil { + // this is bad, but keep going + logrus.WithError(err).Debug("Error querying builder API") + } + boards = items + } + + // Sort by FQBN alphabetically + sort.Slice(boards, func(i, j int) bool { + return strings.ToLower(boards[i].GetFqbn()) < strings.ToLower(boards[j].GetFqbn()) + }) + + // Put Arduino boards before others in case there are non Arduino boards with identical VID:PID combination + sort.SliceStable(boards, func(i, j int) bool { + if boards[i].GetPlatform().GetMetadata().GetMaintainer() == "Arduino" && boards[j].GetPlatform().GetMetadata().GetMaintainer() != "Arduino" { + return true + } + return false + }) + + // We need the Board's Platform only for sorting but it shouldn't be present in the output + for _, board := range boards { + board.Platform = nil + } + + return boards, nil +} + +func identifyViaCloudAPI(ctx context.Context, props *properties.Map, settings *configuration.Settings) ([]*rpc.BoardListItem, error) { + // If the port is not USB do not try identification via cloud + if !props.ContainsKey("vid") || !props.ContainsKey("pid") { + return nil, nil + } + + logrus.Debug("Querying builder API for board identification...") + return cachedAPIByVidPid(ctx, props.Get("vid"), props.Get("pid"), settings) +} + +var ( + vidPidURL = "https://builder.arduino.cc/v3/boards/byVidPid" + validVidPid = regexp.MustCompile(`0[xX][a-fA-F\d]{4}`) +) + +func cachedAPIByVidPid(ctx context.Context, vid, pid string, settings *configuration.Settings) ([]*rpc.BoardListItem, error) { + var resp []*rpc.BoardListItem + + cacheKey := fmt.Sprintf("cache.builder-api.v3/boards/byvid/pid/%s/%s", vid, pid) + if cachedResp := inventory.Store.GetString(cacheKey + ".data"); cachedResp != "" { + ts := inventory.Store.GetTime(cacheKey + ".ts") + if time.Since(ts) < time.Hour*24 { + // Use cached response + if err := json.Unmarshal([]byte(cachedResp), &resp); err == nil { + return resp, nil + } + } + } + + resp, err := apiByVidPid(ctx, vid, pid, settings) // Perform API requrest + + if err == nil { + if cachedResp, err := json.Marshal(resp); err == nil { + inventory.Store.Set(cacheKey+".data", string(cachedResp)) + inventory.Store.Set(cacheKey+".ts", time.Now()) + inventory.WriteStore() + } + } + return resp, err +} + +func apiByVidPid(ctx context.Context, vid, pid string, settings *configuration.Settings) ([]*rpc.BoardListItem, error) { + // ensure vid and pid are valid before hitting the API + if !validVidPid.MatchString(vid) { + return nil, errors.New(i18n.Tr("Invalid vid value: '%s'", vid)) + } + if !validVidPid.MatchString(pid) { + return nil, errors.New(i18n.Tr("Invalid pid value: '%s'", pid)) + } + + url := fmt.Sprintf("%s/%s/%s", vidPidURL, vid, pid) + req, _ := http.NewRequest("GET", url, nil) + req.Header.Set("Content-Type", "application/json") + + httpClient, err := settings.NewHttpClient(ctx) + if err != nil { + return nil, fmt.Errorf("%s: %w", i18n.Tr("failed to initialize http client"), err) + } + + res, err := httpClient.Do(req) + if err != nil { + return nil, fmt.Errorf("%s: %w", i18n.Tr("error querying Arduino Cloud Api"), err) + } + if res.StatusCode == 404 { + // This is not an error, it just means that the board is not recognized + return nil, nil + } + if res.StatusCode >= 400 { + return nil, errors.New(i18n.Tr("the server responded with status %s", res.Status)) + } + + resp, err := io.ReadAll(res.Body) + if err != nil { + return nil, err + } + if err := res.Body.Close(); err != nil { + return nil, err + } + + var dat map[string]interface{} + if err := json.Unmarshal(resp, &dat); err != nil { + return nil, fmt.Errorf("%s: %w", i18n.Tr("error processing response from server"), err) + } + name, nameFound := dat["name"].(string) + fqbn, fbqnFound := dat["fqbn"].(string) + if !nameFound || !fbqnFound { + return nil, errors.New(i18n.Tr("wrong format in server response")) + } + + return []*rpc.BoardListItem{ + { + Name: name, + Fqbn: fqbn, + }, + }, nil +} diff --git a/commands/board/list_test.go b/commands/service_board_identify_test.go similarity index 74% rename from commands/board/list_test.go rename to commands/service_board_identify_test.go index 0f92e4c3896..31687359885 100644 --- a/commands/board/list_test.go +++ b/commands/service_board_identify_test.go @@ -13,27 +13,24 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package board +package commands import ( + "context" "fmt" "net/http" "net/http/httptest" "testing" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/cli/configuration" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" semver "go.bug.st/relaxed-semver" ) -func init() { - configuration.Settings = configuration.Init("") -} - func TestGetByVidPid(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, ` @@ -51,30 +48,36 @@ func TestGetByVidPid(t *testing.T) { defer ts.Close() vidPidURL = ts.URL - res, err := apiByVidPid("0xf420", "0XF069") + settings := configuration.NewSettings() + res, err := apiByVidPid(context.Background(), "0xf420", "0XF069", settings) require.Nil(t, err) require.Len(t, res, 1) - require.Equal(t, "Arduino/Genuino MKR1000", res[0].Name) - require.Equal(t, "arduino:samd:mkr1000", res[0].Fqbn) + require.Equal(t, "Arduino/Genuino MKR1000", res[0].GetName()) + require.Equal(t, "arduino:samd:mkr1000", res[0].GetFqbn()) // wrong vid (too long), wrong pid (not an hex value) - _, err = apiByVidPid("0xfffff", "0xDEFG") + + _, err = apiByVidPid(context.Background(), "0xfffff", "0xDEFG", settings) require.NotNil(t, err) } func TestGetByVidPidNotFound(t *testing.T) { + settings := configuration.NewSettings() + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) })) defer ts.Close() vidPidURL = ts.URL - res, err := apiByVidPid("0x0420", "0x0069") + res, err := apiByVidPid(context.Background(), "0x0420", "0x0069", settings) require.NoError(t, err) require.Empty(t, res) } func TestGetByVidPid5xx(t *testing.T) { + settings := configuration.NewSettings() + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("500 - Ooooops!")) @@ -82,27 +85,30 @@ func TestGetByVidPid5xx(t *testing.T) { defer ts.Close() vidPidURL = ts.URL - res, err := apiByVidPid("0x0420", "0x0069") + res, err := apiByVidPid(context.Background(), "0x0420", "0x0069", settings) require.NotNil(t, err) require.Equal(t, "the server responded with status 500 Internal Server Error", err.Error()) require.Len(t, res, 0) } func TestGetByVidPidMalformedResponse(t *testing.T) { + settings := configuration.NewSettings() + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "{}") })) defer ts.Close() vidPidURL = ts.URL - res, err := apiByVidPid("0x0420", "0x0069") + res, err := apiByVidPid(context.Background(), "0x0420", "0x0069", settings) require.NotNil(t, err) require.Equal(t, "wrong format in server response", err.Error()) require.Len(t, res, 0) } func TestBoardDetectionViaAPIWithNonUSBPort(t *testing.T) { - items, err := identifyViaCloudAPI(properties.NewMap()) + settings := configuration.NewSettings() + items, err := identifyViaCloudAPI(context.Background(), properties.NewMap(), settings) require.NoError(t, err) require.Empty(t, items) } @@ -114,7 +120,7 @@ func TestBoardIdentifySorting(t *testing.T) { defer paths.TempDir().Join("test").RemoveAll() // We don't really care about the paths in this case - pmb := packagemanager.NewBuilder(dataDir, dataDir, dataDir, dataDir, "test") + pmb := packagemanager.NewBuilder(dataDir, dataDir, nil, dataDir, dataDir, "test", downloader.GetDefaultConfig()) // Create some boards with identical VID:PID combination pack := pmb.GetOrCreatePackage("packager") @@ -150,14 +156,15 @@ func TestBoardIdentifySorting(t *testing.T) { pme, release := pm.NewExplorer() defer release() - res, err := identify(pme, &discovery.Port{Properties: idPrefs}) + settings := configuration.NewSettings() + res, err := identify(context.Background(), pme, idPrefs, settings, true) require.NoError(t, err) require.NotNil(t, res) require.Len(t, res, 4) // Verify expected sorting - require.Equal(t, res[0].Fqbn, "arduino:avr:assurdo") - require.Equal(t, res[1].Fqbn, "arduino:avr:nessuno") - require.Equal(t, res[2].Fqbn, "packager:platform:boardA") - require.Equal(t, res[3].Fqbn, "packager:platform:boardB") + require.Equal(t, res[0].GetFqbn(), "arduino:avr:assurdo") + require.Equal(t, res[1].GetFqbn(), "arduino:avr:nessuno") + require.Equal(t, res[2].GetFqbn(), "packager:platform:boardA") + require.Equal(t, res[3].GetFqbn(), "packager:platform:boardB") } diff --git a/commands/service_board_list.go b/commands/service_board_list.go new file mode 100644 index 00000000000..1d1bf7acff5 --- /dev/null +++ b/commands/service_board_list.go @@ -0,0 +1,159 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "time" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/discovery/discoverymanager" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" + "go.bug.st/f" +) + +// BoardList returns a list of boards found by the loaded discoveries. +// In case of errors partial results from discoveries that didn't fail +// are returned. +func (s *arduinoCoreServerImpl) BoardList(ctx context.Context, req *rpc.BoardListRequest) (*rpc.BoardListResponse, error) { + var fqbnFilter *fqbn.FQBN + if f := req.GetFqbn(); f != "" { + var err error + fqbnFilter, err = fqbn.Parse(f) + if err != nil { + return nil, &cmderrors.InvalidFQBNError{Cause: err} + } + } + + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + dm := pme.DiscoveryManager() + warnings := f.Map(dm.Start(), (error).Error) + release() + time.Sleep(time.Duration(req.GetTimeout()) * time.Millisecond) + + ports := []*rpc.DetectedPort{} + for _, port := range dm.List() { + resp, err := s.BoardIdentify(ctx, &rpc.BoardIdentifyRequest{ + Instance: req.GetInstance(), + Properties: port.Properties.AsMap(), + UseCloudApiForUnknownBoardDetection: !req.GetSkipCloudApiForBoardDetection(), + }) + if err != nil { + warnings = append(warnings, err.Error()) + } + + // boards slice can be empty at this point if neither the cores nor the + // API managed to recognize the connected board + b := &rpc.DetectedPort{ + Port: rpc.DiscoveryPortToRPC(port), + MatchingBoards: resp.GetBoards(), + } + + if fqbnFilter == nil || hasMatchingBoard(b, fqbnFilter) { + ports = append(ports, b) + } + } + return &rpc.BoardListResponse{ + Ports: ports, + Warnings: warnings, + }, nil +} + +func hasMatchingBoard(b *rpc.DetectedPort, fqbnFilter *fqbn.FQBN) bool { + for _, detectedBoard := range b.GetMatchingBoards() { + detectedFqbn, err := fqbn.Parse(detectedBoard.GetFqbn()) + if err != nil { + continue + } + if detectedFqbn.Match(fqbnFilter) { + return true + } + } + return false +} + +// BoardListWatchProxyToChan return a stream, to be used in BoardListWatch method, +// that proxies all the responses to a channel. +func BoardListWatchProxyToChan(ctx context.Context) (rpc.ArduinoCoreService_BoardListWatchServer, <-chan *rpc.BoardListWatchResponse) { + return streamResponseToChan[rpc.BoardListWatchResponse](ctx) +} + +// BoardListWatch FIXMEDOC +func (s *arduinoCoreServerImpl) BoardListWatch(req *rpc.BoardListWatchRequest, stream rpc.ArduinoCoreService_BoardListWatchServer) error { + syncSend := NewSynchronizedSend(stream.Send) + if req.GetInstance() == nil { + err := errors.New(i18n.Tr("no instance specified")) + syncSend.Send(&rpc.BoardListWatchResponse{ + EventType: "error", + Error: err.Error(), + }) + return err + } + + var watcher *discoverymanager.PortWatcher + { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + dm := pme.DiscoveryManager() + watcher, err = dm.Watch() + release() + if err != nil { + return err + } + } + + go func() { + for event := range watcher.Feed() { + port := &rpc.DetectedPort{ + Port: rpc.DiscoveryPortToRPC(event.Port), + } + + boardsError := "" + if event.Type == "add" { + resp, err := s.BoardIdentify(context.Background(), &rpc.BoardIdentifyRequest{ + Instance: req.GetInstance(), + Properties: event.Port.Properties.AsMap(), + UseCloudApiForUnknownBoardDetection: !req.GetSkipCloudApiForBoardDetection(), + }) + if err != nil { + boardsError = err.Error() + } else { + port.MatchingBoards = resp.GetBoards() + } + } + stream.Send(&rpc.BoardListWatchResponse{ + EventType: event.Type, + Port: port, + Error: boardsError, + }) + } + }() + + <-stream.Context().Done() + logrus.Trace("closed watch") + watcher.Close() + return nil +} diff --git a/commands/board/listall.go b/commands/service_board_listall.go similarity index 72% rename from commands/board/listall.go rename to commands/service_board_listall.go index d4118aca4e7..93df1f4e338 100644 --- a/commands/board/listall.go +++ b/commands/service_board_listall.go @@ -13,25 +13,24 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package board +package commands import ( "context" "sort" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/utils" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/utils" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) -// ListAll FIXMEDOC -func ListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListAllResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +// BoardListAll list all the boards provided by installed platforms. +func (s *arduinoCoreServerImpl) BoardListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListAllResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() @@ -46,29 +45,14 @@ func ListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListA continue } - installedVersion := installedPlatformRelease.Version.String() - - latestVersion := "" - if latestPlatformRelease := platform.GetLatestRelease(); latestPlatformRelease != nil { - latestVersion = latestPlatformRelease.Version.String() - } - rpcPlatform := &rpc.Platform{ - Id: platform.String(), - Installed: installedVersion, - Latest: latestVersion, - Name: platform.Name, - Maintainer: platform.Package.Maintainer, - Website: platform.Package.WebsiteURL, - Email: platform.Package.Email, - ManuallyInstalled: platform.ManuallyInstalled, - Indexed: platform.Indexed, - MissingMetadata: !installedPlatformRelease.HasMetadata(), + Metadata: platformToRPCPlatformMetadata(platform), + Release: platformReleaseToRPC(installedPlatformRelease), } toTest := []string{ platform.String(), - platform.Name, + installedPlatformRelease.Name, platform.Architecture, targetPackage.Name, targetPackage.Maintainer, @@ -85,7 +69,7 @@ func ListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListA continue } - list.Boards = append(list.Boards, &rpc.BoardListItem{ + list.Boards = append(list.GetBoards(), &rpc.BoardListItem{ Name: board.Name(), Fqbn: board.FQBN(), IsHidden: board.IsHidden(), diff --git a/commands/board/search.go b/commands/service_board_search.go similarity index 60% rename from commands/board/search.go rename to commands/service_board_search.go index da0553463fa..bbe4ca22529 100644 --- a/commands/board/search.go +++ b/commands/service_board_search.go @@ -13,58 +13,39 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package board +package commands import ( "context" "sort" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/utils" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/utils" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) -// Search returns all boards that match the search arg. +// BoardSearch returns all boards that match the search arg. // Boards are searched in all platforms, including those in the index that are not yet // installed. Note that platforms that are not installed don't include boards' FQBNs. // If no search argument is used all boards are returned. -func Search(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) BoardSearch(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() - res := &rpc.BoardSearchResponse{Boards: []*rpc.BoardListItem{}} + foundBoards := []*rpc.BoardListItem{} for _, targetPackage := range pme.GetPackages() { for _, platform := range targetPackage.Platforms { - latestPlatformRelease := platform.GetLatestRelease() + latestPlatformRelease := platform.GetLatestCompatibleRelease() installedPlatformRelease := pme.GetInstalledPlatformRelease(platform) if latestPlatformRelease == nil && installedPlatformRelease == nil { continue } - rpcPlatform := &rpc.Platform{ - Id: platform.String(), - Name: platform.Name, - Maintainer: platform.Package.Maintainer, - Website: platform.Package.WebsiteURL, - Email: platform.Package.Email, - ManuallyInstalled: platform.ManuallyInstalled, - Indexed: platform.Indexed, - } - - if latestPlatformRelease != nil { - rpcPlatform.Latest = latestPlatformRelease.Version.String() - } - if installedPlatformRelease != nil { - rpcPlatform.Installed = installedPlatformRelease.Version.String() - rpcPlatform.MissingMetadata = !installedPlatformRelease.HasMetadata() - } - // Platforms that are not installed don't have a list of boards // generated from their boards.txt file so we need two different // ways of reading board data. @@ -81,11 +62,14 @@ func Search(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchR continue } - res.Boards = append(res.Boards, &rpc.BoardListItem{ + foundBoards = append(foundBoards, &rpc.BoardListItem{ Name: board.Name(), Fqbn: board.FQBN(), IsHidden: board.IsHidden(), - Platform: rpcPlatform, + Platform: &rpc.Platform{ + Metadata: platformToRPCPlatformMetadata(platform), + Release: platformReleaseToRPC(installedPlatformRelease), + }, }) } } else if latestPlatformRelease != nil { @@ -95,20 +79,24 @@ func Search(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchR continue } - res.Boards = append(res.Boards, &rpc.BoardListItem{ - Name: strings.Trim(board.Name, " \n"), - Platform: rpcPlatform, + foundBoards = append(foundBoards, &rpc.BoardListItem{ + Name: strings.Trim(board.Name, " \n"), + Platform: &rpc.Platform{ + Metadata: platformToRPCPlatformMetadata(platform), + Release: platformReleaseToRPC(latestPlatformRelease), + }, }) } } } } - sort.Slice(res.Boards, func(i, j int) bool { - if res.Boards[i].Name != res.Boards[j].Name { - return res.Boards[i].Name < res.Boards[j].Name + sort.Slice(foundBoards, func(i, j int) bool { + if foundBoards[i].GetName() != foundBoards[j].GetName() { + return foundBoards[i].GetName() < foundBoards[j].GetName() } - return res.Boards[i].Platform.Id < res.Boards[j].Platform.Id + return foundBoards[i].GetPlatform().GetMetadata().GetId() < foundBoards[j].GetPlatform().GetMetadata().GetId() }) - return res, nil + + return &rpc.BoardSearchResponse{Boards: foundBoards}, nil } diff --git a/commands/service_cache_clean.go b/commands/service_cache_clean.go new file mode 100644 index 00000000000..5897ebd2e99 --- /dev/null +++ b/commands/service_cache_clean.go @@ -0,0 +1,32 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// CleanDownloadCacheDirectory clean the download cache directory (where archives are downloaded). +func (s *arduinoCoreServerImpl) CleanDownloadCacheDirectory(ctx context.Context, req *rpc.CleanDownloadCacheDirectoryRequest) (*rpc.CleanDownloadCacheDirectoryResponse, error) { + cachePath := s.settings.DownloadsDir() + err := cachePath.RemoveAll() + if err != nil { + return nil, err + } + return &rpc.CleanDownloadCacheDirectoryResponse{}, nil +} diff --git a/commands/service_check_for_updates.go b/commands/service_check_for_updates.go new file mode 100644 index 00000000000..cce5a4a02a1 --- /dev/null +++ b/commands/service_check_for_updates.go @@ -0,0 +1,112 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "strings" + "time" + + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/inventory" + "github.com/arduino/arduino-cli/internal/version" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + semver "go.bug.st/relaxed-semver" +) + +func (s *arduinoCoreServerImpl) CheckForArduinoCLIUpdates(ctx context.Context, req *rpc.CheckForArduinoCLIUpdatesRequest) (*rpc.CheckForArduinoCLIUpdatesResponse, error) { + currentVersion, err := semver.Parse(version.VersionInfo.VersionString) + if err != nil { + return nil, err + } + + if !s.shouldCheckForUpdate(currentVersion) && !req.GetForceCheck() { + return &rpc.CheckForArduinoCLIUpdatesResponse{}, nil + } + + defer func() { + // Always save the last time we checked for updates at the end + inventory.Store.Set("updater.last_check_time", time.Now()) + inventory.WriteStore() + }() + + latestVersion, err := semver.Parse(s.getLatestRelease(ctx)) + if err != nil { + return nil, err + } + + if currentVersion.GreaterThanOrEqual(latestVersion) { + // Current version is already good enough + return &rpc.CheckForArduinoCLIUpdatesResponse{}, nil + } + + return &rpc.CheckForArduinoCLIUpdatesResponse{ + NewestVersion: latestVersion.String(), + }, nil +} + +// shouldCheckForUpdate return true if it actually makes sense to check for new updates, +// false in all other cases. +func (s *arduinoCoreServerImpl) shouldCheckForUpdate(currentVersion *semver.Version) bool { + if strings.Contains(currentVersion.String(), "git-snapshot") || strings.Contains(currentVersion.String(), "nightly") { + // This is a dev build, no need to check for updates + return false + } + + if !s.settings.GetBool("updater.enable_notification") { + // Don't check if the user disabled the notification + return false + } + + if inventory.Store.IsSet("updater.last_check_time") && time.Since(inventory.Store.GetTime("updater.last_check_time")).Hours() < 24 { + // Checked less than 24 hours ago, let's wait + return false + } + + // Don't check when running on CI or on non interactive consoles + return !feedback.IsCI() && feedback.IsInteractive() && feedback.HasConsole() +} + +// getLatestRelease queries the official Arduino download server for the latest release, +// if there are no errors or issues a version string is returned, in all other case an empty string. +func (s *arduinoCoreServerImpl) getLatestRelease(ctx context.Context) string { + client, err := s.settings.NewHttpClient(ctx) + if err != nil { + return "" + } + + // We just use this URL to check if there's a new release available and + // never show it to the user, so it's fine to use the Linux one for all OSs. + URL := "https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_64bit.tar.gz" + res, err := client.Head(URL) + if err != nil { + // Yes, we ignore it + return "" + } + + // Get redirected URL + location := res.Request.URL.String() + + // The location header points to the latest release of the CLI, it's supposed to be formatted like this: + // https://downloads.arduino.cc/arduino-cli/arduino-cli_0.18.3_Linux_64bit.tar.gz + // so we split it to get the version, if there are not enough splits something must have gone wrong. + split := strings.Split(location, "_") + if len(split) < 2 { + return "" + } + + return split[1] +} diff --git a/commands/compile/compile.go b/commands/service_compile.go similarity index 51% rename from commands/compile/compile.go rename to commands/service_compile.go index 604a7acb215..ea36641c5e3 100644 --- a/commands/compile/compile.go +++ b/commands/service_compile.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package compile +package commands import ( "context" @@ -22,60 +22,87 @@ import ( "io" "sort" "strings" + "sync" + "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/builder" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/arduino/utils" - "github.com/arduino/arduino-cli/buildcache" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/builder" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/buildcache" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/arduino-cli/internal/inventory" + "github.com/arduino/arduino-cli/pkg/fqbn" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" ) -var tr = i18n.Tr +// CompilerServerToStreams creates a gRPC CompileServer that sends the responses to the provided streams. +// The returned callback function can be used to retrieve the builder result after the compilation is done. +func CompilerServerToStreams(ctx context.Context, stdOut, stderr io.Writer, progressCB rpc.TaskProgressCB) (server rpc.ArduinoCoreService_CompileServer, resultCB func() *rpc.BuilderResult) { + var builderResult *rpc.BuilderResult + stream := streamResponseToCallback(ctx, func(resp *rpc.CompileResponse) error { + if out := resp.GetOutStream(); len(out) > 0 { + if _, err := stdOut.Write(out); err != nil { + return err + } + } + if err := resp.GetErrStream(); len(err) > 0 { + if _, err := stderr.Write(err); err != nil { + return err + } + } + if result := resp.GetResult(); result != nil { + builderResult = result + } + if progress := resp.GetProgress(); progress != nil { + if progressCB != nil { + progressCB(progress) + } + } + return nil + }) + return stream, func() *rpc.BuilderResult { return builderResult } +} -// Compile FIXMEDOC -func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream io.Writer, progressCB rpc.TaskProgressCB) (r *rpc.CompileResponse, e error) { +// Compile performs a compilation of a sketch. +func (s *arduinoCoreServerImpl) Compile(req *rpc.CompileRequest, stream rpc.ArduinoCoreService_CompileServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) - // There is a binding between the export binaries setting and the CLI flag to explicitly set it, - // since we want this binding to work also for the gRPC interface we must read it here in this - // package instead of the cli/compile one, otherwise we'd lose the binding. - exportBinaries := configuration.Settings.GetBool("sketch.always_export_binaries") - // If we'd just read the binding in any case, even if the request sets the export binaries setting, - // the settings value would always overwrite the request one and it wouldn't have any effect - // setting it for individual requests. To solve this we use a wrapper.BoolValue to handle - // the optionality of this property, otherwise we would have no way of knowing if the property - // was set in the request or it's just the default boolean value. - if reqExportBinaries := req.GetExportBinaries(); reqExportBinaries != nil { - exportBinaries = reqExportBinaries.Value + exportBinaries := s.settings.SketchAlwaysExportBinaries() + if e := req.ExportBinaries; e != nil { + exportBinaries = *e } - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err } + release = sync.OnceFunc(release) defer release() - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} + if pme.Dirty() { + return &cmderrors.InstanceNeedsReinitialization{} + } + + lm, err := instances.GetLibraryManager(req.GetInstance()) + if err != nil { + return err } logrus.Tracef("Compile %s for %s started", req.GetSketchPath(), req.GetFqbn()) if req.GetSketchPath() == "" { - return nil, &arduino.MissingSketchPathError{} + return &cmderrors.MissingSketchPathError{} } sketchPath := paths.New(req.GetSketchPath()) sk, err := sketch.New(sketchPath) if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} + return &cmderrors.CantOpenSketchError{Cause: err} } fqbnIn := req.GetFqbn() @@ -87,36 +114,41 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream } } if fqbnIn == "" { - return nil, &arduino.MissingFQBNError{} + return &cmderrors.MissingFQBNError{} } - fqbn, err := cores.ParseFQBN(fqbnIn) + fqbn, err := fqbn.Parse(fqbnIn) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return &cmderrors.InvalidFQBNError{Cause: err} } _, targetPlatform, targetBoard, boardBuildProperties, buildPlatform, err := pme.ResolveFQBN(fqbn) if err != nil { if targetPlatform == nil { - return nil, &arduino.PlatformNotFoundError{ - Platform: fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch), - Cause: fmt.Errorf(tr("platform not installed")), + return &cmderrors.PlatformNotFoundError{ + Platform: fmt.Sprintf("%s:%s", fqbn.Vendor, fqbn.Architecture), + Cause: errors.New(i18n.Tr("platform not installed")), } } - return nil, &arduino.InvalidFQBNError{Cause: err} + return &cmderrors.InvalidFQBNError{Cause: err} } - r = &rpc.CompileResponse{} + r := &rpc.BuilderResult{} + defer func() { + syncSend.Send(&rpc.CompileResponse{ + Message: &rpc.CompileResponse_Result{Result: r}, + }) + }() r.BoardPlatform = targetPlatform.ToRPCPlatformReference() r.BuildPlatform = buildPlatform.ToRPCPlatformReference() // Setup sign keys if requested - if req.KeysKeychain != "" { + if req.GetKeysKeychain() != "" { boardBuildProperties.Set("build.keys.keychain", req.GetKeysKeychain()) } - if req.SignKey != "" { + if req.GetSignKey() != "" { boardBuildProperties.Set("build.keys.sign_key", req.GetSignKey()) } - if req.EncryptKey != "" { + if req.GetEncryptKey() != "" { boardBuildProperties.Set("build.keys.encrypt_key", req.GetEncryptKey()) } // At the current time we do not have a way of knowing if a board supports the secure boot or not, @@ -127,68 +159,112 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream signProp := boardBuildProperties.ContainsKey("build.keys.sign_key") encryptProp := boardBuildProperties.ContainsKey("build.keys.encrypt_key") // we verify that all the properties for the secure boot keys are defined or none of them is defined. - if !(keychainProp == signProp && signProp == encryptProp) { - return nil, fmt.Errorf(tr("Firmware encryption/signing requires all the following properties to be defined: %s", "build.keys.keychain, build.keys.sign_key, build.keys.encrypt_key")) + if keychainProp != signProp || signProp != encryptProp { + return errors.New(i18n.Tr("Firmware encryption/signing requires all the following properties to be defined: %s", "build.keys.keychain, build.keys.sign_key, build.keys.encrypt_key")) } - // Generate or retrieve build path + // Retrieve build path from user arguments var buildPath *paths.Path if buildPathArg := req.GetBuildPath(); buildPathArg != "" { buildPath = paths.New(req.GetBuildPath()).Canonical() if in, _ := buildPath.IsInsideDir(sk.FullPath); in && buildPath.IsDir() { if sk.AdditionalFiles, err = removeBuildFromSketchFiles(sk.AdditionalFiles, buildPath); err != nil { - return nil, err + return err } } } - if buildPath == nil { - buildPath = sk.DefaultBuildPath() - } - if err = buildPath.MkdirAll(); err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Cannot create build directory"), Cause: err} - } - buildcache.New(buildPath.Parent()).GetOrCreate(buildPath.Base()) - // cache is purged after compilation to not remove entries that might be required - defer maybePurgeBuildCache() + // If no build path has been set by the user: + // - set up the build cache directory + // - set the sketch build path inside the build cache directory. var coreBuildCachePath *paths.Path - if req.GetBuildCachePath() == "" { - coreBuildCachePath = paths.TempDir().Join("arduino", "cores") - } else { - buildCachePath, err := paths.New(req.GetBuildCachePath()).Abs() - if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Cannot create build cache directory"), Cause: err} + var extraCoreBuildCachePaths paths.PathList + if buildPath == nil { + var buildCachePath *paths.Path + if p := req.GetBuildCachePath(); p != "" { //nolint:staticcheck + buildCachePath = paths.New(p) + } else { + buildCachePath = s.settings.GetBuildCachePath() + } + if err := buildCachePath.ToAbs(); err != nil { + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Cannot create build cache directory"), Cause: err} } if err := buildCachePath.MkdirAll(); err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Cannot create build cache directory"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Cannot create build cache directory"), Cause: err} } - coreBuildCachePath = buildCachePath.Join("core") + coreBuildCachePath = buildCachePath.Join("cores") + + if len(req.GetBuildCacheExtraPaths()) == 0 { + extraCoreBuildCachePaths = s.settings.GetBuildCacheExtraPaths() + } else { + extraCoreBuildCachePaths = paths.NewPathList(req.GetBuildCacheExtraPaths()...) + } + for i, p := range extraCoreBuildCachePaths { + extraCoreBuildCachePaths[i] = p.Join("cores") + } + + buildPath = s.getDefaultSketchBuildPath(sk, buildCachePath) + buildcache.New(buildPath.Parent()).GetOrCreate(buildPath.Base()) + + // cache is purged after compilation to not remove entries that might be required + defer maybePurgeBuildCache( + s.settings.GetCompilationsBeforeBuildCachePurge(), + s.settings.GetBuildCacheTTL().Abs()) + } + if err = buildPath.MkdirAll(); err != nil { + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Cannot create build directory"), Cause: err} } if _, err := pme.FindToolsRequiredForBuild(targetPlatform, buildPlatform); err != nil { - return nil, err + return err } actualPlatform := buildPlatform otherLibrariesDirs := paths.NewPathList(req.GetLibraries()...) - otherLibrariesDirs.Add(configuration.LibrariesDir(configuration.Settings)) + otherLibrariesDirs.Add(s.settings.LibrariesDir()) var libsManager *librariesmanager.LibrariesManager if pme.GetProfile() != nil { libsManager = lm } + + outStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.CompileResponse{ + Message: &rpc.CompileResponse_OutStream{OutStream: data}, + }) + }) + defer outStream.Close() + errStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.CompileResponse{ + Message: &rpc.CompileResponse_ErrStream{ErrStream: data}, + }) + }) + defer errStream.Close() + progressCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.CompileResponse{ + Message: &rpc.CompileResponse_Progress{Progress: p}, + }) + } + var verbosity = logger.VerbosityNormal + if req.GetQuiet() { + verbosity = logger.VerbosityQuiet + } + if req.GetVerbose() { + verbosity = logger.VerbosityVerbose + } sketchBuilder, err := builder.NewBuilder( + ctx, sk, boardBuildProperties, buildPath, req.GetOptimizeForDebug(), coreBuildCachePath, + extraCoreBuildCachePaths, int(req.GetJobs()), req.GetBuildProperties(), - configuration.HardwareDirectories(configuration.Settings), - configuration.BuiltinToolsDirectories(configuration.Settings), + s.settings.HardwareDirectories(), otherLibrariesDirs, - configuration.IDEBuiltinLibrariesDir(configuration.Settings), + s.settings.IDEBuiltinLibrariesDir(), fqbn, req.GetClean(), req.GetSourceOverride(), @@ -196,20 +272,21 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream targetPlatform, actualPlatform, req.GetSkipLibrariesDiscovery(), libsManager, - paths.NewPathList(req.Library...), - outStream, errStream, req.GetVerbose(), req.GetWarnings(), + paths.NewPathList(req.GetLibrary()...), + outStream, errStream, verbosity, req.GetWarnings(), progressCB, + pme.GetEnvVarsForSpawnedProcess(), ) if err != nil { if strings.Contains(err.Error(), "invalid build properties") { - return nil, &arduino.InvalidArgumentError{Message: tr("Invalid build properties"), Cause: err} + return &cmderrors.InvalidArgumentError{Message: i18n.Tr("Invalid build properties"), Cause: err} } if errors.Is(err, builder.ErrSketchCannotBeLocatedInBuildPath) { - return r, &arduino.CompileFailedError{ - Message: tr("Sketch cannot be located in build path. Please specify a different build path"), + return &cmderrors.CompileFailedError{ + Message: i18n.Tr("Sketch cannot be located in build path. Please specify a different build path"), } } - return r, &arduino.CompileFailedError{Message: err.Error()} + return &cmderrors.CompileFailedError{Message: err.Error()} } defer func() { @@ -218,6 +295,10 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream } }() + defer func() { + r.Diagnostics = sketchBuilder.CompilerDiagnostics().ToRPC() + }() + defer func() { buildProperties := sketchBuilder.GetBuildProperties() if buildProperties == nil { @@ -226,27 +307,27 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream keys := buildProperties.Keys() sort.Strings(keys) for _, key := range keys { - r.BuildProperties = append(r.BuildProperties, key+"="+buildProperties.Get(key)) + r.BuildProperties = append(r.GetBuildProperties(), key+"="+buildProperties.Get(key)) } if !req.GetDoNotExpandBuildProperties() { - r.BuildProperties, _ = utils.ExpandBuildProperties(r.BuildProperties) + r.BuildProperties, _ = utils.ExpandBuildProperties(r.GetBuildProperties()) } }() // Just get build properties and exit if req.GetShowProperties() { - return r, nil + return nil } if req.GetPreprocess() { // Just output preprocessed source code and exit preprocessedSketch, err := sketchBuilder.Preprocess() if err != nil { - err = &arduino.CompileFailedError{Message: err.Error()} - return r, err + err = &cmderrors.CompileFailedError{Message: err.Error()} + return err } _, err = outStream.Write(preprocessedSketch) - return r, err + return err } defer func() { @@ -254,7 +335,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream for _, lib := range sketchBuilder.ImportedLibraries() { rpcLib, err := lib.ToRPCLibrary() if err != nil { - msg := tr("Error getting information for library %s", lib.Name) + ": " + err.Error() + "\n" + msg := i18n.Tr("Error getting information for library %s", lib.Name) + ": " + err.Error() + "\n" errStream.Write([]byte(msg)) } importedLibs = append(importedLibs, rpcLib) @@ -272,23 +353,27 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream // select the core name in case of "package:core" format normalizedFQBN, err := pme.NormalizeFQBN(fqbn) if err != nil { - outStream.Write([]byte(fmt.Sprintf("Could not normalize FQBN: %s\n", err))) + fmt.Fprintf(outStream, "Could not normalize FQBN: %s\n", err) normalizedFQBN = fqbn } - outStream.Write([]byte(fmt.Sprintf("FQBN: %s\n", normalizedFQBN))) + fmt.Fprintf(outStream, "FQBN: %s\n", normalizedFQBN) core = core[strings.Index(core, ":")+1:] - outStream.Write([]byte(tr("Using board '%[1]s' from platform in folder: %[2]s", targetBoard.BoardID, targetPlatform.InstallDir) + "\n")) - outStream.Write([]byte(tr("Using core '%[1]s' from platform in folder: %[2]s", core, buildPlatform.InstallDir) + "\n")) + outStream.Write([]byte(i18n.Tr("Using board '%[1]s' from platform in folder: %[2]s", targetBoard.BoardID, targetPlatform.InstallDir) + "\n")) + outStream.Write([]byte(i18n.Tr("Using core '%[1]s' from platform in folder: %[2]s", core, buildPlatform.InstallDir) + "\n")) outStream.Write([]byte("\n")) } if !targetBoard.Properties.ContainsKey("build.board") { outStream.Write([]byte( - tr("Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s", + i18n.Tr("Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s", targetBoard.String(), "'build.board'", sketchBuilder.GetBuildProperties().Get("build.board")) + "\n")) } + // Release package manager + release() + + // Perform the actual build if err := sketchBuilder.Build(); err != nil { - return r, &arduino.CompileFailedError{Message: err.Error()} + return &cmderrors.CompileFailedError{Message: err.Error()} } // If the export directory is set we assume you want to export the binaries @@ -300,9 +385,8 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream exportBinaries = false } if exportBinaries { - err := sketchBuilder.RunRecipe("recipe.hooks.savehex.presavehex", ".pattern", false) - if err != nil { - return r, err + if err := sketchBuilder.RunRecipe("recipe.hooks.savehex.presavehex", ".pattern", false); err != nil { + return err } exportPath := paths.New(req.GetExportDir()) @@ -316,44 +400,51 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream if !buildPath.EqualsTo(exportPath) { logrus.WithField("path", exportPath).Trace("Saving sketch to export path.") if err := exportPath.MkdirAll(); err != nil { - return r, &arduino.PermissionDeniedError{Message: tr("Error creating output dir"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error creating output dir"), Cause: err} } baseName, ok := sketchBuilder.GetBuildProperties().GetOk("build.project_name") // == "sketch.ino" if !ok { - return r, &arduino.MissingPlatformPropertyError{Property: "build.project_name"} + return &cmderrors.MissingPlatformPropertyError{Property: "build.project_name"} } buildFiles, err := sketchBuilder.GetBuildPath().ReadDir() if err != nil { - return r, &arduino.PermissionDeniedError{Message: tr("Error reading build directory"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error reading build directory"), Cause: err} } buildFiles.FilterPrefix(baseName) + buildFiles.FilterOutDirs() for _, buildFile := range buildFiles { exportedFile := exportPath.Join(buildFile.Base()) logrus.WithField("src", buildFile).WithField("dest", exportedFile).Trace("Copying artifact.") if err = buildFile.CopyTo(exportedFile); err != nil { - return r, &arduino.PermissionDeniedError{Message: tr("Error copying output file %s", buildFile), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error copying output file %s", buildFile), Cause: err} } } } - err = sketchBuilder.RunRecipe("recipe.hooks.savehex.postsavehex", ".pattern", false) - if err != nil { - return r, err + if err = sketchBuilder.RunRecipe("recipe.hooks.savehex.postsavehex", ".pattern", false); err != nil { + return err } } r.ExecutableSectionsSize = sketchBuilder.ExecutableSectionsSize().ToRPCExecutableSectionSizeArray() logrus.Tracef("Compile %s for %s successful", sk.Name, fqbnIn) + return nil +} - return r, nil +// getDefaultSketchBuildPath generates the default build directory for a given sketch. +// The sketch build path is inside the build cache path and is unique for each sketch. +// If overriddenBuildCachePath is nil the build cache path is taken from the settings. +func (s *arduinoCoreServerImpl) getDefaultSketchBuildPath(sk *sketch.Sketch, overriddenBuildCachePath *paths.Path) *paths.Path { + if overriddenBuildCachePath == nil { + overriddenBuildCachePath = s.settings.GetBuildCachePath() + } + return overriddenBuildCachePath.Join("sketches", sk.Hash()) } // maybePurgeBuildCache runs the build files cache purge if the policy conditions are met. -func maybePurgeBuildCache() { - - compilationsBeforePurge := configuration.Settings.GetUint("build_cache.compilations_before_purge") +func maybePurgeBuildCache(compilationsBeforePurge uint, cacheTTL time.Duration) { // 0 means never purge if compilationsBeforePurge == 0 { return @@ -366,7 +457,6 @@ func maybePurgeBuildCache() { return } inventory.Store.Set("build_cache.compilation_count_since_last_purge", 0) - cacheTTL := configuration.Settings.GetDuration("build_cache.ttl").Abs() buildcache.New(paths.TempDir().Join("arduino", "cores")).Purge(cacheTTL) buildcache.New(paths.TempDir().Join("arduino", "sketches")).Purge(cacheTTL) } diff --git a/commands/service_compile_test.go b/commands/service_compile_test.go new file mode 100644 index 00000000000..3eeb4521f1e --- /dev/null +++ b/commands/service_compile_test.go @@ -0,0 +1,32 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/arduino/sketch" + paths "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/assert" +) + +func TestGenBuildPath(t *testing.T) { + srv := NewArduinoCoreServer().(*arduinoCoreServerImpl) + want := srv.settings.GetBuildCachePath().Join("sketches", "ACBD18DB4CC2F85CEDEF654FCCC4A4D8") + act := srv.getDefaultSketchBuildPath(&sketch.Sketch{FullPath: paths.New("foo")}, nil) + assert.True(t, act.EquivalentTo(want)) + assert.Equal(t, "ACBD18DB4CC2F85CEDEF654FCCC4A4D8", (&sketch.Sketch{FullPath: paths.New("foo")}).Hash()) +} diff --git a/commands/service_debug.go b/commands/service_debug.go new file mode 100644 index 00000000000..740e06fd2c7 --- /dev/null +++ b/commands/service_debug.go @@ -0,0 +1,334 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "fmt" + "io" + "os" + "path/filepath" + "runtime" + "sync" + "sync/atomic" + "time" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + paths "github.com/arduino/go-paths-helper" + "github.com/djherbis/buffer" + "github.com/djherbis/nio/v3" + "github.com/sirupsen/logrus" + "google.golang.org/grpc/metadata" +) + +type debugServer struct { + ctx context.Context + req atomic.Pointer[rpc.GetDebugConfigRequest] + in io.Reader + inSignal bool + inData bool + inEvent *sync.Cond + inLock sync.Mutex + out io.Writer + resultCB func(*rpc.DebugResponse_Result) + done chan bool +} + +func (s *debugServer) Send(resp *rpc.DebugResponse) error { + if len(resp.GetData()) > 0 { + if _, err := s.out.Write(resp.GetData()); err != nil { + return err + } + } + if res := resp.GetResult(); res != nil { + s.resultCB(res) + s.close() + } + return nil +} + +func (s *debugServer) Recv() (r *rpc.DebugRequest, e error) { + if conf := s.req.Swap(nil); conf != nil { + return &rpc.DebugRequest{DebugRequest: conf}, nil + } + + s.inEvent.L.Lock() + for !s.inSignal && !s.inData { + s.inEvent.Wait() + } + defer s.inEvent.L.Unlock() + + if s.inSignal { + s.inSignal = false + return &rpc.DebugRequest{SendInterrupt: true}, nil + } + + if s.inData { + s.inData = false + buff := make([]byte, 4096) + n, err := s.in.Read(buff) + if err != nil { + return nil, err + } + return &rpc.DebugRequest{Data: buff[:n]}, nil + } + + panic("invalid state in debug") +} + +func (s *debugServer) close() { + close(s.done) +} + +func (s *debugServer) Context() context.Context { return s.ctx } +func (s *debugServer) RecvMsg(m any) error { return nil } +func (s *debugServer) SendHeader(metadata.MD) error { return nil } +func (s *debugServer) SendMsg(m any) error { return nil } +func (s *debugServer) SetHeader(metadata.MD) error { return nil } +func (s *debugServer) SetTrailer(metadata.MD) {} + +// DebugServerToStreams creates a debug server that proxies the data to the given io streams. +// The GetDebugConfigRequest is used to configure the debbuger. sig is a channel that can be +// used to send os.Interrupt to the debug process. resultCB is a callback function that will +// receive the Debug result and closes the debug server. +func DebugServerToStreams( + ctx context.Context, + req *rpc.GetDebugConfigRequest, + in io.Reader, out io.Writer, + sig chan os.Signal, + resultCB func(*rpc.DebugResponse_Result), +) rpc.ArduinoCoreService_DebugServer { + server := &debugServer{ + ctx: ctx, + in: in, + out: out, + resultCB: resultCB, + done: make(chan bool), + } + serverIn, clientOut := nio.Pipe(buffer.New(32 * 1024)) + server.in = serverIn + server.inEvent = sync.NewCond(&server.inLock) + server.req.Store(req) + go func() { + for { + select { + case <-sig: + server.inEvent.L.Lock() + server.inSignal = true + server.inEvent.Broadcast() + server.inEvent.L.Unlock() + case <-server.done: + return + } + } + }() + go func() { + defer clientOut.Close() + buff := make([]byte, 4096) + for { + n, readErr := in.Read(buff) + + server.inEvent.L.Lock() + var writeErr error + if readErr == nil { + _, writeErr = clientOut.Write(buff[:n]) + } + server.inData = true + server.inEvent.Broadcast() + server.inEvent.L.Unlock() + if readErr != nil || writeErr != nil { + // exit on error + return + } + } + }() + return server +} + +// Debug starts a debugging session. The first message passed through the `Debug` request must +// contain DebugRequest configuration params and no data. +func (s *arduinoCoreServerImpl) Debug(stream rpc.ArduinoCoreService_DebugServer) error { + // Utility functions + syncSend := NewSynchronizedSend(stream.Send) + sendResult := func(res *rpc.DebugResponse_Result) error { + return syncSend.Send(&rpc.DebugResponse{Message: &rpc.DebugResponse_Result_{Result: res}}) + } + sendData := func(data []byte) { + _ = syncSend.Send(&rpc.DebugResponse{Message: &rpc.DebugResponse_Data{Data: data}}) + } + + // Grab the first message + debugConfReqMsg, err := stream.Recv() + if err != nil { + return err + } + + // Ensure it's a config message and not data + debugConfReq := debugConfReqMsg.GetDebugRequest() + if debugConfReq == nil { + return errors.New(i18n.Tr("First message must contain debug request, not data")) + } + + // Launch debug recipe attaching stdin and out to grpc streaming + signalChan := make(chan os.Signal) + defer close(signalChan) + outStream := feedStreamTo(sendData) + defer outStream.Close() + inStream := consumeStreamFrom(func() ([]byte, error) { + for { + req, err := stream.Recv() + if err != nil { + return nil, err + } + if req.GetSendInterrupt() { + signalChan <- os.Interrupt + } + if data := req.GetData(); len(data) > 0 { + return data, nil + } + } + }) + + pme, release, err := instances.GetPackageManagerExplorer(debugConfReq.GetInstance()) + if err != nil { + return err + } + defer release() + + // Exec debugger + commandLine, err := s.getDebugCommandLine(debugConfReq, pme) + if err != nil { + return err + } + entry := logrus.NewEntry(logrus.StandardLogger()) + for i, param := range commandLine { + entry = entry.WithField(fmt.Sprintf("param%d", i), param) + } + entry.Debug("Executing debugger") + cmd, err := paths.NewProcess(pme.GetEnvVarsForSpawnedProcess(), commandLine...) + if err != nil { + return &cmderrors.FailedDebugError{Message: i18n.Tr("Cannot execute debug tool"), Cause: err} + } + in, err := cmd.StdinPipe() + if err != nil { + return sendResult(&rpc.DebugResponse_Result{Error: err.Error()}) + } + defer in.Close() + cmd.RedirectStdoutTo(io.Writer(outStream)) + cmd.RedirectStderrTo(io.Writer(outStream)) + if err := cmd.Start(); err != nil { + return sendResult(&rpc.DebugResponse_Result{Error: err.Error()}) + } + + go func() { + for sig := range signalChan { + cmd.Signal(sig) + } + }() + go func() { + io.Copy(in, inStream) + time.Sleep(time.Second) + cmd.Kill() + }() + if err := cmd.Wait(); err != nil { + return sendResult(&rpc.DebugResponse_Result{Error: err.Error()}) + } + return sendResult(&rpc.DebugResponse_Result{}) +} + +// getDebugCommandLine compose a debug command represented by a core recipe +func (s *arduinoCoreServerImpl) getDebugCommandLine(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer) ([]string, error) { + debugInfo, err := s.getDebugProperties(req, pme, false) + if err != nil { + return nil, err + } + + cmdArgs := []string{} + add := func(s string) { cmdArgs = append(cmdArgs, s) } + + // Add path to GDB Client to command line + var gdbPath *paths.Path + switch debugInfo.GetToolchain() { + case "gcc": + gdbexecutable := debugInfo.GetToolchainPrefix() + "-gdb" + if runtime.GOOS == "windows" { + gdbexecutable += ".exe" + } + gdbPath = paths.New(debugInfo.GetToolchainPath()).Join(gdbexecutable) + default: + return nil, &cmderrors.FailedDebugError{Message: i18n.Tr("Toolchain '%s' is not supported", debugInfo.GetToolchain())} + } + add(gdbPath.String()) + + // Set GDB interpreter (default value should be "console") + gdbInterpreter := req.GetInterpreter() + if gdbInterpreter == "" { + gdbInterpreter = "console" + } + add("--interpreter=" + gdbInterpreter) + if gdbInterpreter != "console" { + add("-ex") + add("set pagination off") + } + + // Add extra GDB execution commands + add("-ex") + add("set remotetimeout 5") + + // Extract path to GDB Server + switch debugInfo.GetServer() { + case "openocd": + var openocdConf rpc.DebugOpenOCDServerConfiguration + if err := debugInfo.GetServerConfiguration().UnmarshalTo(&openocdConf); err != nil { + return nil, err + } + + serverCmd := fmt.Sprintf(`target extended-remote | "%s"`, debugInfo.GetServerPath()) + + if cfg := openocdConf.GetScriptsDir(); cfg != "" { + serverCmd += fmt.Sprintf(` -s "%s"`, cfg) + } + + for _, script := range openocdConf.GetScripts() { + serverCmd += fmt.Sprintf(` --file "%s"`, script) + } + + serverCmd += ` -c "gdb_port pipe"` + serverCmd += ` -c "telnet_port 0"` + + add("-ex") + add(serverCmd) + + default: + return nil, &cmderrors.FailedDebugError{Message: i18n.Tr("GDB server '%s' is not supported", debugInfo.GetServer())} + } + + // Add executable + add(debugInfo.GetExecutable()) + + // Transform every path to forward slashes (on Windows some tools further + // escapes the command line so the backslash "\" gets in the way). + for i, param := range cmdArgs { + cmdArgs[i] = filepath.ToSlash(param) + } + + return cmdArgs, nil +} diff --git a/commands/service_debug_config.go b/commands/service_debug_config.go new file mode 100644 index 00000000000..4f69fc791e6 --- /dev/null +++ b/commands/service_debug_config.go @@ -0,0 +1,366 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "reflect" + "slices" + "strconv" + "strings" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/arduino/go-properties-orderedmap" + "github.com/sirupsen/logrus" + "google.golang.org/protobuf/types/known/anypb" +) + +// GetDebugConfig returns metadata to start debugging with the specified board +func (s *arduinoCoreServerImpl) GetDebugConfig(ctx context.Context, req *rpc.GetDebugConfigRequest) (*rpc.GetDebugConfigResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + return s.getDebugProperties(req, pme, false) +} + +// IsDebugSupported checks if the given board/programmer configuration supports debugging. +func (s *arduinoCoreServerImpl) IsDebugSupported(ctx context.Context, req *rpc.IsDebugSupportedRequest) (*rpc.IsDebugSupportedResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + configRequest := &rpc.GetDebugConfigRequest{ + Instance: req.GetInstance(), + Fqbn: req.GetFqbn(), + SketchPath: "", + Port: req.GetPort(), + Interpreter: req.GetInterpreter(), + ImportDir: "", + Programmer: req.GetProgrammer(), + DebugProperties: req.GetDebugProperties(), + } + expectedOutput, err := s.getDebugProperties(configRequest, pme, true) + var x *cmderrors.FailedDebugError + if errors.As(err, &x) { + return &rpc.IsDebugSupportedResponse{DebuggingSupported: false}, nil + } + if err != nil { + return nil, err + } + + // Compute the minimum FQBN required to get the same debug configuration. + // (i.e. the FQBN cleaned up of the options that do not affect the debugger configuration) + minimumFQBN := fqbn.MustParse(req.GetFqbn()) + for _, config := range minimumFQBN.Configs.Keys() { + checkFQBN := minimumFQBN.Clone() + checkFQBN.Configs.Remove(config) + configRequest.Fqbn = checkFQBN.String() + checkOutput, err := s.getDebugProperties(configRequest, pme, true) + if err == nil && reflect.DeepEqual(expectedOutput, checkOutput) { + minimumFQBN.Configs.Remove(config) + } + } + return &rpc.IsDebugSupportedResponse{ + DebuggingSupported: true, + DebugFqbn: minimumFQBN.String(), + }, nil +} + +func (s *arduinoCoreServerImpl) getDebugProperties(req *rpc.GetDebugConfigRequest, pme *packagemanager.Explorer, skipSketchChecks bool) (*rpc.GetDebugConfigResponse, error) { + var ( + sketchName string + sketchDefaultFQBN string + sketchDefaultBuildPath *paths.Path + ) + if !skipSketchChecks { + // TODO: make a generic function to extract sketch from request + // and remove duplication in commands/compile.go + if req.GetSketchPath() == "" { + return nil, &cmderrors.MissingSketchPathError{} + } + sketchPath := paths.New(req.GetSketchPath()) + sk, err := sketch.New(sketchPath) + if err != nil { + return nil, &cmderrors.CantOpenSketchError{Cause: err} + } + sketchName = sk.Name + sketchDefaultFQBN = sk.GetDefaultFQBN() + sketchDefaultBuildPath = s.getDefaultSketchBuildPath(sk, nil) + } else { + // Use placeholder sketch data + sketchName = "Sketch" + sketchDefaultFQBN = "" + sketchDefaultBuildPath = paths.New("SketchBuildPath") + } + + // XXX Remove this code duplication!! + fqbnIn := req.GetFqbn() + if fqbnIn == "" { + fqbnIn = sketchDefaultFQBN + } + if fqbnIn == "" { + return nil, &cmderrors.MissingFQBNError{} + } + fqbn, err := fqbn.Parse(fqbnIn) + if err != nil { + return nil, &cmderrors.InvalidFQBNError{Cause: err} + } + + // Find target board and board properties + _, platformRelease, _, boardProperties, referencedPlatformRelease, err := pme.ResolveFQBN(fqbn) + if err != nil { + return nil, &cmderrors.UnknownFQBNError{Cause: err} + } + + // Build configuration for debug + toolProperties := properties.NewMap() + if referencedPlatformRelease != nil { + toolProperties.Merge(referencedPlatformRelease.Properties) + } + toolProperties.Merge(platformRelease.Properties) + toolProperties.Merge(platformRelease.RuntimeProperties()) + toolProperties.Merge(boardProperties) + + for _, tool := range pme.GetAllInstalledToolsReleases() { + toolProperties.Merge(tool.RuntimeProperties()) + } + if requiredTools, err := pme.FindToolsRequiredForBuild(platformRelease, referencedPlatformRelease); err == nil { + for _, requiredTool := range requiredTools { + logrus.WithField("tool", requiredTool).Info("Tool required for debug") + toolProperties.Merge(requiredTool.RuntimeProperties()) + } + } + + if req.GetProgrammer() != "" { + if p, ok := platformRelease.Programmers[req.GetProgrammer()]; ok { + toolProperties.Merge(p.Properties) + } else if refP, ok := referencedPlatformRelease.Programmers[req.GetProgrammer()]; ok { + toolProperties.Merge(refP.Properties) + } else { + return nil, &cmderrors.ProgrammerNotFoundError{Programmer: req.GetProgrammer()} + } + } + + var importPath *paths.Path + if importDir := req.GetImportDir(); importDir != "" { + importPath = paths.New(importDir) + } else { + importPath = sketchDefaultBuildPath + } + if !skipSketchChecks { + if !importPath.Exist() { + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Compiled sketch not found in %s", importPath)} + } + if !importPath.IsDir() { + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Expected compiled sketch in directory %s, but is a file instead", importPath)} + } + } + toolProperties.SetPath("build.path", importPath) + toolProperties.Set("build.project_name", sketchName+".ino") + + // Set debug port property + port := req.GetPort() + if port.GetAddress() != "" { + toolProperties.Set("debug.port", port.GetAddress()) + portFile := strings.TrimPrefix(port.GetAddress(), "/dev/") + toolProperties.Set("debug.port.file", portFile) + } + + // Extract and expand all debugging properties + debugProperties := properties.NewMap() + for k, v := range toolProperties.SubTree("debug").AsMap() { + debugProperties.Set(k, toolProperties.ExpandPropsInString(v)) + } + if debugAdditionalConfig, ok := toolProperties.GetOk("debug.additional_config"); ok { + debugAdditionalConfig = toolProperties.ExpandPropsInString(debugAdditionalConfig) + for k, v := range toolProperties.SubTree(debugAdditionalConfig).AsMap() { + debugProperties.Set(k, toolProperties.ExpandPropsInString(v)) + } + } + + // Add user provided custom debug properties + if p, err := properties.LoadFromSlice(req.GetDebugProperties()); err == nil { + debugProperties.Merge(p) + } else { + return nil, fmt.Errorf("invalid build properties: %w", err) + } + + if !debugProperties.ContainsKey("executable") || debugProperties.Get("executable") == "" { + return nil, &cmderrors.FailedDebugError{Message: i18n.Tr("Debugging not supported for board %s", req.GetFqbn())} + } + + server := debugProperties.Get("server") + toolchain := debugProperties.Get("toolchain") + + var serverConfiguration anypb.Any + switch server { + case "openocd": + openocdProperties := debugProperties.SubTree("server." + server) + scripts := openocdProperties.ExtractSubIndexLists("scripts") + if s := openocdProperties.Get("script"); s != "" && len(scripts) == 0 { + // backward compatibility: use "script" property if there are no "scipts.N" + scripts = append(scripts, s) + } + openocdConf := &rpc.DebugOpenOCDServerConfiguration{ + Path: openocdProperties.Get("path"), + ScriptsDir: openocdProperties.Get("scripts_dir"), + Scripts: scripts, + } + if err := serverConfiguration.MarshalFrom(openocdConf); err != nil { + return nil, err + } + } + + var toolchainConfiguration anypb.Any + switch toolchain { + case "gcc": + gccConf := &rpc.DebugGCCToolchainConfiguration{} + if err := toolchainConfiguration.MarshalFrom(gccConf); err != nil { + return nil, err + } + } + + toolchainPrefix := debugProperties.Get("toolchain.prefix") + // HOTFIX: for samd (and maybe some other platforms). We should keep this for a reasonable + // amount of time to allow seamless platforms update. + toolchainPrefix = strings.TrimSuffix(toolchainPrefix, "-") + + customConfigs := map[string]string{} + if cortexDebugProps := debugProperties.SubTree("cortex-debug.custom"); cortexDebugProps.Size() > 0 { + customConfigs["cortex-debug"] = convertToJsonMap(cortexDebugProps) + } + return &rpc.GetDebugConfigResponse{ + Executable: debugProperties.Get("executable"), + Server: server, + ServerPath: debugProperties.Get("server." + server + ".path"), + ServerConfiguration: &serverConfiguration, + SvdFile: debugProperties.Get("svd_file"), + Toolchain: toolchain, + ToolchainPath: debugProperties.Get("toolchain.path"), + ToolchainPrefix: toolchainPrefix, + ToolchainConfiguration: &toolchainConfiguration, + CustomConfigs: customConfigs, + Programmer: req.GetProgrammer(), + }, nil +} + +// Extract a JSON from a given properties.Map and converts key-indexed arrays +// like: +// +// my.indexed.array.0=first +// my.indexed.array.1=second +// my.indexed.array.2=third +// +// into the corresponding JSON arrays. +// If a value should be converted into a JSON type different from string, the value +// may be prefiex with "[boolean]", "[number]", or "[object]": +// +// my.stringValue=a string +// my.booleanValue=[boolean]true +// my.numericValue=[number]20 +func convertToJsonMap(in *properties.Map) string { + data, _ := json.MarshalIndent(convertToRawInterface(in), "", " ") + return string(data) +} + +func allNumerics(in []string) bool { + for _, i := range in { + for _, c := range i { + if c < '0' || c > '9' { + return false + } + } + } + return true +} + +func convertToRawInterface(in *properties.Map) any { + subtrees := in.FirstLevelOf() + keys := in.FirstLevelKeys() + + if allNumerics(keys) { + // Compose an array + res := []any{} + slices.SortFunc(keys, func(x, y string) int { + nx, _ := strconv.Atoi(x) + ny, _ := strconv.Atoi(y) + return nx - ny + }) + for _, k := range keys { + switch { + case subtrees[k] != nil: + res = append(res, convertToRawInterface(subtrees[k])) + default: + res = append(res, convertToRawValue(in.Get(k))) + } + } + return res + } + + // Compose an object + res := map[string]any{} + for _, k := range keys { + switch { + case subtrees[k] != nil: + res[k] = convertToRawInterface(subtrees[k]) + default: + res[k] = convertToRawValue(in.Get(k)) + } + } + return res +} + +func convertToRawValue(v string) any { + switch { + case strings.HasPrefix(v, "[boolean]"): + v = strings.TrimSpace(strings.TrimPrefix(v, "[boolean]")) + if strings.EqualFold(v, "true") { + return true + } else if strings.EqualFold(v, "false") { + return false + } + case strings.HasPrefix(v, "[number]"): + v = strings.TrimPrefix(v, "[number]") + if i, err := strconv.Atoi(v); err == nil { + return i + } else if f, err := strconv.ParseFloat(v, 64); err == nil { + return f + } + case strings.HasPrefix(v, "[object]"): + v = strings.TrimPrefix(v, "[object]") + var o interface{} + if err := json.Unmarshal([]byte(v), &o); err == nil { + return o + } + case strings.HasPrefix(v, "[string]"): + v = strings.TrimPrefix(v, "[string]") + } + // default or conversion error, return string as is + return v +} diff --git a/commands/debug/debug_test.go b/commands/service_debug_test.go similarity index 52% rename from commands/debug/debug_test.go rename to commands/service_debug_test.go index 0b99a105c64..f389d1486dc 100644 --- a/commands/debug/debug_test.go +++ b/commands/service_debug_test.go @@ -12,7 +12,7 @@ // modify or otherwise use the software for commercial activities involving the // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package debug +package commands import ( "fmt" @@ -21,21 +21,23 @@ import ( "strings" "testing" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" + "github.com/arduino/go-properties-orderedmap" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" ) func TestGetCommandLine(t *testing.T) { - customHardware := paths.New("testdata", "custom_hardware") - dataDir := paths.New("testdata", "data_dir", "packages") + customHardware := paths.New("testdata", "debug", "custom_hardware") + dataDir := paths.New("testdata", "debug", "data_dir", "packages") sketch := "hello" - sketchPath := paths.New("testdata", sketch) + sketchPath := paths.New("testdata", "debug", sketch) require.NoError(t, sketchPath.ToAbs()) - pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test") + pmb := packagemanager.NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pmb.LoadHardwareFromDirectory(dataDir) @@ -63,7 +65,17 @@ func TestGetCommandLine(t *testing.T) { pm := pmb.Build() pme, release := pm.NewExplorer() defer release() - command, err := getCommandLine(req, pme) + + srv := NewArduinoCoreServer().(*arduinoCoreServerImpl) + { + // Check programmer not found + req.Programmer = "not-existent" + _, err := srv.getDebugCommandLine(req, pme) + require.Error(t, err) + } + + req.Programmer = "edbg" + command, err := srv.getDebugCommandLine(req, pme) require.Nil(t, err) commandToTest := strings.Join(command, " ") require.Equal(t, filepath.FromSlash(goldCommand), filepath.FromSlash(commandToTest)) @@ -76,6 +88,7 @@ func TestGetCommandLine(t *testing.T) { SketchPath: sketchPath.String(), Interpreter: "mi1", ImportDir: sketchPath.Join("build", "arduino-test.samd.mkr1000").String(), + Programmer: "edbg", } goldCommand2 := fmt.Sprintf("%s/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb%s", dataDir, toolExtension) + @@ -85,8 +98,104 @@ func TestGetCommandLine(t *testing.T) { fmt.Sprintf(" --file \"%s/arduino-test/samd/variants/mkr1000/openocd_scripts/arduino_zero.cfg\"", customHardware) + fmt.Sprintf(" -c \"gdb_port pipe\" -c \"telnet_port 0\" %s/build/arduino-test.samd.mkr1000/hello.ino.elf", sketchPath) - command2, err := getCommandLine(req2, pme) + command2, err := srv.getDebugCommandLine(req2, pme) assert.Nil(t, err) commandToTest2 := strings.Join(command2, " ") assert.Equal(t, filepath.FromSlash(goldCommand2), filepath.FromSlash(commandToTest2)) } + +func TestConvertToJSONMap(t *testing.T) { + testIn := properties.NewFromHashmap(map[string]string{ + "k": "v", + "string": "[string]aaa", + "bool": "[boolean]true", + "number": "[number]10", + "number2": "[number]10.2", + "object": `[object]{ "key":"value", "bool":true }`, + "array.0": "first", + "array.1": "second", + "array.2": "[boolean]true", + "array.3": "[number]10", + "array.4": `[object]{ "key":"value", "bool":true }`, + "array.5.k": "v", + "array.5.bool": "[boolean]true", + "array.5.number": "[number]10", + "array.5.number2": "[number]10.2", + "array.5.object": `[object]{ "key":"value", "bool":true }`, + "array.6.sub.k": "v", + "array.6.sub.bool": "[boolean]true", + "array.6.sub.number": "[number]10", + "array.6.sub.number2": "[number]10.2", + "array.6.sub.object": `[object]{ "key":"value", "bool":true }`, + "array.7.0": "v", + "array.7.1": "[boolean]true", + "array.7.2": "[number]10", + "array.7.3": "[number]10.2", + "array.7.4": `[object]{ "key":"value", "bool":true }`, + "array.8.array.0": "v", + "array.8.array.1": "[boolean]true", + "array.8.array.2": "[number]10", + "array.8.array.3": "[number]10.2", + "array.8.array.4": `[object]{ "key":"value", "bool":true }`, + "sub.k": "v", + "sub.bool": "[boolean]true", + "sub.number": "[number]10", + "sub.number2": "[number]10.2", + "sub.object": `[object]{ "key":"value", "bool":true }`, + }) + jsonString := convertToJsonMap(testIn) + require.JSONEq(t, `{ + "k": "v", + "string": "aaa", + "bool": true, + "number": 10, + "number2": 10.2, + "object": { "key":"value", "bool":true }, + "array": [ + "first", + "second", + true, + 10, + { "key":"value", "bool":true }, + { + "k": "v", + "bool": true, + "number": 10, + "number2": 10.2, + "object": { "key":"value", "bool":true } + }, + { + "sub": { + "k": "v", + "bool": true, + "number": 10, + "number2": 10.2, + "object": { "key":"value", "bool":true } + } + }, + [ + "v", + true, + 10, + 10.2, + { "key":"value", "bool":true } + ], + { + "array": [ + "v", + true, + 10, + 10.2, + { "key":"value", "bool":true } + ] + } + ], + "sub": { + "k": "v", + "bool": true, + "number": 10, + "number2": 10.2, + "object": { "key":"value", "bool":true } + } + }`, jsonString) +} diff --git a/commands/service_library_download.go b/commands/service_library_download.go new file mode 100644 index 00000000000..4253be8cca1 --- /dev/null +++ b/commands/service_library_download.go @@ -0,0 +1,103 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" +) + +// LibraryDownloadStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryDownload that sends +// all responses to the callback function. +func LibraryDownloadStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB) rpc.ArduinoCoreService_LibraryDownloadServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryDownloadResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + return nil + }) +} + +// LibraryDownload downloads a library +func (s *arduinoCoreServerImpl) LibraryDownload(req *rpc.LibraryDownloadRequest, stream rpc.ArduinoCoreService_LibraryDownloadServer) error { + syncSend := NewSynchronizedSend(stream.Send) + ctx := stream.Context() + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.LibraryDownloadResponse{ + Message: &rpc.LibraryDownloadResponse_Progress{Progress: p}, + }) + } + + var downloadsDir *paths.Path + if pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()); err != nil { + return err + } else { + downloadsDir = pme.DownloadDir + release() + } + + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return err + } + + version, err := parseVersion(req.GetVersion()) + if err != nil { + return err + } + + lib, err := li.FindRelease(req.GetName(), version) + if err != nil { + return err + } + + if err := downloadLibrary(ctx, downloadsDir, lib, downloadCB, func(*rpc.TaskProgress) {}, "download", s.settings); err != nil { + return err + } + + return syncSend.Send(&rpc.LibraryDownloadResponse{ + Message: &rpc.LibraryDownloadResponse_Result_{ + Result: &rpc.LibraryDownloadResponse_Result{}, + }, + }) +} + +func downloadLibrary( + ctx context.Context, + downloadsDir *paths.Path, libRelease *librariesindex.Release, + downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, + queryParameter string, + settings *configuration.Settings, +) error { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading %s", libRelease)}) + config, err := settings.DownloaderConfig(ctx) + if err != nil { + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Can't download library"), Cause: err} + } + if err := libRelease.Resource.Download(ctx, downloadsDir, config, libRelease.String(), downloadCB, queryParameter); err != nil { + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Can't download library"), Cause: err} + } + taskCB(&rpc.TaskProgress{Completed: true}) + + return nil +} diff --git a/commands/service_library_install.go b/commands/service_library_install.go new file mode 100644 index 00000000000..3fe2641282a --- /dev/null +++ b/commands/service_library_install.go @@ -0,0 +1,282 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "fmt" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" +) + +// LibraryInstallStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryInstall that sends +// all responses to the callback function. +func LibraryInstallStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_LibraryInstallServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryInstallResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// LibraryInstall resolves the library dependencies, then downloads and installs the libraries into the install location. +func (s *arduinoCoreServerImpl) LibraryInstall(req *rpc.LibraryInstallRequest, stream rpc.ArduinoCoreService_LibraryInstallServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.LibraryInstallResponse{ + Message: &rpc.LibraryInstallResponse_Progress{Progress: p}, + }) + } + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.LibraryInstallResponse{ + Message: &rpc.LibraryInstallResponse_TaskProgress{TaskProgress: p}, + }) + } + + // Obtain the library index from the manager + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return err + } + + toInstall := map[string]*rpc.LibraryDependencyStatus{} + if req.GetNoDeps() { + toInstall[req.GetName()] = &rpc.LibraryDependencyStatus{ + Name: req.GetName(), + VersionRequired: req.GetVersion(), + } + } else { + // Obtain the library explorer from the instance + lme, releaseLme, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + + res, err := libraryResolveDependencies(lme, li, req.GetName(), req.GetVersion(), req.GetNoOverwrite()) + releaseLme() + if err != nil { + return err + } + + for _, dep := range res.GetDependencies() { + if existingDep, has := toInstall[dep.GetName()]; has { + if existingDep.GetVersionRequired() != dep.GetVersionRequired() { + err := errors.New( + i18n.Tr("two different versions of the library %[1]s are required: %[2]s and %[3]s", + dep.GetName(), dep.GetVersionRequired(), existingDep.GetVersionRequired())) + return &cmderrors.LibraryDependenciesResolutionFailedError{Cause: err} + } + } + toInstall[dep.GetName()] = dep + } + } + + // Obtain the download directory + var downloadsDir *paths.Path + if pme, releasePme, err := instances.GetPackageManagerExplorer(req.GetInstance()); err != nil { + return err + } else { + downloadsDir = pme.DownloadDir + releasePme() + } + + // Obtain the library installer from the manager + lmi, releaseLmi, err := instances.GetLibraryManagerInstaller(req.GetInstance()) + if err != nil { + return err + } + defer releaseLmi() + + // Find the libReleasesToInstall to install + libReleasesToInstall := map[*librariesindex.Release]*librariesmanager.LibraryInstallPlan{} + installLocation := libraries.FromRPCLibraryInstallLocation(req.GetInstallLocation()) + for _, lib := range toInstall { + version, err := parseVersion(lib.GetVersionRequired()) + if err != nil { + return err + } + libRelease, err := li.FindRelease(lib.GetName(), version) + if err != nil { + return err + } + + installTask, err := lmi.InstallPrerequisiteCheck(libRelease.Library.Name, libRelease.Version, installLocation) + if err != nil { + return err + } + if installTask.UpToDate { + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Already installed %s", libRelease), Completed: true}) + continue + } + + if req.GetNoOverwrite() { + if installTask.ReplacedLib != nil { + return errors.New(i18n.Tr("Library %[1]s is already installed, but with a different version: %[2]s", libRelease, installTask.ReplacedLib)) + } + } + libReleasesToInstall[libRelease] = installTask + } + + for libRelease, installTask := range libReleasesToInstall { + // Checks if libRelease is the requested library and not a dependency + downloadReason := "depends" + if libRelease.GetName() == req.GetName() { + downloadReason = "install" + if installTask.ReplacedLib != nil { + downloadReason = "upgrade" + } + if installLocation == libraries.IDEBuiltIn { + downloadReason += "-builtin" + } + } + if err := downloadLibrary(ctx, downloadsDir, libRelease, downloadCB, taskCB, downloadReason, s.settings); err != nil { + return err + } + if err := installLibrary(lmi, downloadsDir, libRelease, installTask, taskCB, resources.IntegrityCheckFull); err != nil { + return err + } + } + + err = s.Init( + &rpc.InitRequest{Instance: req.GetInstance()}, + InitStreamResponseToCallbackFunction(ctx, nil)) + if err != nil { + return err + } + + syncSend.Send(&rpc.LibraryInstallResponse{ + Message: &rpc.LibraryInstallResponse_Result_{ + Result: &rpc.LibraryInstallResponse_Result{}, + }, + }) + return nil +} + +func installLibrary(lmi *librariesmanager.Installer, downloadsDir *paths.Path, libRelease *librariesindex.Release, installTask *librariesmanager.LibraryInstallPlan, taskCB rpc.TaskProgressCB, checks resources.IntegrityCheckMode) error { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing %s", libRelease)}) + logrus.WithField("library", libRelease).Info("Installing library") + + if libReplaced := installTask.ReplacedLib; libReplaced != nil { + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Replacing %[1]s with %[2]s", libReplaced, libRelease)}) + if err := lmi.Uninstall(libReplaced); err != nil { + return &cmderrors.FailedLibraryInstallError{ + Cause: fmt.Errorf("%s: %s", i18n.Tr("could not remove old library"), err)} + } + } + + installPath := installTask.TargetPath + tmpDirPath := installPath.Parent() + if err := libRelease.Resource.Install(downloadsDir, tmpDirPath, installPath, checks); err != nil { + return &cmderrors.FailedLibraryInstallError{Cause: err} + } + + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Installed %s", libRelease), Completed: true}) + return nil +} + +// ZipLibraryInstallStreamResponseToCallbackFunction returns a gRPC stream to be used in ZipLibraryInstall that sends +// all responses to the callback function. +func ZipLibraryInstallStreamResponseToCallbackFunction(ctx context.Context, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_ZipLibraryInstallServer { + return streamResponseToCallback(ctx, func(r *rpc.ZipLibraryInstallResponse) error { + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// ZipLibraryInstall FIXMEDOC +func (s *arduinoCoreServerImpl) ZipLibraryInstall(req *rpc.ZipLibraryInstallRequest, stream rpc.ArduinoCoreService_ZipLibraryInstallServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.ZipLibraryInstallResponse{ + Message: &rpc.ZipLibraryInstallResponse_TaskProgress{TaskProgress: p}, + }) + } + + lm, err := instances.GetLibraryManager(req.GetInstance()) + if err != nil { + return err + } + lmi, release := lm.NewInstaller() + defer release() + if err := lmi.InstallZipLib(ctx, paths.New(req.GetPath()), req.GetOverwrite()); err != nil { + return &cmderrors.FailedLibraryInstallError{Cause: err} + } + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Library installed"), Completed: true}) + syncSend.Send(&rpc.ZipLibraryInstallResponse{ + Message: &rpc.ZipLibraryInstallResponse_Result_{ + Result: &rpc.ZipLibraryInstallResponse_Result{}, + }, + }) + return nil +} + +// GitLibraryInstallStreamResponseToCallbackFunction returns a gRPC stream to be used in GitLibraryInstall that sends +// all responses to the callback function. +func GitLibraryInstallStreamResponseToCallbackFunction(ctx context.Context, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_GitLibraryInstallServer { + return streamResponseToCallback(ctx, func(r *rpc.GitLibraryInstallResponse) error { + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// GitLibraryInstall FIXMEDOC +func (s *arduinoCoreServerImpl) GitLibraryInstall(req *rpc.GitLibraryInstallRequest, stream rpc.ArduinoCoreService_GitLibraryInstallServer) error { + syncSend := NewSynchronizedSend(stream.Send) + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.GitLibraryInstallResponse{ + Message: &rpc.GitLibraryInstallResponse_TaskProgress{TaskProgress: p}, + }) + } + lm, err := instances.GetLibraryManager(req.GetInstance()) + if err != nil { + return err + } + lmi, release := lm.NewInstaller() + defer release() + + // TODO: pass context + // ctx := stream.Context() + if err := lmi.InstallGitLib(req.GetUrl(), req.GetOverwrite()); err != nil { + return &cmderrors.FailedLibraryInstallError{Cause: err} + } + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Library installed"), Completed: true}) + syncSend.Send(&rpc.GitLibraryInstallResponse{ + Message: &rpc.GitLibraryInstallResponse_Result_{ + Result: &rpc.GitLibraryInstallResponse_Result{}, + }, + }) + return nil +} diff --git a/commands/lib/list.go b/commands/service_library_list.go similarity index 57% rename from commands/lib/list.go rename to commands/service_library_list.go index 553101620e4..2d30e11dbd3 100644 --- a/commands/lib/list.go +++ b/commands/service_library_list.go @@ -13,19 +13,20 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package lib +package commands import ( "context" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/libraries/librariesresolver" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesresolver" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) @@ -35,30 +36,36 @@ type installedLib struct { } // LibraryList FIXMEDOC -func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.LibraryListResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.LibraryListResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return nil, err } + lme, release, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + nameFilter := strings.ToLower(req.GetName()) var allLibs []*installedLib if fqbnString := req.GetFqbn(); fqbnString != "" { - allLibs = listLibraries(lm, req.GetUpdatable(), true) - fqbn, err := cores.ParseFQBN(req.GetFqbn()) + allLibs = listLibraries(lme, li, req.GetUpdatable(), true) + fqbn, err := fqbn.Parse(req.GetFqbn()) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } _, boardPlatform, _, _, refBoardPlatform, err := pme.ResolveFQBN(fqbn) if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } filteredRes := map[string]*installedLib{} @@ -70,8 +77,8 @@ func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.Library } } if latest, has := filteredRes[lib.Library.Name]; has { - latestPriority := librariesresolver.ComputePriority(latest.Library, "", fqbn.PlatformArch) - libPriority := librariesresolver.ComputePriority(lib.Library, "", fqbn.PlatformArch) + latestPriority := librariesresolver.ComputePriority(latest.Library, "", fqbn.Architecture) + libPriority := librariesresolver.ComputePriority(lib.Library, "", fqbn.Architecture) if latestPriority >= libPriority { // Pick library with the best priority continue @@ -80,7 +87,7 @@ func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.Library // Check if library is compatible with board specified by FBQN lib.Library.CompatibleWith = map[string]bool{ - fqbnString: lib.Library.IsCompatibleWith(fqbn.PlatformArch), + fqbnString: lib.Library.IsCompatibleWith(fqbn.Architecture), } filteredRes[lib.Library.Name] = lib @@ -91,7 +98,7 @@ func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.Library allLibs = append(allLibs, lib) } } else { - allLibs = listLibraries(lm, req.GetUpdatable(), req.GetAll()) + allLibs = listLibraries(lme, li, req.GetUpdatable(), req.GetAll()) } installedLibs := []*rpc.InstalledLibrary{} @@ -105,7 +112,7 @@ func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.Library } rpcLib, err := lib.Library.ToRPCLibrary() if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error getting information for library %s", lib.Library.Name), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error getting information for library %s", lib.Library.Name), Cause: err} } installedLibs = append(installedLibs, &rpc.InstalledLibrary{ Library: rpcLib, @@ -117,25 +124,25 @@ func LibraryList(ctx context.Context, req *rpc.LibraryListRequest) (*rpc.Library } // listLibraries returns the list of installed libraries. If updatable is true it -// returns only the libraries that may be updated. -func listLibraries(lm *librariesmanager.LibrariesManager, updatable bool, all bool) []*installedLib { +// returns only the libraries that may be updated by looking at the index for updates. +// If all is true, it returns all the libraries (including the libraries builtin in the +// platforms), otherwise only the user installed libraries. +func listLibraries(lme *librariesmanager.Explorer, li *librariesindex.Index, updatable bool, all bool) []*installedLib { res := []*installedLib{} - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - if !all { - if lib.Location != libraries.User { - continue - } - } - available := lm.Index.FindLibraryUpdate(lib) - if updatable && available == nil { + for _, lib := range lme.FindAllInstalled() { + if !all { + if lib.Location != libraries.User { continue } - res = append(res, &installedLib{ - Library: lib, - Available: available, - }) } + available := li.FindLibraryUpdate(lib) + if updatable && available == nil { + continue + } + res = append(res, &installedLib{ + Library: lib, + Available: available, + }) } return res } diff --git a/commands/service_library_resolve_deps.go b/commands/service_library_resolve_deps.go new file mode 100644 index 00000000000..83cc7f1f737 --- /dev/null +++ b/commands/service_library_resolve_deps.go @@ -0,0 +1,117 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "sort" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + semver "go.bug.st/relaxed-semver" +) + +// LibraryResolveDependencies FIXMEDOC +func (s *arduinoCoreServerImpl) LibraryResolveDependencies(ctx context.Context, req *rpc.LibraryResolveDependenciesRequest) (*rpc.LibraryResolveDependenciesResponse, error) { + lme, release, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return nil, err + } + + return libraryResolveDependencies(lme, li, req.GetName(), req.GetVersion(), req.GetDoNotUpdateInstalledLibraries()) +} + +func libraryResolveDependencies(lme *librariesmanager.Explorer, li *librariesindex.Index, + reqName, reqVersion string, noOverwrite bool) (*rpc.LibraryResolveDependenciesResponse, error) { + version, err := parseVersion(reqVersion) + if err != nil { + return nil, err + } + + // Search the requested lib + reqLibRelease, err := li.FindRelease(reqName, version) + if err != nil { + return nil, err + } + + // Extract all installed libraries + installedLibs := map[string]*libraries.Library{} + for _, lib := range listLibraries(lme, li, false, false) { + installedLibs[lib.Library.Name] = lib.Library + } + + // Resolve all dependencies... + var overrides []*librariesindex.Release + if noOverwrite { + libs := lme.FindAllInstalled() + libs = libs.FilterByVersionAndInstallLocation(nil, libraries.User) + for _, lib := range libs { + if release, err := li.FindRelease(lib.Name, lib.Version); err == nil { + overrides = append(overrides, release) + } + } + } + deps := li.ResolveDependencies(reqLibRelease, overrides) + + // If no solution has been found + if len(deps) == 0 { + // Check if there is a problem with the first level deps + for _, directDep := range reqLibRelease.GetDependencies() { + if _, ok := li.Libraries[directDep.GetName()]; !ok { + err := errors.New(i18n.Tr("dependency '%s' is not available", directDep.GetName())) + return nil, &cmderrors.LibraryDependenciesResolutionFailedError{Cause: err} + } + } + + // Otherwise there is no possible solution, the depends field has an invalid formula + return nil, &cmderrors.LibraryDependenciesResolutionFailedError{} + } + + res := []*rpc.LibraryDependencyStatus{} + for _, dep := range deps { + // ...and add information on currently installed versions of the libraries + var installed *semver.Version + required := dep.GetVersion() + if installedLib, has := installedLibs[dep.GetName()]; has { + installed = installedLib.Version + if installed != nil && required != nil && installed.Equal(required) { + // avoid situations like installed=0.53 and required=0.53.0 + required = installed + } + } + res = append(res, &rpc.LibraryDependencyStatus{ + Name: dep.GetName(), + VersionRequired: required.String(), + VersionInstalled: installed.String(), + }) + } + sort.Slice(res, func(i, j int) bool { + return res[i].GetName() < res[j].GetName() + }) + return &rpc.LibraryResolveDependenciesResponse{Dependencies: res}, nil +} diff --git a/commands/lib/search.go b/commands/service_library_search.go similarity index 73% rename from commands/lib/search.go rename to commands/service_library_search.go index 5e44e2273e1..39ff4c51c6e 100644 --- a/commands/lib/search.go +++ b/commands/service_library_search.go @@ -13,49 +13,35 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package lib +package commands import ( "context" "sort" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/utils" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" semver "go.bug.st/relaxed-semver" ) // LibrarySearch FIXMEDOC -func LibrarySearch(ctx context.Context, req *rpc.LibrarySearchRequest) (*rpc.LibrarySearchResponse, error) { - lm := instances.GetLibraryManager(req.GetInstance()) - if lm == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) LibrarySearch(ctx context.Context, req *rpc.LibrarySearchRequest) (*rpc.LibrarySearchResponse, error) { + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return nil, err } - return searchLibrary(req, lm), nil + return searchLibrary(req, li), nil } -func searchLibrary(req *rpc.LibrarySearchRequest, lm *librariesmanager.LibrariesManager) *rpc.LibrarySearchResponse { +func searchLibrary(req *rpc.LibrarySearchRequest, li *librariesindex.Index) *rpc.LibrarySearchResponse { res := []*rpc.SearchedLibrary{} query := req.GetSearchArgs() - if query == "" { - query = req.GetQuery() - } - queryTerms := utils.SearchTermsFromQueryString(query) - - for _, lib := range lm.Index.Libraries { - toTest := lib.Name + " " + - lib.Latest.Paragraph + " " + - lib.Latest.Sentence + " " + - lib.Latest.Author + " " - for _, include := range lib.Latest.ProvidesIncludes { - toTest += include + " " - } + matcher := MatcherFromQueryString(query) - if utils.Match(toTest, queryTerms) { + for _, lib := range li.Libraries { + if matcher(lib) { res = append(res, indexLibraryToRPCSearchLibrary(lib, req.GetOmitReleasesDetails())) } } @@ -63,14 +49,14 @@ func searchLibrary(req *rpc.LibrarySearchRequest, lm *librariesmanager.Libraries // get a sorted slice of results sort.Slice(res, func(i, j int) bool { // Sort by name, but bubble up exact matches - equalsI := strings.EqualFold(res[i].Name, query) - equalsJ := strings.EqualFold(res[j].Name, query) + equalsI := strings.EqualFold(res[i].GetName(), query) + equalsJ := strings.EqualFold(res[j].GetName(), query) if equalsI && !equalsJ { return true } else if !equalsI && equalsJ { return false } - return res[i].Name < res[j].Name + return res[i].GetName() < res[j].GetName() }) return &rpc.LibrarySearchResponse{Libraries: res, Status: rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS} @@ -130,7 +116,7 @@ func getLibraryParameters(rel *librariesindex.Release) *rpc.LibraryRelease { } } -func getLibraryDependenciesParameter(deps []semver.Dependency) []*rpc.LibraryDependency { +func getLibraryDependenciesParameter(deps []*librariesindex.Dependency) []*rpc.LibraryDependency { res := []*rpc.LibraryDependency{} for _, dep := range deps { res = append(res, &rpc.LibraryDependency{ diff --git a/commands/service_library_search_test.go b/commands/service_library_search_test.go new file mode 100644 index 00000000000..84f625b511e --- /dev/null +++ b/commands/service_library_search_test.go @@ -0,0 +1,208 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "strings" + "testing" + + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + paths "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +var indexFilename, _ = globals.LibrariesIndexResource.IndexFileName() +var customIndexPath = paths.New("testdata", "libraries", "test1", indexFilename) +var fullIndexPath = paths.New("testdata", "libraries", "full", indexFilename) +var qualifiedSearchIndexPath = paths.New("testdata", "libraries", "qualified_search", indexFilename) + +func TestSearchLibrary(t *testing.T) { + li, err := librariesindex.LoadIndex(customIndexPath) + require.NoError(t, err) + + resp := searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: "test"}, li) + assert := assert.New(t) + assert.Equal(resp.GetStatus(), rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS) + assert.Equal(len(resp.GetLibraries()), 2) + assert.True(strings.Contains(resp.GetLibraries()[0].GetName(), "Test")) + assert.True(strings.Contains(resp.GetLibraries()[1].GetName(), "Test")) +} + +func TestSearchLibrarySimilar(t *testing.T) { + li, err := librariesindex.LoadIndex(customIndexPath) + require.NoError(t, err) + + resp := searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: "arduino"}, li) + assert := assert.New(t) + assert.Equal(resp.GetStatus(), rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS) + assert.Equal(len(resp.GetLibraries()), 2) + libs := map[string]*rpc.SearchedLibrary{} + for _, l := range resp.GetLibraries() { + libs[l.GetName()] = l + } + assert.Contains(libs, "ArduinoTestPackage") + assert.Contains(libs, "Arduino") +} + +func TestSearchLibraryFields(t *testing.T) { + li, err := librariesindex.LoadIndex(fullIndexPath) + require.NoError(t, err) + + query := func(q string) []string { + libs := []string{} + for _, lib := range searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: q}, li).GetLibraries() { + libs = append(libs, lib.GetName()) + } + return libs + } + + res := query("SparkFun_u-blox_GNSS") + require.Len(t, res, 3) + require.Equal(t, "SparkFun u-blox Arduino Library", res[0]) + require.Equal(t, "SparkFun u-blox GNSS Arduino Library", res[1]) + require.Equal(t, "SparkFun u-blox SARA-R5 Arduino Library", res[2]) + + res = query("SparkFun u-blox GNSS") + require.Len(t, res, 3) + require.Equal(t, "SparkFun u-blox Arduino Library", res[0]) + require.Equal(t, "SparkFun u-blox GNSS Arduino Library", res[1]) + require.Equal(t, "SparkFun u-blox SARA-R5 Arduino Library", res[2]) + + res = query("painlessMesh") + require.Len(t, res, 1) + require.Equal(t, "Painless Mesh", res[0]) + + res = query("cristian maglie") + require.Len(t, res, 2) + require.Equal(t, "Arduino_ConnectionHandler", res[0]) + require.Equal(t, "FlashStorage_SAMD", res[1]) + + res = query("flashstorage") + require.Len(t, res, 19) + require.Equal(t, "FlashStorage", res[0]) +} + +func TestSearchLibraryWithQualifiers(t *testing.T) { + li, err := librariesindex.LoadIndex(qualifiedSearchIndexPath) + require.NoError(t, err) + + query := func(q string) []string { + libs := []string{} + for _, lib := range searchLibrary(&rpc.LibrarySearchRequest{SearchArgs: q}, li).GetLibraries() { + libs = append(libs, lib.GetName()) + } + return libs + } + + res := query("mesh") + require.Len(t, res, 4) + + res = query("name:Mesh") + require.Len(t, res, 3) + + res = query("name=Mesh") + require.Len(t, res, 0) + + // Space not in double-quoted string + res = query("name=Painless Mesh") + require.Len(t, res, 0) + + // Embedded space in double-quoted string + res = query("name=\"Painless Mesh\"") + require.Len(t, res, 1) + require.Equal(t, "Painless Mesh", res[0]) + + // No closing double-quote - still tokenizes with embedded space + res = query("name:\"Painless Mesh") + require.Len(t, res, 1) + + // Malformed double-quoted string with escaped first double-quote + res = query("name:\\\"Painless Mesh\"") + require.Len(t, res, 0) + + res = query("name:mesh author:TMRh20") + require.Len(t, res, 1) + require.Equal(t, "RF24Mesh", res[0]) + + res = query("mesh dependencies:ArduinoJson") + require.Len(t, res, 1) + require.Equal(t, "Painless Mesh", res[0]) + + res = query("architectures:esp author=\"Suraj I.\"") + require.Len(t, res, 1) + require.Equal(t, "esp8266-framework", res[0]) + + res = query("mesh esp") + require.Len(t, res, 2) + + res = query("mesh esp paragraph:wifi") + require.Len(t, res, 1) + require.Equal(t, "esp8266-framework", res[0]) + + // Unknown qualifier should revert to original matching + res = query("std::array") + require.Len(t, res, 1) + require.Equal(t, "Array", res[0]) + + res = query("data storage") + require.Len(t, res, 1) + require.Equal(t, "Pushdata_ESP8266_SSL", res[0]) + + res = query("category:\"data storage\"") + require.Len(t, res, 1) + require.Equal(t, "Array", res[0]) + + res = query("maintainer:@") + require.Len(t, res, 4) + + res = query("sentence:\"A library for NRF24L01(+) devices mesh.\"") + require.Len(t, res, 1) + require.Equal(t, "RF24Mesh", res[0]) + + res = query("types=contributed") + require.Len(t, res, 7) + + res = query("version:1.0") + require.Len(t, res, 3) + + res = query("version=1.2.1") + require.Len(t, res, 1) + require.Equal(t, "Array", res[0]) + + // Non-SSL URLs + res = query("website:http://") + require.Len(t, res, 1) + require.Equal(t, "RF24Mesh", res[0]) + + // Literal double-quote + res = query("sentence:\\\"") + require.Len(t, res, 1) + require.Equal(t, "RTCtime", res[0]) + + res = query("license=MIT") + require.Len(t, res, 2) + + // Empty string + res = query("license=\"\"") + require.Len(t, res, 5) + + res = query("provides:painlessmesh.h") + require.Len(t, res, 1) + require.Equal(t, "Painless Mesh", res[0]) +} diff --git a/commands/service_library_uninstall.go b/commands/service_library_uninstall.go new file mode 100644 index 00000000000..27b5acbfde5 --- /dev/null +++ b/commands/service_library_uninstall.go @@ -0,0 +1,89 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" +) + +// LibraryUninstallStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryUninstall that sends +// all responses to the callback function. +func LibraryUninstallStreamResponseToCallbackFunction(ctx context.Context, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_LibraryUninstallServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryUninstallResponse) error { + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// LibraryUninstall uninstalls a library +func (s *arduinoCoreServerImpl) LibraryUninstall(req *rpc.LibraryUninstallRequest, stream rpc.ArduinoCoreService_LibraryUninstallServer) error { + syncSend := NewSynchronizedSend(stream.Send) + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.LibraryUninstallResponse{ + Message: &rpc.LibraryUninstallResponse_TaskProgress{TaskProgress: p}, + }) + } + + lm, err := instances.GetLibraryManager(req.GetInstance()) + if err != nil { + return err + } + + version, err := parseVersion(req.GetVersion()) + if err != nil { + return err + } + lmi, release := lm.NewInstaller() + defer release() + + libs := lmi.FindByReference(req.GetName(), version, libraries.User) + if len(libs) == 0 { + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Library %s is not installed", req.GetName()), Completed: true}) + syncSend.Send(&rpc.LibraryUninstallResponse{ + Message: &rpc.LibraryUninstallResponse_Result_{Result: &rpc.LibraryUninstallResponse_Result{}}, + }) + return nil + } + + if len(libs) == 1 { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Uninstalling %s", libs)}) + lmi.Uninstall(libs[0]) + taskCB(&rpc.TaskProgress{Completed: true}) + syncSend.Send(&rpc.LibraryUninstallResponse{ + Message: &rpc.LibraryUninstallResponse_Result_{Result: &rpc.LibraryUninstallResponse_Result{}}, + }) + return nil + } + + libsDir := paths.NewPathList() + for _, lib := range libs { + libsDir.Add(lib.InstallDir) + } + return &cmderrors.MultipleLibraryInstallDetected{ + LibName: libs[0].Name, + LibsDir: libsDir, + Message: i18n.Tr("Automatic library uninstall can't be performed in this case, please manually remove them."), + } +} diff --git a/commands/service_library_upgrade.go b/commands/service_library_upgrade.go new file mode 100644 index 00000000000..d63e01a4c3a --- /dev/null +++ b/commands/service_library_upgrade.go @@ -0,0 +1,178 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// LibraryUpgradeAllStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryUpgradeAll that sends +// all responses to the callback function. +func LibraryUpgradeAllStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_LibraryUpgradeAllServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryUpgradeAllResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// LibraryUpgradeAll upgrades all the available libraries +func (s *arduinoCoreServerImpl) LibraryUpgradeAll(req *rpc.LibraryUpgradeAllRequest, stream rpc.ArduinoCoreService_LibraryUpgradeAllServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.LibraryUpgradeAllResponse{ + Message: &rpc.LibraryUpgradeAllResponse_Progress{Progress: p}, + }) + } + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.LibraryUpgradeAllResponse{ + Message: &rpc.LibraryUpgradeAllResponse_TaskProgress{TaskProgress: p}, + }) + } + + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return err + } + + lme, release, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + libsToUpgrade := listLibraries(lme, li, true, false) + release() + + if err := s.libraryUpgrade(ctx, req.GetInstance(), libsToUpgrade, downloadCB, taskCB); err != nil { + return err + } + + err = s.Init( + &rpc.InitRequest{Instance: req.GetInstance()}, + InitStreamResponseToCallbackFunction(ctx, nil)) + if err != nil { + return err + } + + syncSend.Send(&rpc.LibraryUpgradeAllResponse{ + Message: &rpc.LibraryUpgradeAllResponse_Result_{ + Result: &rpc.LibraryUpgradeAllResponse_Result{}, + }, + }) + return nil +} + +// LibraryUpgradeStreamResponseToCallbackFunction returns a gRPC stream to be used in LibraryUpgrade that sends +// all responses to the callback function. +func LibraryUpgradeStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_LibraryUpgradeServer { + return streamResponseToCallback(ctx, func(r *rpc.LibraryUpgradeResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// LibraryUpgrade upgrades a library +func (s *arduinoCoreServerImpl) LibraryUpgrade(req *rpc.LibraryUpgradeRequest, stream rpc.ArduinoCoreService_LibraryUpgradeServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.LibraryUpgradeResponse{ + Message: &rpc.LibraryUpgradeResponse_Progress{Progress: p}, + }) + } + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.LibraryUpgradeResponse{ + Message: &rpc.LibraryUpgradeResponse_TaskProgress{TaskProgress: p}, + }) + } + + li, err := instances.GetLibrariesIndex(req.GetInstance()) + if err != nil { + return err + } + + lme, release, err := instances.GetLibraryManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + libs := listLibraries(lme, li, false, false) + release() + + // Get the library to upgrade + name := req.GetName() + lib := filterByName(libs, name) + if lib == nil { + // library not installed... + return &cmderrors.LibraryNotFoundError{Library: name} + } + if lib.Available == nil { + // library already at the latest version + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Library %s is already at the latest version", name), Completed: true}) + } else { + // Install update + if err := s.libraryUpgrade(ctx, req.GetInstance(), []*installedLib{lib}, downloadCB, taskCB); err != nil { + return err + } + } + + syncSend.Send(&rpc.LibraryUpgradeResponse{ + Message: &rpc.LibraryUpgradeResponse_Result_{ + Result: &rpc.LibraryUpgradeResponse_Result{}, + }, + }) + return nil +} + +func (s *arduinoCoreServerImpl) libraryUpgrade(ctx context.Context, instance *rpc.Instance, libs []*installedLib, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { + for _, lib := range libs { + libInstallReq := &rpc.LibraryInstallRequest{ + Instance: instance, + Name: lib.Library.Name, + Version: "", + NoDeps: false, + NoOverwrite: false, + } + stream := LibraryInstallStreamResponseToCallbackFunction(ctx, downloadCB, taskCB) + if err := s.LibraryInstall(libInstallReq, stream); err != nil { + return err + } + } + + return nil +} + +func filterByName(libs []*installedLib, name string) *installedLib { + for _, lib := range libs { + if lib.Library.Name == name { + return lib + } + } + return nil +} diff --git a/commands/service_monitor.go b/commands/service_monitor.go new file mode 100644 index 00000000000..012d4ddf8bc --- /dev/null +++ b/commands/service_monitor.go @@ -0,0 +1,301 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "fmt" + "io" + "sync/atomic" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + pluggableMonitor "github.com/arduino/arduino-cli/internal/arduino/monitor" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-properties-orderedmap" + "github.com/djherbis/buffer" + "github.com/djherbis/nio/v3" + "github.com/sirupsen/logrus" + "google.golang.org/grpc/metadata" +) + +type monitorPipeServer struct { + ctx context.Context + req atomic.Pointer[rpc.MonitorPortOpenRequest] + in *nio.PipeReader + out *nio.PipeWriter +} + +func (s *monitorPipeServer) Send(resp *rpc.MonitorResponse) error { + if len(resp.GetRxData()) > 0 { + if _, err := s.out.Write(resp.GetRxData()); err != nil { + return err + } + } + return nil +} + +func (s *monitorPipeServer) Recv() (r *rpc.MonitorRequest, e error) { + if conf := s.req.Swap(nil); conf != nil { + return &rpc.MonitorRequest{Message: &rpc.MonitorRequest_OpenRequest{OpenRequest: conf}}, nil + } + buff := make([]byte, 4096) + n, err := s.in.Read(buff) + if err != nil { + return nil, err + } + return &rpc.MonitorRequest{Message: &rpc.MonitorRequest_TxData{TxData: buff[:n]}}, nil +} + +func (s *monitorPipeServer) Context() context.Context { + return s.ctx +} + +func (s *monitorPipeServer) RecvMsg(m any) error { return nil } +func (s *monitorPipeServer) SendHeader(metadata.MD) error { return nil } +func (s *monitorPipeServer) SendMsg(m any) error { return nil } +func (s *monitorPipeServer) SetHeader(metadata.MD) error { return nil } +func (s *monitorPipeServer) SetTrailer(metadata.MD) {} + +type monitorPipeClient struct { + in *nio.PipeReader + out *nio.PipeWriter + close func() +} + +func (s *monitorPipeClient) Read(buff []byte) (n int, err error) { + return s.in.Read(buff) +} + +func (s *monitorPipeClient) Write(buff []byte) (n int, err error) { + return s.out.Write(buff) +} + +func (s *monitorPipeClient) Close() error { + s.in.Close() + s.out.Close() + s.close() + return nil +} + +// MonitorServerToReadWriteCloser creates a monitor server that proxies the data to a ReadWriteCloser. +// The server is returned along with the ReadWriteCloser that can be used to send and receive data +// to the server. The MonitorPortOpenRequest is used to configure the monitor. +func MonitorServerToReadWriteCloser(ctx context.Context, req *rpc.MonitorPortOpenRequest) (rpc.ArduinoCoreService_MonitorServer, io.ReadWriteCloser) { + server := &monitorPipeServer{} + client := &monitorPipeClient{} + server.req.Store(req) + server.ctx, client.close = context.WithCancel(ctx) + client.in, server.out = nio.Pipe(buffer.New(32 * 1024)) + server.in, client.out = nio.Pipe(buffer.New(32 * 1024)) + return server, client +} + +// Monitor opens a port monitor and streams data back and forth until the request is kept alive. +func (s *arduinoCoreServerImpl) Monitor(stream rpc.ArduinoCoreService_MonitorServer) error { + // The configuration must be sent on the first message + req, err := stream.Recv() + if err != nil { + return err + } + + openReq := req.GetOpenRequest() + if openReq == nil { + return &cmderrors.InvalidInstanceError{} + } + + pme, release, err := instances.GetPackageManagerExplorer(openReq.GetInstance()) + if err != nil { + return err + } + monitor, boardSettings, err := findMonitorAndSettingsForProtocolAndBoard(pme, openReq.GetPort().GetProtocol(), openReq.GetFqbn()) + release() + if err != nil { + return err + } + if err := monitor.Run(); err != nil { + return &cmderrors.FailedMonitorError{Cause: err} + } + if _, err := monitor.Describe(); err != nil { + monitor.Quit() + return &cmderrors.FailedMonitorError{Cause: err} + } + if portConfig := openReq.GetPortConfiguration(); portConfig != nil { + for _, setting := range portConfig.GetSettings() { + boardSettings.Remove(setting.GetSettingId()) + if err := monitor.Configure(setting.GetSettingId(), setting.GetValue()); err != nil { + logrus.Errorf("Could not set configuration %s=%s: %s", setting.GetSettingId(), setting.GetValue(), err) + } + } + } + for setting, value := range boardSettings.AsMap() { + monitor.Configure(setting, value) + } + monitorIO, err := monitor.Open(openReq.GetPort().GetAddress(), openReq.GetPort().GetProtocol()) + if err != nil { + monitor.Quit() + return &cmderrors.FailedMonitorError{Cause: err} + } + logrus.Infof("Port %s successfully opened", openReq.GetPort().GetAddress()) + monitorClose := func() error { + monitor.Close() + return monitor.Quit() + } + + // Send a message with Success set to true to notify the caller of the port being now active + syncSend := NewSynchronizedSend(stream.Send) + _ = syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Success{Success: true}}) + + ctx, cancel := context.WithCancel(stream.Context()) + gracefulCloseInitiated := &atomic.Bool{} + gracefuleCloseCtx, gracefulCloseCancel := context.WithCancel(context.Background()) + + // gRPC stream receiver (gRPC data -> monitor, config, close) + go func() { + defer cancel() + for { + msg, err := stream.Recv() + if errors.Is(err, io.EOF) { + return + } + if err != nil { + syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Error{Error: err.Error()}}) + return + } + if conf := msg.GetUpdatedConfiguration(); conf != nil { + for _, c := range conf.GetSettings() { + if err := monitor.Configure(c.GetSettingId(), c.GetValue()); err != nil { + syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Error{Error: err.Error()}}) + } + } + } + if closeMsg := msg.GetClose(); closeMsg { + gracefulCloseInitiated.Store(true) + if err := monitorClose(); err != nil { + logrus.WithError(err).Debug("Error closing monitor port") + } + gracefulCloseCancel() + } + tx := msg.GetTxData() + for len(tx) > 0 { + n, err := monitorIO.Write(tx) + if errors.Is(err, io.EOF) { + return + } + if err != nil { + syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Error{Error: err.Error()}}) + return + } + tx = tx[n:] + } + } + }() + + // gRPC stream sender (monitor -> gRPC) + go func() { + defer cancel() // unlock the receiver + buff := make([]byte, 4096) + for { + n, err := monitorIO.Read(buff) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_Error{Error: err.Error()}}) + break + } + if err := syncSend.Send(&rpc.MonitorResponse{Message: &rpc.MonitorResponse_RxData{RxData: buff[:n]}}); err != nil { + break + } + } + }() + + <-ctx.Done() + if gracefulCloseInitiated.Load() { + // Port closing has been initiated in the receiver + <-gracefuleCloseCtx.Done() + } else { + monitorClose() + } + return nil +} + +func findMonitorAndSettingsForProtocolAndBoard(pme *packagemanager.Explorer, protocol, fqbnIn string) (*pluggableMonitor.PluggableMonitor, *properties.Map, error) { + if protocol == "" { + return nil, nil, &cmderrors.MissingPortProtocolError{} + } + + var monitorDepOrRecipe *cores.MonitorDependency + boardSettings := properties.NewMap() + + // If a board is specified search the monitor in the board package first + if fqbnIn != "" { + fqbn, err := fqbn.Parse(fqbnIn) + if err != nil { + return nil, nil, &cmderrors.InvalidFQBNError{Cause: err} + } + + _, boardPlatform, _, boardProperties, _, err := pme.ResolveFQBN(fqbn) + if err != nil { + return nil, nil, &cmderrors.UnknownFQBNError{Cause: err} + } + + boardSettings = cores.GetMonitorSettings(protocol, boardProperties) + + if mon, ok := boardPlatform.Monitors[protocol]; ok { + monitorDepOrRecipe = mon + } else if recipe, ok := boardPlatform.MonitorsDevRecipes[protocol]; ok { + // If we have a recipe we must resolve it + cmdLine := boardProperties.ExpandPropsInString(recipe) + cmdArgs, err := properties.SplitQuotedString(cmdLine, `"'`, false) + if err != nil { + return nil, nil, &cmderrors.InvalidArgumentError{Message: i18n.Tr("Invalid recipe in platform.txt"), Cause: err} + } + id := fmt.Sprintf("%s-%s", boardPlatform, protocol) + return pluggableMonitor.New(id, cmdArgs...), boardSettings, nil + } + } + + if monitorDepOrRecipe == nil { + // Otherwise look in all package for a suitable monitor + for _, platformRel := range pme.InstalledPlatformReleases() { + if mon, ok := platformRel.Monitors[protocol]; ok { + monitorDepOrRecipe = mon + break + } + } + } + + if monitorDepOrRecipe == nil { + return nil, nil, &cmderrors.NoMonitorAvailableForProtocolError{Protocol: protocol} + } + + // If it is a monitor dependency, resolve tool and create a monitor client + tool := pme.FindMonitorDependency(monitorDepOrRecipe) + if tool == nil { + return nil, nil, &cmderrors.MonitorNotFoundError{Monitor: monitorDepOrRecipe.String()} + } + + return pluggableMonitor.New( + monitorDepOrRecipe.Name, + tool.InstallDir.Join(monitorDepOrRecipe.Name).String(), + ), boardSettings, nil +} diff --git a/commands/monitor/settings.go b/commands/service_monitor_settings.go similarity index 78% rename from commands/monitor/settings.go rename to commands/service_monitor_settings.go index 89976c94d77..4eb71c7add9 100644 --- a/commands/monitor/settings.go +++ b/commands/service_monitor_settings.go @@ -13,22 +13,22 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package monitor +package commands import ( "context" - "github.com/arduino/arduino-cli/arduino" - pluggableMonitor "github.com/arduino/arduino-cli/arduino/monitor" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" + pluggableMonitor "github.com/arduino/arduino-cli/internal/arduino/monitor" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) // EnumerateMonitorPortSettings returns a description of the configuration settings of a monitor port -func EnumerateMonitorPortSettings(ctx context.Context, req *rpc.EnumerateMonitorPortSettingsRequest) (*rpc.EnumerateMonitorPortSettingsResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) EnumerateMonitorPortSettings(ctx context.Context, req *rpc.EnumerateMonitorPortSettingsRequest) (*rpc.EnumerateMonitorPortSettingsResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() @@ -38,13 +38,13 @@ func EnumerateMonitorPortSettings(ctx context.Context, req *rpc.EnumerateMonitor } if err := m.Run(); err != nil { - return nil, &arduino.FailedMonitorError{Cause: err} + return nil, &cmderrors.FailedMonitorError{Cause: err} } defer m.Quit() desc, err := m.Describe() if err != nil { - return nil, &arduino.FailedMonitorError{Cause: err} + return nil, &cmderrors.FailedMonitorError{Cause: err} } // Apply default settings for this board and protocol diff --git a/commands/service_platform_download.go b/commands/service_platform_download.go new file mode 100644 index 00000000000..1f542d3abf1 --- /dev/null +++ b/commands/service_platform_download.go @@ -0,0 +1,85 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// PlatformDownloadStreamResponseToCallbackFunction returns a gRPC stream to be used in PlatformDownload that sends +// all responses to the callback function. +func PlatformDownloadStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB) rpc.ArduinoCoreService_PlatformDownloadServer { + return streamResponseToCallback(ctx, func(r *rpc.PlatformDownloadResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + return nil + }) +} + +// PlatformDownload downloads a platform package +func (s *arduinoCoreServerImpl) PlatformDownload(req *rpc.PlatformDownloadRequest, stream rpc.ArduinoCoreService_PlatformDownloadServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + defer release() + + version, err := parseVersion(req.GetVersion()) + if err != nil { + return &cmderrors.InvalidVersionError{Cause: err} + } + + ref := &packagemanager.PlatformReference{ + Package: req.GetPlatformPackage(), + PlatformArchitecture: req.GetArchitecture(), + PlatformVersion: version, + } + platform, tools, err := pme.FindPlatformReleaseDependencies(ref) + if err != nil { + return &cmderrors.PlatformNotFoundError{Platform: ref.String(), Cause: err} + } + + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.PlatformDownloadResponse{ + Message: &rpc.PlatformDownloadResponse_Progress{ + Progress: p, + }, + }) + } + + if err := pme.DownloadPlatformRelease(ctx, platform, downloadCB); err != nil { + return err + } + + for _, tool := range tools { + if err := pme.DownloadToolRelease(ctx, tool, downloadCB); err != nil { + return err + } + } + + return syncSend.Send(&rpc.PlatformDownloadResponse{Message: &rpc.PlatformDownloadResponse_Result_{ + Result: &rpc.PlatformDownloadResponse_Result{}, + }}) +} diff --git a/commands/service_platform_install.go b/commands/service_platform_install.go new file mode 100644 index 00000000000..9e268339bc8 --- /dev/null +++ b/commands/service_platform_install.go @@ -0,0 +1,127 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "fmt" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// UpdateIndexStreamResponseToCallbackFunction returns a gRPC stream to be used in PlatformInstall that sends +// all responses to the callback function. +func PlatformInstallStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_PlatformInstallServer { + return streamResponseToCallback(ctx, func(r *rpc.PlatformInstallResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// PlatformInstall installs a platform package +func (s *arduinoCoreServerImpl) PlatformInstall(req *rpc.PlatformInstallRequest, stream rpc.ArduinoCoreService_PlatformInstallServer) error { + ctx := stream.Context() + syncSend := NewSynchronizedSend(stream.Send) + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.PlatformInstallResponse{ + Message: &rpc.PlatformInstallResponse_TaskProgress{ + TaskProgress: p, + }, + }) + } + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.PlatformInstallResponse{ + Message: &rpc.PlatformInstallResponse_Progress{ + Progress: p, + }, + }) + } + + install := func() error { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + defer release() + + version, err := parseVersion(req.GetVersion()) + if err != nil { + return &cmderrors.InvalidVersionError{Cause: err} + } + + ref := &packagemanager.PlatformReference{ + Package: req.GetPlatformPackage(), + PlatformArchitecture: req.GetArchitecture(), + PlatformVersion: version, + } + platformRelease, tools, err := pme.FindPlatformReleaseDependencies(ref) + if err != nil { + return &cmderrors.PlatformNotFoundError{Platform: ref.String(), Cause: err} + } + + // Prerequisite checks before install + if platformRelease.IsInstalled() { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Platform %s already installed", platformRelease), Completed: true}) + return nil + } + + if req.GetNoOverwrite() { + if installed := pme.GetInstalledPlatformRelease(platformRelease.Platform); installed != nil { + return fmt.Errorf("%s: %s", + i18n.Tr("Platform %s already installed", installed), + i18n.Tr("could not overwrite")) + } + } + + checks := resources.IntegrityCheckFull + if s.settings.BoardManagerEnableUnsafeInstall() { + checks = resources.IntegrityCheckNone + } + if err := pme.DownloadAndInstallPlatformAndTools(ctx, platformRelease, tools, downloadCB, taskCB, req.GetSkipPostInstall(), req.GetSkipPreUninstall(), checks); err != nil { + return err + } + + return nil + } + + if err := install(); err != nil { + return err + } + + err := s.Init( + &rpc.InitRequest{Instance: req.GetInstance()}, + InitStreamResponseToCallbackFunction(ctx, nil), + ) + if err != nil { + return err + } + + return syncSend.Send(&rpc.PlatformInstallResponse{ + Message: &rpc.PlatformInstallResponse_Result_{ + Result: &rpc.PlatformInstallResponse_Result{}, + }, + }) +} diff --git a/commands/core/search.go b/commands/service_platform_search.go similarity index 50% rename from commands/core/search.go rename to commands/service_platform_search.go index 4562eb570e0..4117bf7be18 100644 --- a/commands/core/search.go +++ b/commands/service_platform_search.go @@ -13,54 +13,54 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package core +package commands import ( + "context" "regexp" "sort" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/utils" - "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/utils" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) // PlatformSearch FIXMEDOC -func PlatformSearch(req *rpc.PlatformSearchRequest) (*rpc.PlatformSearchResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) PlatformSearch(_ context.Context, req *rpc.PlatformSearchRequest) (*rpc.PlatformSearchResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() - res := []*cores.PlatformRelease{} - if isUsb, _ := regexp.MatchString("[0-9a-f]{4}:[0-9a-f]{4}", req.SearchArgs); isUsb { - vid, pid := req.SearchArgs[:4], req.SearchArgs[5:] + res := []*cores.Platform{} + if isUsb, _ := regexp.MatchString("[0-9a-f]{4}:[0-9a-f]{4}", req.GetSearchArgs()); isUsb { + vid, pid := req.GetSearchArgs()[:4], req.GetSearchArgs()[5:] res = pme.FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid) } else { - searchArgs := utils.SearchTermsFromQueryString(req.SearchArgs) - allVersions := req.AllVersions + searchArgs := utils.SearchTermsFromQueryString(req.GetSearchArgs()) for _, targetPackage := range pme.GetPackages() { for _, platform := range targetPackage.Platforms { + if platform == nil { + continue + } // Users can install platforms manually in the Sketchbook hardware folder, - // the core search command must operate only on platforms installed through - // the PlatformManager, thus we skip the manually installed ones. - if platform == nil || platform.Name == "" || platform.ManuallyInstalled { + // if not explictily requested we skip them. + if !req.GetManuallyInstalled() && platform.ManuallyInstalled { continue } // Discard platforms with no releases latestRelease := platform.GetLatestRelease() - if latestRelease == nil { + if latestRelease == nil || latestRelease.Name == "" { continue } // Gather all strings that can be used for searching toTest := platform.String() + " " + - platform.Name + " " + + latestRelease.Name + " " + platform.Architecture + " " + targetPackage.Name + " " + targetPackage.Maintainer + " " + @@ -74,33 +74,36 @@ func PlatformSearch(req *rpc.PlatformSearchRequest) (*rpc.PlatformSearchResponse continue } - if allVersions { - res = append(res, platform.GetAllReleases()...) - } else { - res = append(res, latestRelease) - } + res = append(res, platform) } } } - out := make([]*rpc.Platform, len(res)) - for i, platformRelease := range res { - out[i] = commands.PlatformReleaseToRPC(platformRelease) - if platformRelease.IsInstalled() { - out[i].Installed = platformRelease.Version.String() + out := []*rpc.PlatformSummary{} + for _, platform := range res { + rpcPlatformSummary := &rpc.PlatformSummary{ + Metadata: platformToRPCPlatformMetadata(platform), + Releases: map[string]*rpc.PlatformRelease{}, + } + if installed := pme.GetInstalledPlatformRelease(platform); installed != nil { + rpcPlatformSummary.InstalledVersion = installed.Version.String() } + if latestCompatible := platform.GetLatestCompatibleRelease(); latestCompatible != nil { + rpcPlatformSummary.LatestVersion = latestCompatible.Version.String() + } + for _, platformRelease := range platform.GetAllReleases() { + rpcPlatformRelease := platformReleaseToRPC(platformRelease) + rpcPlatformSummary.Releases[rpcPlatformRelease.GetVersion()] = rpcPlatformRelease + } + out = append(out, rpcPlatformSummary) } + // Sort result alphabetically and put deprecated platforms at the bottom - sort.Slice( - out, func(i, j int) bool { - return strings.ToLower(out[i].Name) < strings.ToLower(out[j].Name) - }) - sort.SliceStable( - out, func(i, j int) bool { - if !out[i].Deprecated && out[j].Deprecated { - return true - } - return false - }) + sort.Slice(out, func(i, j int) bool { + return strings.ToLower(out[i].GetMetadata().GetId()) < strings.ToLower(out[j].GetMetadata().GetId()) + }) + sort.SliceStable(out, func(i, j int) bool { + return !out[i].GetMetadata().GetDeprecated() && out[j].GetMetadata().GetDeprecated() + }) return &rpc.PlatformSearchResponse{SearchOutput: out}, nil } diff --git a/commands/service_platform_search_test.go b/commands/service_platform_search_test.go new file mode 100644 index 00000000000..8fd78e540f8 --- /dev/null +++ b/commands/service_platform_search_test.go @@ -0,0 +1,369 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "testing" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestPlatformSearch(t *testing.T) { + dataDir := paths.TempDir().Join("test", "data_dir") + downloadDir := paths.TempDir().Join("test", "staging") + t.Setenv("ARDUINO_DATA_DIR", dataDir.String()) + t.Setenv("ARDUINO_DOWNLOADS_DIR", downloadDir.String()) + dataDir.MkdirAll() + downloadDir.MkdirAll() + defer paths.TempDir().Join("test").RemoveAll() + err := paths.New("testdata", "platform", "package_index.json").CopyTo(dataDir.Join("package_index.json")) + require.Nil(t, err) + + ctx := context.Background() + srv := NewArduinoCoreServer() + + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{SettingsFormat: "yaml"}) + require.NoError(t, err) + + createResp, err := srv.Create(ctx, &rpc.CreateRequest{}) + require.NoError(t, err) + + inst := createResp.GetInstance() + require.NotNil(t, inst) + + err = srv.Init(&rpc.InitRequest{Instance: inst}, InitStreamResponseToCallbackFunction(ctx, nil)) + require.NoError(t, err) + + t.Run("SearchAllVersions", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "retrokit", + }) + require.Nil(t, stat) + require.NotNil(t, res) + + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "Retrokits-RK002:arm", + Maintainer: "Retrokits (www.retrokits.com)", + Website: "https://www.retrokits.com", + Email: "info@retrokits.com", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.0.5": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.5", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + "1.0.6": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.6", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchThePackageMaintainer", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "Retrokits (www.retrokits.com)", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "Retrokits-RK002:arm", + Maintainer: "Retrokits (www.retrokits.com)", + Website: "https://www.retrokits.com", + Email: "info@retrokits.com", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.0.5": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.5", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + "1.0.6": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.6", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchPackageName", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "Retrokits-RK002", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "Retrokits-RK002:arm", + Maintainer: "Retrokits (www.retrokits.com)", + Website: "https://www.retrokits.com", + Email: "info@retrokits.com", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.0.5": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.5", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + "1.0.6": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.6", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchPlatformName", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "rk002", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "Retrokits-RK002:arm", + Maintainer: "Retrokits (www.retrokits.com)", + Website: "https://www.retrokits.com", + Email: "info@retrokits.com", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.0.5": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.5", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + "1.0.6": { + Name: "RK002", + Types: []string{"Contributed"}, + Installed: false, + Version: "1.0.6", + Boards: []*rpc.Board{{Name: "RK002"}}, + Help: &rpc.HelpResources{Online: "https://www.retrokits.com/rk002/arduino"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchBoardName", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "Yún", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "arduino:avr", + Maintainer: "Arduino", + Website: "https://www.arduino.cc/", + Email: "packages@arduino.cc", + Indexed: true, + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.8.3": { + Name: "Arduino AVR Boards", + Types: []string{"Arduino"}, + Installed: false, + Version: "1.8.3", + Boards: []*rpc.Board{ + {Name: "Arduino Yún"}, + {Name: "Arduino Uno"}, + {Name: "Arduino Uno WiFi"}, + {Name: "Arduino Diecimila"}, + {Name: "Arduino Nano"}, + {Name: "Arduino Mega"}, + {Name: "Arduino MegaADK"}, + {Name: "Arduino Leonardo"}, + {Name: "Arduino Leonardo Ethernet"}, + {Name: "Arduino Micro"}, + {Name: "Arduino Esplora"}, + {Name: "Arduino Mini"}, + {Name: "Arduino Ethernet"}, + {Name: "Arduino Fio"}, + {Name: "Arduino BT"}, + {Name: "Arduino LilyPadUSB"}, + {Name: "Arduino Lilypad"}, + {Name: "Arduino Pro"}, + {Name: "Arduino ATMegaNG"}, + {Name: "Arduino Robot Control"}, + {Name: "Arduino Robot Motor"}, + {Name: "Arduino Gemma"}, + {Name: "Adafruit Circuit Playground"}, + {Name: "Arduino Yún Mini"}, + {Name: "Arduino Industrial 101"}, + {Name: "Linino One"}, + }, + Help: &rpc.HelpResources{Online: "http://www.arduino.cc/en/Reference/HomePage"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) + + t.Run("SearchBoardName2", func(t *testing.T) { + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "yun", + }) + require.Nil(t, stat) + require.NotNil(t, res) + require.Len(t, res.GetSearchOutput(), 1) + require.Contains(t, res.GetSearchOutput(), &rpc.PlatformSummary{ + Metadata: &rpc.PlatformMetadata{ + Id: "arduino:avr", + Indexed: true, + Maintainer: "Arduino", + Website: "https://www.arduino.cc/", + Email: "packages@arduino.cc", + }, + Releases: map[string]*rpc.PlatformRelease{ + "1.8.3": { + Name: "Arduino AVR Boards", + Types: []string{"Arduino"}, + Installed: false, + Version: "1.8.3", + Boards: []*rpc.Board{ + {Name: "Arduino Yún"}, + {Name: "Arduino Uno"}, + {Name: "Arduino Uno WiFi"}, + {Name: "Arduino Diecimila"}, + {Name: "Arduino Nano"}, + {Name: "Arduino Mega"}, + {Name: "Arduino MegaADK"}, + {Name: "Arduino Leonardo"}, + {Name: "Arduino Leonardo Ethernet"}, + {Name: "Arduino Micro"}, + {Name: "Arduino Esplora"}, + {Name: "Arduino Mini"}, + {Name: "Arduino Ethernet"}, + {Name: "Arduino Fio"}, + {Name: "Arduino BT"}, + {Name: "Arduino LilyPadUSB"}, + {Name: "Arduino Lilypad"}, + {Name: "Arduino Pro"}, + {Name: "Arduino ATMegaNG"}, + {Name: "Arduino Robot Control"}, + {Name: "Arduino Robot Motor"}, + {Name: "Arduino Gemma"}, + {Name: "Adafruit Circuit Playground"}, + {Name: "Arduino Yún Mini"}, + {Name: "Arduino Industrial 101"}, + {Name: "Linino One"}, + }, + Help: &rpc.HelpResources{Online: "http://www.arduino.cc/en/Reference/HomePage"}, + Compatible: false, + }, + }, + InstalledVersion: "", + }) + }) +} + +func TestPlatformSearchSorting(t *testing.T) { + dataDir := paths.TempDir().Join("test", "data_dir") + downloadDir := paths.TempDir().Join("test", "staging") + t.Setenv("ARDUINO_DATA_DIR", dataDir.String()) + t.Setenv("ARDUINO_DOWNLOADS_DIR", downloadDir.String()) + dataDir.MkdirAll() + downloadDir.MkdirAll() + defer paths.TempDir().Join("test").RemoveAll() + err := paths.New("testdata", "platform", "package_index.json").CopyTo(dataDir.Join("package_index.json")) + require.Nil(t, err) + + ctx := context.Background() + srv := NewArduinoCoreServer() + + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{SettingsFormat: "yaml"}) + require.NoError(t, err) + + createResp, err := srv.Create(ctx, &rpc.CreateRequest{}) + require.NoError(t, err) + inst := createResp.GetInstance() + require.NotNil(t, inst) + err = srv.Init(&rpc.InitRequest{Instance: inst}, InitStreamResponseToCallbackFunction(ctx, nil)) + require.NoError(t, err) + + res, stat := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "", + }) + require.Nil(t, stat) + require.NotNil(t, res) + + require.Len(t, res.GetSearchOutput(), 3) + require.Equal(t, res.GetSearchOutput()[0].GetSortedReleases()[0].GetName(), "Arduino AVR Boards") + require.Equal(t, res.GetSearchOutput()[0].GetMetadata().GetDeprecated(), false) + require.Equal(t, res.GetSearchOutput()[1].GetSortedReleases()[0].GetName(), "RK002") + require.Equal(t, res.GetSearchOutput()[1].GetMetadata().GetDeprecated(), false) + require.Equal(t, res.GetSearchOutput()[2].GetLatestRelease().GetName(), "Platform") + require.Equal(t, res.GetSearchOutput()[2].GetMetadata().GetDeprecated(), true) +} diff --git a/commands/service_platform_uninstall.go b/commands/service_platform_uninstall.go new file mode 100644 index 00000000000..cf21d91a8ad --- /dev/null +++ b/commands/service_platform_uninstall.go @@ -0,0 +1,105 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// PlatformUninstallStreamResponseToCallbackFunction returns a gRPC stream to be used in PlatformUninstall that sends +// all responses to the callback function. +func PlatformUninstallStreamResponseToCallbackFunction(ctx context.Context, taskCB rpc.TaskProgressCB) rpc.ArduinoCoreService_PlatformUninstallServer { + return streamResponseToCallback(ctx, func(r *rpc.PlatformUninstallResponse) error { + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + return nil + }) +} + +// PlatformUninstall uninstalls a platform package +func (s *arduinoCoreServerImpl) PlatformUninstall(req *rpc.PlatformUninstallRequest, stream rpc.ArduinoCoreService_PlatformUninstallServer) error { + syncSend := NewSynchronizedSend(stream.Send) + ctx := stream.Context() + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.PlatformUninstallResponse{ + Message: &rpc.PlatformUninstallResponse_TaskProgress{ + TaskProgress: p, + }, + }) + } + if err := platformUninstall(ctx, req, taskCB); err != nil { + return err + } + if err := s.Init(&rpc.InitRequest{Instance: req.GetInstance()}, InitStreamResponseToCallbackFunction(ctx, nil)); err != nil { + return err + } + return syncSend.Send(&rpc.PlatformUninstallResponse{ + Message: &rpc.PlatformUninstallResponse_Result_{ + Result: &rpc.PlatformUninstallResponse_Result{}, + }, + }) +} + +// platformUninstall is the implementation of platform unistaller +func platformUninstall(_ context.Context, req *rpc.PlatformUninstallRequest, taskCB rpc.TaskProgressCB) error { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return &cmderrors.InvalidInstanceError{} + } + defer release() + + ref := &packagemanager.PlatformReference{ + Package: req.GetPlatformPackage(), + PlatformArchitecture: req.GetArchitecture(), + } + if ref.PlatformVersion == nil { + platform := pme.FindPlatform(ref) + if platform == nil { + return &cmderrors.PlatformNotFoundError{Platform: ref.String()} + } + platformRelease := pme.GetInstalledPlatformRelease(platform) + if platformRelease == nil { + return &cmderrors.PlatformNotFoundError{Platform: ref.String()} + } + ref.PlatformVersion = platformRelease.Version + } + + platform, tools, err := pme.FindPlatformReleaseDependencies(ref) + if err != nil { + return &cmderrors.NotFoundError{Message: i18n.Tr("Can't find dependencies for platform %s", ref), Cause: err} + } + + // TODO: pass context + if err := pme.UninstallPlatform(platform, taskCB, req.GetSkipPreUninstall()); err != nil { + return err + } + + for _, tool := range tools { + if !pme.IsToolRequired(tool) { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Uninstalling %s, tool is no more required", tool)}) + pme.UninstallTool(tool, taskCB, req.GetSkipPreUninstall()) + } + } + + return nil +} diff --git a/commands/service_platform_upgrade.go b/commands/service_platform_upgrade.go new file mode 100644 index 00000000000..11aac1346f8 --- /dev/null +++ b/commands/service_platform_upgrade.go @@ -0,0 +1,113 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + + "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/resources" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// PlatformUpgradeStreamResponseToCallbackFunction returns a gRPC stream to be used in PlatformUpgrade that sends +// all responses to the callback function. +func PlatformUpgradeStreamResponseToCallbackFunction(ctx context.Context, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (rpc.ArduinoCoreService_PlatformUpgradeServer, func() *rpc.PlatformUpgradeResponse_Result) { + var resp *rpc.PlatformUpgradeResponse_Result + return streamResponseToCallback(ctx, func(r *rpc.PlatformUpgradeResponse) error { + if r.GetProgress() != nil { + downloadCB(r.GetProgress()) + } + if r.GetTaskProgress() != nil { + taskCB(r.GetTaskProgress()) + } + if r.GetResult() != nil { + resp = r.GetResult() + } + return nil + }), func() *rpc.PlatformUpgradeResponse_Result { + return resp + } +} + +// PlatformUpgrade upgrades a platform package +func (s *arduinoCoreServerImpl) PlatformUpgrade(req *rpc.PlatformUpgradeRequest, stream rpc.ArduinoCoreService_PlatformUpgradeServer) error { + syncSend := NewSynchronizedSend(stream.Send) + ctx := stream.Context() + downloadCB := func(p *rpc.DownloadProgress) { + syncSend.Send(&rpc.PlatformUpgradeResponse{ + Message: &rpc.PlatformUpgradeResponse_Progress{ + Progress: p, + }, + }) + } + taskCB := func(p *rpc.TaskProgress) { + syncSend.Send(&rpc.PlatformUpgradeResponse{ + Message: &rpc.PlatformUpgradeResponse_TaskProgress{ + TaskProgress: p, + }, + }) + } + + upgrade := func() (*cores.PlatformRelease, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err + } + defer release() + + // Extract all PlatformReference to platforms that have updates + ref := &packagemanager.PlatformReference{ + Package: req.GetPlatformPackage(), + PlatformArchitecture: req.GetArchitecture(), + } + checks := resources.IntegrityCheckFull + if s.settings.BoardManagerEnableUnsafeInstall() { + checks = resources.IntegrityCheckNone + } + platform, err := pme.DownloadAndInstallPlatformUpgrades(ctx, ref, downloadCB, taskCB, req.GetSkipPostInstall(), req.GetSkipPreUninstall(), checks) + if err != nil { + return platform, err + } + + return platform, nil + } + + platformRelease, err := upgrade() + if platformRelease != nil { + syncSend.Send(&rpc.PlatformUpgradeResponse{ + Message: &rpc.PlatformUpgradeResponse_Result_{ + Result: &rpc.PlatformUpgradeResponse_Result{ + Platform: &rpc.Platform{ + Metadata: platformToRPCPlatformMetadata(platformRelease.Platform), + Release: platformReleaseToRPC(platformRelease), + }, + }, + }, + }) + } + if err != nil { + return err + } + + if err := s.Init(&rpc.InitRequest{Instance: req.GetInstance()}, InitStreamResponseToCallbackFunction(ctx, nil)); err != nil { + return err + } + + return nil +} diff --git a/commands/sketch/set_defaults.go b/commands/service_set_sketch_defaults.go similarity index 67% rename from commands/sketch/set_defaults.go rename to commands/service_set_sketch_defaults.go index 1a4ebc6b752..6b3ba044899 100644 --- a/commands/sketch/set_defaults.go +++ b/commands/service_set_sketch_defaults.go @@ -13,41 +13,48 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "context" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/sketch" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" ) // SetSketchDefaults updates the sketch project file (sketch.yaml) with the given defaults // for the values `default_fqbn`, `default_port`, and `default_protocol`. -func SetSketchDefaults(ctx context.Context, req *rpc.SetSketchDefaultsRequest) (*rpc.SetSketchDefaultsResponse, error) { - sk, err := sketch.New(paths.New(req.SketchPath)) +func (s *arduinoCoreServerImpl) SetSketchDefaults(ctx context.Context, req *rpc.SetSketchDefaultsRequest) (*rpc.SetSketchDefaultsResponse, error) { + sk, err := sketch.New(paths.New(req.GetSketchPath())) if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} + return nil, &cmderrors.CantOpenSketchError{Cause: err} } oldAddress, oldProtocol := sk.GetDefaultPortAddressAndProtocol() res := &rpc.SetSketchDefaultsResponse{ DefaultFqbn: sk.GetDefaultFQBN(), + DefaultProgrammer: sk.GetDefaultProgrammer(), DefaultPortAddress: oldAddress, DefaultPortProtocol: oldProtocol, } if fqbn := req.GetDefaultFqbn(); fqbn != "" { if err := sk.SetDefaultFQBN(fqbn); err != nil { - return nil, &arduino.CantUpdateSketchError{Cause: err} + return nil, &cmderrors.CantUpdateSketchError{Cause: err} } res.DefaultFqbn = fqbn } + if programmer := req.GetDefaultProgrammer(); programmer != "" { + if err := sk.SetDefaultProgrammer(programmer); err != nil { + return nil, &cmderrors.CantUpdateSketchError{Cause: err} + } + res.DefaultProgrammer = programmer + } if newAddress, newProtocol := req.GetDefaultPortAddress(), req.GetDefaultPortProtocol(); newAddress != "" { if err := sk.SetDefaultPort(newAddress, newProtocol); err != nil { - return nil, &arduino.CantUpdateSketchError{Cause: err} + return nil, &cmderrors.CantUpdateSketchError{Cause: err} } res.DefaultPortAddress = newAddress res.DefaultPortProtocol = newProtocol diff --git a/commands/service_settings.go b/commands/service_settings.go new file mode 100644 index 00000000000..7a0f7f252ae --- /dev/null +++ b/commands/service_settings.go @@ -0,0 +1,229 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "encoding/json" + "fmt" + "reflect" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/go-configmap" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "go.bug.st/f" + "google.golang.org/protobuf/proto" + "gopkg.in/yaml.v3" +) + +// SettingsGetValue returns a settings value given its key. If the key is not present +// an error will be returned, so that we distinguish empty settings from missing +// ones. +func (s *arduinoCoreServerImpl) ConfigurationGet(ctx context.Context, req *rpc.ConfigurationGetRequest) (*rpc.ConfigurationGetResponse, error) { + conf := &rpc.Configuration{ + Directories: &rpc.Configuration_Directories{ + Builtin: &rpc.Configuration_Directories_Builtin{}, + Data: s.settings.DataDir().String(), + Downloads: s.settings.DownloadsDir().String(), + User: s.settings.UserDir().String(), + }, + Network: &rpc.Configuration_Network{}, + Sketch: &rpc.Configuration_Sketch{ + AlwaysExportBinaries: s.settings.SketchAlwaysExportBinaries(), + }, + BuildCache: &rpc.Configuration_BuildCache{ + CompilationsBeforePurge: uint64(s.settings.GetCompilationsBeforeBuildCachePurge()), + TtlSecs: uint64(s.settings.GetBuildCacheTTL().Seconds()), + }, + BoardManager: &rpc.Configuration_BoardManager{ + AdditionalUrls: s.settings.BoardManagerAdditionalUrls(), + }, + Daemon: &rpc.Configuration_Daemon{ + Port: s.settings.DaemonPort(), + }, + Output: &rpc.Configuration_Output{ + NoColor: s.settings.NoColor(), + }, + Logging: &rpc.Configuration_Logging{ + Level: s.settings.LoggingLevel(), + Format: s.settings.LoggingFormat(), + }, + Library: &rpc.Configuration_Library{ + EnableUnsafeInstall: s.settings.LibraryEnableUnsafeInstall(), + }, + Updater: &rpc.Configuration_Updater{ + EnableNotification: s.settings.UpdaterEnableNotification(), + }, + } + + if builtinLibs := s.settings.IDEBuiltinLibrariesDir(); builtinLibs != nil { + conf.Directories.Builtin.Libraries = proto.String(builtinLibs.String()) + } + + if ua := s.settings.ExtraUserAgent(); ua != "" { + conf.Network.ExtraUserAgent = &ua + } + if proxy, err := s.settings.NetworkProxy(); err == nil && proxy != nil { + conf.Network.Proxy = proto.String(proxy.String()) + } + + if logFile := s.settings.LoggingFile(); logFile != nil { + file := logFile.String() + conf.Logging.File = &file + } + + if locale := s.settings.Locale(); locale != "" { + conf.Locale = &locale + } + + return &rpc.ConfigurationGetResponse{Configuration: conf}, nil +} + +func (s *arduinoCoreServerImpl) SettingsSetValue(ctx context.Context, req *rpc.SettingsSetValueRequest) (*rpc.SettingsSetValueResponse, error) { + // Determine the existence and the kind of the value + key := req.GetKey() + + // Extract the value from the request + encodedValue := []byte(req.GetEncodedValue()) + if len(encodedValue) == 0 { + // If the value is empty, unset the key + s.settings.Delete(key) + return &rpc.SettingsSetValueResponse{}, nil + } + + var newValue any + switch req.GetValueFormat() { + case "", "json": + if err := json.Unmarshal(encodedValue, &newValue); err != nil { + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("invalid value: %v", err)} + } + case "yaml": + if err := yaml.Unmarshal(encodedValue, &newValue); err != nil { + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("invalid value: %v", err)} + } + case "cli": + err := s.settings.SetFromCLIArgs(key, req.GetEncodedValue()) + if err != nil { + return nil, err + } + return &rpc.SettingsSetValueResponse{}, nil + default: + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("unsupported value format: %s", req.ValueFormat)} + } + + // If the value is "null", unset the key + if reflect.TypeOf(newValue) == reflect.TypeOf(nil) { + s.settings.Delete(key) + return &rpc.SettingsSetValueResponse{}, nil + } + + // Set the value + if err := s.settings.Set(key, newValue); err != nil { + return nil, err + } + + return &rpc.SettingsSetValueResponse{}, nil +} + +func (s *arduinoCoreServerImpl) SettingsGetValue(ctx context.Context, req *rpc.SettingsGetValueRequest) (*rpc.SettingsGetValueResponse, error) { + key := req.GetKey() + value, ok := s.settings.GetOk(key) + if !ok { + value, ok = s.settings.Defaults.GetOk(key) + } + if !ok { + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("key %s not found", key)} + } + + switch req.GetValueFormat() { + case "", "json": + valueJson, err := json.Marshal(value) + if err != nil { + return nil, fmt.Errorf("error marshalling value: %v", err) + } + return &rpc.SettingsGetValueResponse{EncodedValue: string(valueJson)}, nil + case "yaml": + valueYaml, err := yaml.Marshal(value) + if err != nil { + return nil, fmt.Errorf("error marshalling value: %v", err) + } + return &rpc.SettingsGetValueResponse{EncodedValue: string(valueYaml)}, nil + default: + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("unsupported value format: %s", req.ValueFormat)} + } +} + +// ConfigurationSave encodes the current configuration in the specified format +func (s *arduinoCoreServerImpl) ConfigurationSave(ctx context.Context, req *rpc.ConfigurationSaveRequest) (*rpc.ConfigurationSaveResponse, error) { + switch req.GetSettingsFormat() { + case "yaml": + data, err := yaml.Marshal(s.settings) + if err != nil { + return nil, fmt.Errorf("error marshalling settings: %v", err) + } + return &rpc.ConfigurationSaveResponse{EncodedSettings: string(data)}, nil + case "json": + data, err := json.MarshalIndent(s.settings, "", " ") + if err != nil { + return nil, fmt.Errorf("error marshalling settings: %v", err) + } + return &rpc.ConfigurationSaveResponse{EncodedSettings: string(data)}, nil + default: + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("unsupported format: %s", req.GetSettingsFormat())} + } +} + +// SettingsReadFromFile read settings from a YAML file and replace the settings currently stored in memory. +func (s *arduinoCoreServerImpl) ConfigurationOpen(ctx context.Context, req *rpc.ConfigurationOpenRequest) (*rpc.ConfigurationOpenResponse, error) { + warnings := []string{} + + switch req.GetSettingsFormat() { + case "yaml": + err := yaml.Unmarshal([]byte(req.GetEncodedSettings()), s.settings) + if errs, ok := err.(*configmap.UnmarshalErrors); ok { + warnings = f.Map(errs.WrappedErrors(), (error).Error) + } else if err != nil { + return nil, fmt.Errorf("error unmarshalling settings: %v", err) + } + case "json": + err := json.Unmarshal([]byte(req.GetEncodedSettings()), s.settings) + if errs, ok := err.(*configmap.UnmarshalErrors); ok { + warnings = f.Map(errs.WrappedErrors(), (error).Error) + } else if err != nil { + return nil, fmt.Errorf("error unmarshalling settings: %v", err) + } + default: + return nil, &cmderrors.InvalidArgumentError{Message: fmt.Sprintf("unsupported format: %s", req.GetSettingsFormat())} + } + + configuration.InjectEnvVars(s.settings) + return &rpc.ConfigurationOpenResponse{Warnings: warnings}, nil +} + +// SettingsEnumerate returns the list of all the settings keys. +func (s *arduinoCoreServerImpl) SettingsEnumerate(ctx context.Context, req *rpc.SettingsEnumerateRequest) (*rpc.SettingsEnumerateResponse, error) { + var entries []*rpc.SettingsEnumerateResponse_Entry + for k, t := range s.settings.Defaults.Schema() { + entries = append(entries, &rpc.SettingsEnumerateResponse_Entry{ + Key: k, + Type: t.String(), + }) + } + return &rpc.SettingsEnumerateResponse{ + Entries: entries, + }, nil +} diff --git a/commands/service_settings_test.go b/commands/service_settings_test.go new file mode 100644 index 00000000000..24959962f38 --- /dev/null +++ b/commands/service_settings_test.go @@ -0,0 +1,296 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "encoding/json" + "testing" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func loadConfig(t *testing.T, srv rpc.ArduinoCoreServiceServer, confPath *paths.Path) { + confPath.ToAbs() + conf, err := confPath.ReadFile() + require.NoError(t, err) + _, err = srv.ConfigurationOpen(context.Background(), &rpc.ConfigurationOpenRequest{ + EncodedSettings: string(conf), + SettingsFormat: "yaml", + }) + require.NoError(t, err) +} + +func TestGetAll(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + resp, err := srv.ConfigurationGet(context.Background(), &rpc.ConfigurationGetRequest{}) + require.Nil(t, err) + + defaultUserDir, err := srv.SettingsGetValue(context.Background(), &rpc.SettingsGetValueRequest{Key: "directories.user"}) + require.NoError(t, err) + + content, err := json.Marshal(resp.GetConfiguration()) + require.Nil(t, err) + require.JSONEq(t, `{ + "board_manager": { + "additional_urls": [ "http://foobar.com", "http://example.com" ] + }, + "build_cache": { + "compilations_before_purge": 10, + "ttl_secs": 2592000 + }, + "directories": { + "builtin": {}, + "data": "/home/massi/.arduino15", + "downloads": "/home/massi/.arduino15/staging", + "user": `+defaultUserDir.GetEncodedValue()+` + }, + "library": {}, + "logging": { + "format": "text", + "level": "info" + }, + "daemon":{ + "port":"50051" + }, + "network":{ + "proxy":"123" + }, + "output": {}, + "sketch": {}, + "updater": {} + }`, string(content)) +} + +func TestMerge(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + ctx := context.Background() + + get := func(key string) string { + resp, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: key}) + if err != nil { + return "" + } + return resp.GetEncodedValue() + } + + // Verify defaults + require.Equal(t, `"50051"`, get("daemon.port")) + require.Equal(t, "", get("foo")) + require.Equal(t, "false", get("sketch.always_export_binaries")) + + bulkSettings := `{"foo": "bar", "daemon":{"port":"420"}, "sketch": {"always_export_binaries": "true"}}` + _, err := srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{EncodedSettings: bulkSettings, SettingsFormat: "json"}) + require.Error(t, err) + + bulkSettings = `{"daemon":{"port":"420"}, "sketch": {"always_export_binaries": "true"}}` + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{EncodedSettings: bulkSettings, SettingsFormat: "json"}) + require.Error(t, err) + + bulkSettings = `{"daemon":{"port":"420"}, "sketch": {"always_export_binaries": true}}` + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{EncodedSettings: bulkSettings, SettingsFormat: "json"}) + require.NoError(t, err) + + require.Equal(t, `"420"`, get("daemon.port")) + require.Equal(t, ``, get("foo")) + require.Equal(t, "true", get("sketch.always_export_binaries")) + + bulkSettings = `{"daemon": {}, "sketch": {"always_export_binaries": false}}` + _, err = srv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{EncodedSettings: bulkSettings, SettingsFormat: "json"}) + require.NoError(t, err) + + require.Equal(t, `"50051"`, get("daemon.port")) + require.Equal(t, "", get("foo")) + require.Equal(t, "false", get("sketch.always_export_binaries")) + + _, err = srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{Key: "daemon.port", EncodedValue: ""}) + require.NoError(t, err) + + require.Equal(t, `"50051"`, get("daemon.port")) + // Verifies other values are not changed + require.Equal(t, "", get("foo")) + require.Equal(t, "false", get("sketch.always_export_binaries")) + +} + +func TestGetValue(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + key := &rpc.SettingsGetValueRequest{Key: "daemon"} + resp, err := srv.SettingsGetValue(context.Background(), key) + require.NoError(t, err) + require.Equal(t, `{"port":"50051"}`, resp.GetEncodedValue()) + + key = &rpc.SettingsGetValueRequest{Key: "daemon.port"} + resp, err = srv.SettingsGetValue(context.Background(), key) + require.NoError(t, err) + require.Equal(t, `"50051"`, resp.GetEncodedValue()) +} + +func TestGetOfSettedValue(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + // Verifies value is not set (try with a key without a default, like "directories.builtin.libraries") + ctx := context.Background() + res, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: "directories.builtin.libraries"}) + require.Nil(t, res) + require.Error(t, err, "Error getting settings value") + + // Set value + _, err = srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{ + Key: "directories.builtin.libraries", + EncodedValue: `"bar"`}) + require.NoError(t, err) + + // Verifies value is correctly returned + res, err = srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: "directories.builtin.libraries"}) + require.NoError(t, err) + require.Equal(t, `"bar"`, res.GetEncodedValue()) +} + +func TestGetValueNotFound(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + key := &rpc.SettingsGetValueRequest{Key: "DOESNTEXIST"} + _, err := srv.SettingsGetValue(context.Background(), key) + require.Error(t, err) +} + +func TestWrite(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + // Writes some settings + val := &rpc.SettingsSetValueRequest{ + Key: "directories.builtin.libraries", + EncodedValue: `"bar"`, + } + _, err := srv.SettingsSetValue(context.Background(), val) + require.NoError(t, err) + + resp, err := srv.ConfigurationSave(context.Background(), &rpc.ConfigurationSaveRequest{ + SettingsFormat: "yaml", + }) + require.NoError(t, err) + + // Verify encoded content + require.YAMLEq(t, ` +board_manager: + additional_urls: + - http://foobar.com + - http://example.com + +daemon: + port: "50051" + +directories: + data: /home/massi/.arduino15 + downloads: /home/massi/.arduino15/staging + builtin: + libraries: bar + +logging: + file: "" + format: text + level: info + +network: + proxy: "123" +`, resp.GetEncodedSettings()) +} + +func TestDelete(t *testing.T) { + srv := NewArduinoCoreServer() + loadConfig(t, srv, paths.New("testdata", "arduino-cli.yml")) + + // Check loaded config + resp, err := srv.ConfigurationSave(context.Background(), &rpc.ConfigurationSaveRequest{ + SettingsFormat: "yaml", + }) + require.NoError(t, err) + require.YAMLEq(t, ` +board_manager: + additional_urls: + - http://foobar.com + - http://example.com + +daemon: + port: "50051" + +directories: + data: /home/massi/.arduino15 + downloads: /home/massi/.arduino15/staging + +logging: + file: "" + format: text + level: info + +network: + proxy: "123" +`, resp.GetEncodedSettings()) + + // Check default and setted values + res, err := srv.SettingsGetValue(context.Background(), &rpc.SettingsGetValueRequest{Key: "network"}) + require.NoError(t, err) + require.Equal(t, `{"proxy":"123"}`, res.GetEncodedValue()) + // Maybe should be like this? + // require.Equal(t, `{"proxy":"123","connection_timeout":"1m0s"}`, res.GetEncodedValue()) + res, err = srv.SettingsGetValue(context.Background(), &rpc.SettingsGetValueRequest{Key: "network.connection_timeout"}) + require.Equal(t, `"1m0s"`, res.GetEncodedValue()) // default value + require.NoError(t, err) + + // Run deletion + _, err = srv.SettingsSetValue(context.Background(), &rpc.SettingsSetValueRequest{Key: "network", EncodedValue: ""}) + require.NoError(t, err) + resp, err = srv.ConfigurationSave(context.Background(), &rpc.ConfigurationSaveRequest{ + SettingsFormat: "yaml", + }) + require.NoError(t, err) + require.YAMLEq(t, ` +board_manager: + additional_urls: + - http://foobar.com + - http://example.com + +daemon: + port: "50051" + +directories: + data: /home/massi/.arduino15 + downloads: /home/massi/.arduino15/staging + +logging: + file: "" + format: text + level: info +`, resp.GetEncodedSettings()) + // Check default and setted values + res, err = srv.SettingsGetValue(context.Background(), &rpc.SettingsGetValueRequest{Key: "network"}) + require.NoError(t, err) + require.Equal(t, `{"connection_timeout":"1m0s"}`, res.GetEncodedValue()) + res, err = srv.SettingsGetValue(context.Background(), &rpc.SettingsGetValueRequest{Key: "network.connection_timeout"}) + require.Equal(t, `"1m0s"`, res.GetEncodedValue()) // default value + require.NoError(t, err) +} diff --git a/commands/sketch/archive.go b/commands/service_sketch_archive.go similarity index 69% rename from commands/sketch/archive.go rename to commands/service_sketch_archive.go index 583ead6225a..c4cde916321 100644 --- a/commands/sketch/archive.go +++ b/commands/service_sketch_archive.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "archive/zip" @@ -22,41 +22,39 @@ import ( "path/filepath" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" ) -var tr = i18n.Tr - // ArchiveSketch FIXMEDOC -func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.ArchiveSketchResponse, error) { +func (s *arduinoCoreServerImpl) ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.ArchiveSketchResponse, error) { // sketchName is the name of the sketch without extension, for example "MySketch" var sketchName string - sketchPath := paths.New(req.SketchPath) + sketchPath := paths.New(req.GetSketchPath()) if sketchPath == nil { sketchPath = paths.New(".") } - s, err := sketch.New(sketchPath) + sk, err := sketch.New(sketchPath) if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} + return nil, &cmderrors.CantOpenSketchError{Cause: err} } - sketchPath = s.FullPath - sketchName = s.Name + sketchPath = sk.FullPath + sketchName = sk.Name - archivePath := paths.New(req.ArchivePath) + archivePath := paths.New(req.GetArchivePath()) if archivePath == nil { archivePath = sketchPath.Parent() } archivePath, err = archivePath.Clean().Abs() if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error getting absolute path of sketch archive"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error getting absolute path of sketch archive"), Cause: err} } // Makes archivePath point to a zip file @@ -66,21 +64,21 @@ func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.Arc archivePath = paths.New(archivePath.String() + ".zip") } - if !req.Overwrite { + if !req.GetOverwrite() { if archivePath.Exist() { - return nil, &arduino.InvalidArgumentError{Message: tr("Archive already exists")} + return nil, &cmderrors.InvalidArgumentError{Message: i18n.Tr("Archive already exists")} } } filesToZip, err := sketchPath.ReadDirRecursive() if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error reading sketch files"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error reading sketch files"), Cause: err} } filesToZip.FilterOutDirs() archive, err := archivePath.Create() if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error creating sketch archive"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error creating sketch archive"), Cause: err} } defer archive.Close() @@ -89,10 +87,10 @@ func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.Arc for _, f := range filesToZip { - if !req.IncludeBuildDir { + if !req.GetIncludeBuildDir() { filePath, err := sketchPath.Parent().RelTo(f) if err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error calculating relative file path"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error calculating relative file path"), Cause: err} } // Skips build folder @@ -104,7 +102,7 @@ func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.Arc // We get the parent path since we want the archive to unpack as a folder. // If we don't do this the archive would contain all the sketch files as top level. if err := addFileToSketchArchive(zipWriter, f, sketchPath.Parent()); err != nil { - return nil, &arduino.PermissionDeniedError{Message: tr("Error adding file to sketch archive"), Cause: err} + return nil, &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error adding file to sketch archive"), Cause: err} } } diff --git a/commands/sketch/warn_deprecated.go b/commands/service_sketch_load.go similarity index 56% rename from commands/sketch/warn_deprecated.go rename to commands/service_sketch_load.go index a78f7156973..8360ce7adfd 100644 --- a/commands/sketch/warn_deprecated.go +++ b/commands/service_sketch_load.go @@ -13,24 +13,22 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( - "fmt" + "context" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" ) -// WarnDeprecatedFiles warns the user that a type of sketch files are deprecated -func WarnDeprecatedFiles(sketchPath *paths.Path) string { - // .pde files are still supported but deprecated, this warning urges the user to rename them - if files := sketch.CheckForPdeFiles(sketchPath); len(files) > 0 { - msg := tr("Sketches with .pde extension are deprecated, please rename the following files to .ino:") - for _, f := range files { - msg += fmt.Sprintf("\n - %s", f) - } - return msg +// LoadSketch collects and returns all information about a sketch +func (s *arduinoCoreServerImpl) LoadSketch(ctx context.Context, req *rpc.LoadSketchRequest) (*rpc.LoadSketchResponse, error) { + sk, err := sketch.New(paths.New(req.GetSketchPath())) + if err != nil { + return nil, &cmderrors.CantOpenSketchError{Cause: err} } - return "" + return &rpc.LoadSketchResponse{Sketch: sk.ToRpc()}, nil } diff --git a/commands/sketch/load_test.go b/commands/service_sketch_load_test.go similarity index 78% rename from commands/sketch/load_test.go rename to commands/service_sketch_load_test.go index bfae0e6a959..d7dfcdcf8fa 100644 --- a/commands/sketch/load_test.go +++ b/commands/service_sketch_load_test.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "context" @@ -24,10 +24,11 @@ import ( ) func TestLoadSketchProfiles(t *testing.T) { - loadResp, err := LoadSketch(context.Background(), &commands.LoadSketchRequest{ + srv := NewArduinoCoreServer() + loadResp, err := srv.LoadSketch(context.Background(), &commands.LoadSketchRequest{ SketchPath: "./testdata/sketch_with_profile", }) require.NoError(t, err) - require.Len(t, loadResp.GetProfiles(), 2) - require.Equal(t, loadResp.GetDefaultProfile().GetName(), "nanorp") + require.Len(t, loadResp.GetSketch().GetProfiles(), 2) + require.Equal(t, loadResp.GetSketch().GetDefaultProfile().GetName(), "nanorp") } diff --git a/commands/sketch/new.go b/commands/service_sketch_new.go similarity index 60% rename from commands/sketch/new.go rename to commands/service_sketch_new.go index b4fe3ab0e82..8f02908637a 100644 --- a/commands/sketch/new.go +++ b/commands/service_sketch_new.go @@ -13,16 +13,16 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "context" "errors" "regexp" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" ) @@ -43,31 +43,31 @@ var invalidNames = []string{"CON", "PRN", "AUX", "NUL", "COM0", "COM1", "COM2", "COM6", "COM7", "COM8", "COM9", "LPT0", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"} // NewSketch creates a new sketch via gRPC -func NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchResponse, error) { +func (s *arduinoCoreServerImpl) NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchResponse, error) { var sketchesDir string - if len(req.SketchDir) > 0 { - sketchesDir = req.SketchDir + if len(req.GetSketchDir()) > 0 { + sketchesDir = req.GetSketchDir() } else { - sketchesDir = configuration.Settings.GetString("directories.User") + sketchesDir = s.settings.UserDir().String() } - if err := validateSketchName(req.SketchName); err != nil { + if err := validateSketchName(req.GetSketchName()); err != nil { return nil, err } - sketchDirPath := paths.New(sketchesDir).Join(req.SketchName) + sketchDirPath := paths.New(sketchesDir).Join(req.GetSketchName()) if err := sketchDirPath.MkdirAll(); err != nil { - return nil, &arduino.CantCreateSketchError{Cause: err} + return nil, &cmderrors.CantCreateSketchError{Cause: err} } sketchName := sketchDirPath.Base() sketchMainFilePath := sketchDirPath.Join(sketchName + globals.MainFileValidExtension) - if !req.Overwrite { + if !req.GetOverwrite() { if sketchMainFilePath.Exist() { - return nil, &arduino.CantCreateSketchError{Cause: errors.New(tr(".ino file already exists"))} + return nil, &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr(".ino file already exists"))} } } if err := sketchMainFilePath.WriteFile(emptySketch); err != nil { - return nil, &arduino.CantCreateSketchError{Cause: err} + return nil, &cmderrors.CantCreateSketchError{Cause: err} } return &rpc.NewSketchResponse{MainFile: sketchMainFilePath.String()}, nil @@ -75,20 +75,20 @@ func NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchRe func validateSketchName(name string) error { if name == "" { - return &arduino.CantCreateSketchError{Cause: errors.New(tr("sketch name cannot be empty"))} + return &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr("sketch name cannot be empty"))} } if len(name) > sketchNameMaxLength { - return &arduino.CantCreateSketchError{Cause: errors.New(tr("sketch name too long (%[1]d characters). Maximum allowed length is %[2]d", + return &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr("sketch name too long (%[1]d characters). Maximum allowed length is %[2]d", len(name), sketchNameMaxLength))} } if !sketchNameValidationRegex.MatchString(name) { - return &arduino.CantCreateSketchError{Cause: errors.New(tr(`invalid sketch name "%[1]s": the first character must be alphanumeric or "_", the following ones can also contain "-" and ".". The last one cannot be ".".`, + return &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr(`invalid sketch name "%[1]s": the first character must be alphanumeric or "_", the following ones can also contain "-" and ".". The last one cannot be ".".`, name))} } for _, invalid := range invalidNames { if name == invalid { - return &arduino.CantCreateSketchError{Cause: errors.New(tr(`sketch name cannot be the reserved name "%[1]s"`, invalid))} + return &cmderrors.CantCreateSketchError{Cause: errors.New(i18n.Tr(`sketch name cannot be the reserved name "%[1]s"`, invalid))} } } return nil diff --git a/commands/sketch/new_test.go b/commands/service_sketch_new_test.go similarity index 82% rename from commands/sketch/new_test.go rename to commands/service_sketch_new_test.go index 00ae7856732..8dfb5a8168e 100644 --- a/commands/sketch/new_test.go +++ b/commands/service_sketch_new_test.go @@ -13,14 +13,14 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package sketch +package commands import ( "context" "fmt" "testing" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/stretchr/testify/require" ) @@ -34,8 +34,10 @@ func Test_SketchNameWrongPattern(t *testing.T) { "||||||||||||||", ",`hack[}attempt{];", } + + srv := NewArduinoCoreServer() for _, name := range invalidNames { - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ SketchName: name, SketchDir: t.TempDir(), }) @@ -46,9 +48,9 @@ func Test_SketchNameWrongPattern(t *testing.T) { } func Test_SketchNameEmpty(t *testing.T) { - emptyName := "" - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ - SketchName: emptyName, + srv := NewArduinoCoreServer() + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ + SketchName: "", SketchDir: t.TempDir(), }) @@ -60,7 +62,8 @@ func Test_SketchNameTooLong(t *testing.T) { for i := range tooLongName { tooLongName[i] = 'a' } - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ + srv := NewArduinoCoreServer() + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ SketchName: string(tooLongName), SketchDir: t.TempDir(), }) @@ -83,8 +86,9 @@ func Test_SketchNameOk(t *testing.T) { "_hello_world", string(lengthLimitName), } + srv := NewArduinoCoreServer() for _, name := range validNames { - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ SketchName: name, SketchDir: t.TempDir(), }) @@ -95,8 +99,9 @@ func Test_SketchNameOk(t *testing.T) { func Test_SketchNameReserved(t *testing.T) { invalidNames := []string{"CON", "PRN", "AUX", "NUL", "COM0", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT0", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"} + srv := NewArduinoCoreServer() for _, name := range invalidNames { - _, err := NewSketch(context.Background(), &commands.NewSketchRequest{ + _, err := srv.NewSketch(context.Background(), &rpc.NewSketchRequest{ SketchName: name, SketchDir: t.TempDir(), }) diff --git a/commands/daemon/stream.go b/commands/service_stream_utility.go similarity index 99% rename from commands/daemon/stream.go rename to commands/service_stream_utility.go index aa5e70fb770..4b285c443fc 100644 --- a/commands/daemon/stream.go +++ b/commands/service_stream_utility.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package daemon +package commands import ( "errors" diff --git a/commands/upload/upload.go b/commands/service_upload.go similarity index 69% rename from commands/upload/upload.go rename to commands/service_upload.go index 56815f983a6..10f759998d7 100644 --- a/commands/upload/upload.go +++ b/commands/service_upload.go @@ -13,66 +13,63 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package upload +package commands import ( "context" + "errors" "fmt" "io" "path/filepath" "strings" "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/serialutils" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" + serialutils "github.com/arduino/go-serial-utils" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" "github.com/sirupsen/logrus" ) -var tr = i18n.Tr - // SupportedUserFields returns a SupportedUserFieldsResponse containing all the UserFields supported // by the upload tools needed by the board using the protocol specified in SupportedUserFieldsRequest. -func SupportedUserFields(ctx context.Context, req *rpc.SupportedUserFieldsRequest) (*rpc.SupportedUserFieldsResponse, error) { - if req.Protocol == "" { - return nil, &arduino.MissingPortProtocolError{} +func (s *arduinoCoreServerImpl) SupportedUserFields(ctx context.Context, req *rpc.SupportedUserFieldsRequest) (*rpc.SupportedUserFieldsResponse, error) { + if req.GetProtocol() == "" { + return nil, &cmderrors.MissingPortProtocolError{} } - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - defer release() - - if pme == nil { - return nil, &arduino.InvalidInstanceError{} + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } + defer release() - fqbn, err := cores.ParseFQBN(req.GetFqbn()) + fqbn, err := fqbn.Parse(req.GetFqbn()) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } _, platformRelease, _, boardProperties, _, err := pme.ResolveFQBN(fqbn) if platformRelease == nil { - return nil, &arduino.PlatformNotFoundError{ - Platform: fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch), + return nil, &cmderrors.PlatformNotFoundError{ + Platform: fmt.Sprintf("%s:%s", fqbn.Vendor, fqbn.Architecture), Cause: err, } } else if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } - toolID, err := getToolID(boardProperties, "upload", req.Protocol) + toolID, err := getToolID(boardProperties, "upload", req.GetProtocol()) if err != nil { return nil, err } @@ -98,7 +95,7 @@ func getToolID(props *properties.Map, action, protocol string) (string, error) { return t, nil } - return "", &arduino.MissingPlatformPropertyError{Property: toolProperty} + return "", &cmderrors.MissingPlatformPropertyError{Property: toolProperty} } // getUserFields return all user fields supported by the tools specified. @@ -125,8 +122,33 @@ func getUserFields(toolID string, platformRelease *cores.PlatformRelease) []*rpc return userFields } -// Upload FIXMEDOC -func Upload(ctx context.Context, req *rpc.UploadRequest, outStream io.Writer, errStream io.Writer) (*rpc.UploadResult, error) { +// UploadToServerStreams return a server stream that forwards the output and error streams to the provided writers. +// It also returns a function that can be used to retrieve the result of the upload. +func UploadToServerStreams(ctx context.Context, outStream io.Writer, errStream io.Writer) (rpc.ArduinoCoreService_UploadServer, func() *rpc.UploadResult) { + var result *rpc.UploadResult + stream := streamResponseToCallback(ctx, func(resp *rpc.UploadResponse) error { + if errData := resp.GetErrStream(); len(errData) > 0 { + _, err := errStream.Write(errData) + return err + } + if outData := resp.GetOutStream(); len(outData) > 0 { + _, err := outStream.Write(outData) + return err + } + if res := resp.GetResult(); res != nil { + result = res + } + return nil + }) + return stream, func() *rpc.UploadResult { + return result + } +} + +// Upload performs the upload of a sketch to a board. +func (s *arduinoCoreServerImpl) Upload(req *rpc.UploadRequest, stream rpc.ArduinoCoreService_UploadServer) error { + syncSend := NewSynchronizedSend(stream.Send) + logrus.Tracef("Upload %s on %s started", req.GetSketchPath(), req.GetFqbn()) // TODO: make a generic function to extract sketch from request @@ -134,12 +156,12 @@ func Upload(ctx context.Context, req *rpc.UploadRequest, outStream io.Writer, er sketchPath := paths.New(req.GetSketchPath()) sk, err := sketch.New(sketchPath) if err != nil && req.GetImportDir() == "" && req.GetImportFile() == "" { - return nil, &arduino.CantOpenSketchError{Cause: err} + return &cmderrors.CantOpenSketchError{Cause: err} } - pme, pmeRelease := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} + pme, pmeRelease, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err } defer pmeRelease() @@ -148,14 +170,35 @@ func Upload(ctx context.Context, req *rpc.UploadRequest, outStream io.Writer, er fqbn = pme.GetProfile().FQBN } - updatedPort, err := runProgramAction( + programmer := req.GetProgrammer() + if programmer == "" && pme.GetProfile() != nil { + programmer = pme.GetProfile().Programmer + } + if programmer == "" && sk != nil { + programmer = sk.GetDefaultProgrammer() + } + + outStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.UploadResponse{ + Message: &rpc.UploadResponse_OutStream{OutStream: data}, + }) + }) + defer outStream.Close() + errStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.UploadResponse{ + Message: &rpc.UploadResponse_ErrStream{ErrStream: data}, + }) + }) + defer errStream.Close() + updatedPort, err := s.runProgramAction( + stream.Context(), pme, sk, req.GetImportFile(), req.GetImportDir(), fqbn, req.GetPort(), - req.GetProgrammer(), + programmer, req.GetVerbose(), req.GetVerify(), false, // burnBootloader @@ -163,47 +206,73 @@ func Upload(ctx context.Context, req *rpc.UploadRequest, outStream io.Writer, er errStream, req.GetDryRun(), req.GetUserFields(), + req.GetUploadProperties(), ) if err != nil { - return nil, err + return err } - - return &rpc.UploadResult{ - UpdatedUploadPort: updatedPort, - }, nil + return syncSend.Send(&rpc.UploadResponse{ + Message: &rpc.UploadResponse_Result{ + Result: &rpc.UploadResult{ + UpdatedUploadPort: updatedPort, + }, + }, + }) } -// UsingProgrammer FIXMEDOC -func UsingProgrammer(ctx context.Context, req *rpc.UploadUsingProgrammerRequest, outStream io.Writer, errStream io.Writer) error { +// UploadUsingProgrammer FIXMEDOC +func (s *arduinoCoreServerImpl) UploadUsingProgrammer(req *rpc.UploadUsingProgrammerRequest, stream rpc.ArduinoCoreService_UploadUsingProgrammerServer) error { + syncSend := NewSynchronizedSend(stream.Send) + streamAdapter := streamResponseToCallback(stream.Context(), func(resp *rpc.UploadResponse) error { + if errData := resp.GetErrStream(); len(errData) > 0 { + syncSend.Send(&rpc.UploadUsingProgrammerResponse{ + Message: &rpc.UploadUsingProgrammerResponse_ErrStream{ + ErrStream: errData, + }, + }) + } + if outData := resp.GetOutStream(); len(outData) > 0 { + syncSend.Send(&rpc.UploadUsingProgrammerResponse{ + Message: &rpc.UploadUsingProgrammerResponse_OutStream{ + OutStream: outData, + }, + }) + } + // resp.GetResult() is ignored + return nil + }) + logrus.Tracef("Upload using programmer %s on %s started", req.GetSketchPath(), req.GetFqbn()) if req.GetProgrammer() == "" { - return &arduino.MissingProgrammerError{} - } - _, err := Upload(ctx, &rpc.UploadRequest{ - Instance: req.GetInstance(), - SketchPath: req.GetSketchPath(), - ImportFile: req.GetImportFile(), - ImportDir: req.GetImportDir(), - Fqbn: req.GetFqbn(), - Port: req.GetPort(), - Programmer: req.GetProgrammer(), - Verbose: req.GetVerbose(), - Verify: req.GetVerify(), - UserFields: req.GetUserFields(), - }, outStream, errStream) - return err + return &cmderrors.MissingProgrammerError{} + } + return s.Upload(&rpc.UploadRequest{ + Instance: req.GetInstance(), + SketchPath: req.GetSketchPath(), + ImportFile: req.GetImportFile(), + ImportDir: req.GetImportDir(), + Fqbn: req.GetFqbn(), + Port: req.GetPort(), + Programmer: req.GetProgrammer(), + Verbose: req.GetVerbose(), + Verify: req.GetVerify(), + UserFields: req.GetUserFields(), + DryRun: req.GetDryRun(), + UploadProperties: req.GetUploadProperties(), + }, streamAdapter) } -func runProgramAction(pme *packagemanager.Explorer, +func (s *arduinoCoreServerImpl) runProgramAction(ctx context.Context, pme *packagemanager.Explorer, sk *sketch.Sketch, importFile, importDir, fqbnIn string, userPort *rpc.Port, programmerID string, verbose, verify, burnBootloader bool, outStream, errStream io.Writer, dryRun bool, userFields map[string]string, + requestUploadProperties []string, ) (*rpc.Port, error) { - port := discovery.PortFromRPCPort(userPort) + port := rpc.DiscoveryPortFromRPCPort(userPort) if port == nil || (port.Address == "" && port.Protocol == "") { // For no-port uploads use "default" protocol port = &discovery.Port{Protocol: "default"} @@ -211,24 +280,24 @@ func runProgramAction(pme *packagemanager.Explorer, logrus.WithField("port", port).Tracef("Upload port") if burnBootloader && programmerID == "" { - return nil, &arduino.MissingProgrammerError{} + return nil, &cmderrors.MissingProgrammerError{} } - fqbn, err := cores.ParseFQBN(fqbnIn) + fqbn, err := fqbn.Parse(fqbnIn) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } logrus.WithField("fqbn", fqbn).Tracef("Detected FQBN") // Find target board and board properties _, boardPlatform, board, boardProperties, buildPlatform, err := pme.ResolveFQBN(fqbn) if boardPlatform == nil { - return nil, &arduino.PlatformNotFoundError{ - Platform: fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch), + return nil, &cmderrors.PlatformNotFoundError{ + Platform: fmt.Sprintf("%s:%s", fqbn.Vendor, fqbn.Architecture), Cause: err, } } else if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } logrus. WithField("boardPlatform", boardPlatform). @@ -245,7 +314,7 @@ func runProgramAction(pme *packagemanager.Explorer, programmer = buildPlatform.Programmers[programmerID] } if programmer == nil { - return nil, &arduino.ProgrammerNotFoundError{Programmer: programmerID} + return nil, &cmderrors.ProgrammerNotFoundError{Programmer: programmerID} } } @@ -281,7 +350,7 @@ func runProgramAction(pme *packagemanager.Explorer, Trace("Upload tool") if split := strings.Split(uploadToolID, ":"); len(split) > 2 { - return nil, &arduino.InvalidPlatformPropertyError{ + return nil, &cmderrors.InvalidPlatformPropertyError{ Property: fmt.Sprintf("%s.tool.%s", action, port.Protocol), // TODO: Can be done better, maybe inline getToolID(...) Value: uploadToolID} } else if len(split) == 2 { @@ -290,12 +359,12 @@ func runProgramAction(pme *packagemanager.Explorer, PlatformArchitecture: boardPlatform.Platform.Architecture, }) if p == nil { - return nil, &arduino.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture} + return nil, &cmderrors.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture} } uploadToolID = split[1] uploadToolPlatform = pme.GetInstalledPlatformRelease(p) if uploadToolPlatform == nil { - return nil, &arduino.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture} + return nil, &cmderrors.PlatformNotFoundError{Platform: split[0] + ":" + boardPlatform.Platform.Architecture} } } @@ -313,6 +382,13 @@ func runProgramAction(pme *packagemanager.Explorer, uploadProperties.Merge(programmer.Properties) } + // Add user provided custom upload properties + if p, err := properties.LoadFromSlice(requestUploadProperties); err == nil { + uploadProperties.Merge(p) + } else { + return nil, fmt.Errorf("invalid build properties: %w", err) + } + // Certain tools require the user to provide custom fields at run time, // if they've been provided set them // For more info: @@ -322,7 +398,7 @@ func runProgramAction(pme *packagemanager.Explorer, } if !uploadProperties.ContainsKey("upload.protocol") && programmer == nil { - return nil, &arduino.ProgrammerRequiredForUploadError{} + return nil, &cmderrors.ProgrammerRequiredForUploadError{} } // Set properties for verbose upload @@ -368,22 +444,22 @@ func runProgramAction(pme *packagemanager.Explorer, } if !burnBootloader { - importPath, sketchName, err := determineBuildPathAndSketchName(importFile, importDir, sk, fqbn) + importPath, sketchName, err := s.determineBuildPathAndSketchName(importFile, importDir, sk) if err != nil { - return nil, &arduino.NotFoundError{Message: tr("Error finding build artifacts"), Cause: err} + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Error finding build artifacts"), Cause: err} } if !importPath.Exist() { - return nil, &arduino.NotFoundError{Message: tr("Compiled sketch not found in %s", importPath)} + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Compiled sketch not found in %s", importPath)} } if !importPath.IsDir() { - return nil, &arduino.NotFoundError{Message: tr("Expected compiled sketch in directory %s, but is a file instead", importPath)} + return nil, &cmderrors.NotFoundError{Message: i18n.Tr("Expected compiled sketch in directory %s, but is a file instead", importPath)} } uploadProperties.SetPath("build.path", importPath) uploadProperties.Set("build.project_name", sketchName) } // This context is kept alive for the entire duration of the upload - uploadCtx, uploadCompleted := context.WithCancel(context.Background()) + uploadCtx, uploadCompleted := context.WithCancel(ctx) defer uploadCompleted() // Start the upload port change detector. @@ -429,20 +505,20 @@ func runProgramAction(pme *packagemanager.Explorer, // if touch is requested but port is not specified, print a warning if touch && portToTouch == "" { - outStream.Write([]byte(fmt.Sprintln(tr("Skipping 1200-bps touch reset: no serial port selected!")))) + fmt.Fprintln(outStream, i18n.Tr("Skipping 1200-bps touch reset: no serial port selected!")) } cb := &serialutils.ResetProgressCallbacks{ TouchingPort: func(portAddress string) { logrus.WithField("phase", "board reset").Infof("Performing 1200-bps touch reset on serial port %s", portAddress) if verbose { - outStream.Write([]byte(fmt.Sprintln(tr("Performing 1200-bps touch reset on serial port %s", portAddress)))) + fmt.Fprintln(outStream, i18n.Tr("Performing 1200-bps touch reset on serial port %s", portAddress)) } }, WaitingForNewSerial: func() { logrus.WithField("phase", "board reset").Info("Waiting for upload port...") if verbose { - outStream.Write([]byte(fmt.Sprintln(tr("Waiting for upload port...")))) + fmt.Fprintln(outStream, i18n.Tr("Waiting for upload port...")) } }, BootloaderPortFound: func(portAddress string) { @@ -453,9 +529,9 @@ func runProgramAction(pme *packagemanager.Explorer, } if verbose { if portAddress != "" { - outStream.Write([]byte(fmt.Sprintln(tr("Upload port found on %s", portAddress)))) + fmt.Fprintln(outStream, i18n.Tr("Upload port found on %s", portAddress)) } else { - outStream.Write([]byte(fmt.Sprintln(tr("No upload port found, using %s as fallback", actualPort.Address)))) + fmt.Fprintln(outStream, i18n.Tr("No upload port found, using %s as fallback", actualPort.Address)) } } }, @@ -464,8 +540,8 @@ func runProgramAction(pme *packagemanager.Explorer, }, } - if newPortAddress, err := serialutils.Reset(portToTouch, wait, cb, dryRun); err != nil { - errStream.Write([]byte(fmt.Sprintln(tr("Cannot perform port reset: %s", err)))) + if newPortAddress, err := serialutils.Reset(portToTouch, wait, dryRun, nil, cb); err != nil { + fmt.Fprintln(errStream, i18n.Tr("Cannot perform port reset: %s", err)) } else { if newPortAddress != "" { actualPort.Address = newPortAddress @@ -498,19 +574,19 @@ func runProgramAction(pme *packagemanager.Explorer, // Run recipes for upload toolEnv := pme.GetEnvVarsForSpawnedProcess() if burnBootloader { - if err := runTool("erase.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { - return nil, &arduino.FailedUploadError{Message: tr("Failed chip erase"), Cause: err} + if err := runTool(uploadCtx, "erase.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { + return nil, &cmderrors.FailedUploadError{Message: i18n.Tr("Failed chip erase"), Cause: err} } - if err := runTool("bootloader.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { - return nil, &arduino.FailedUploadError{Message: tr("Failed to burn bootloader"), Cause: err} + if err := runTool(uploadCtx, "bootloader.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { + return nil, &cmderrors.FailedUploadError{Message: i18n.Tr("Failed to burn bootloader"), Cause: err} } } else if programmer != nil { - if err := runTool("program.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { - return nil, &arduino.FailedUploadError{Message: tr("Failed programming"), Cause: err} + if err := runTool(uploadCtx, "program.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { + return nil, &cmderrors.FailedUploadError{Message: i18n.Tr("Failed programming"), Cause: err} } } else { - if err := runTool("upload.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { - return nil, &arduino.FailedUploadError{Message: tr("Failed uploading"), Cause: err} + if err := runTool(uploadCtx, "upload.pattern", uploadProperties, outStream, errStream, verbose, dryRun, toolEnv); err != nil { + return nil, &cmderrors.FailedUploadError{Message: i18n.Tr("Failed uploading"), Cause: err} } } @@ -522,7 +598,7 @@ func runProgramAction(pme *packagemanager.Explorer, // If the algorithms can not detect the new port, fallback to the user-provided port. return userPort, nil } - return updatedPort.ToRPC(), nil + return rpc.DiscoveryPortToRPC(updatedPort), nil } func detectUploadPort( @@ -627,51 +703,67 @@ func detectUploadPort( } } -func runTool(recipeID string, props *properties.Map, outStream, errStream io.Writer, verbose bool, dryRun bool, toolEnv []string) error { +func runTool(ctx context.Context, recipeID string, props *properties.Map, outStream, errStream io.Writer, verbose bool, dryRun bool, toolEnv []string) error { + // if ctx is already canceled just exit + if err := ctx.Err(); err != nil { + return err + } + recipe, ok := props.GetOk(recipeID) if !ok { - return fmt.Errorf(tr("recipe not found '%s'"), recipeID) + return errors.New(i18n.Tr("recipe not found '%s'", recipeID)) } if strings.TrimSpace(recipe) == "" { return nil // Nothing to run } if props.IsPropertyMissingInExpandPropsInString("serial.port", recipe) || props.IsPropertyMissingInExpandPropsInString("serial.port.file", recipe) { - return fmt.Errorf(tr("no upload port provided")) + return errors.New(i18n.Tr("no upload port provided")) } cmdLine := props.ExpandPropsInString(recipe) cmdArgs, err := properties.SplitQuotedString(cmdLine, `"'`, false) if err != nil { - return fmt.Errorf(tr("invalid recipe '%[1]s': %[2]s"), recipe, err) + return errors.New(i18n.Tr("invalid recipe '%[1]s': %[2]s", recipe, err)) } // Run Tool logrus.WithField("phase", "upload").Tracef("Executing upload tool: %s", cmdLine) if verbose { - outStream.Write([]byte(fmt.Sprintln(cmdLine))) + fmt.Fprintln(outStream, cmdLine) } if dryRun { return nil } - cmd, err := executils.NewProcess(toolEnv, cmdArgs...) + cmd, err := paths.NewProcess(toolEnv, cmdArgs...) if err != nil { - return fmt.Errorf(tr("cannot execute upload tool: %s"), err) + return errors.New(i18n.Tr("cannot execute upload tool: %s", err)) } cmd.RedirectStdoutTo(outStream) cmd.RedirectStderrTo(errStream) if err := cmd.Start(); err != nil { - return fmt.Errorf(tr("cannot execute upload tool: %s"), err) + return errors.New(i18n.Tr("cannot execute upload tool: %s", err)) } + // If the ctx is canceled, kill the running command + completed := make(chan struct{}) + defer close(completed) + go func() { + select { + case <-ctx.Done(): + _ = cmd.Kill() + case <-completed: + } + }() + if err := cmd.Wait(); err != nil { - return fmt.Errorf(tr("uploading error: %s"), err) + return errors.New(i18n.Tr("uploading error: %s", err)) } return nil } -func determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sketch, fqbn *cores.FQBN) (*paths.Path, string, error) { +func (s *arduinoCoreServerImpl) determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sketch) (*paths.Path, string, error) { // In general, compiling a sketch will produce a set of files that are // named as the sketch but have different extensions, for example Sketch.ino // may produce: Sketch.ino.bin; Sketch.ino.hex; Sketch.ino.zip; etc... @@ -687,7 +779,7 @@ func determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sk // Case 1: importFile flag has been specified if importFile != "" { if importDir != "" { - return nil, "", fmt.Errorf(tr("%s and %s cannot be used together", "importFile", "importDir")) + return nil, "", errors.New(i18n.Tr("%s and %s cannot be used together", "importFile", "importDir")) } // We have a path like "path/to/my/build/SketchName.ino.bin". We are going to @@ -697,7 +789,7 @@ func determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sk importFilePath := paths.New(importFile) if !importFilePath.Exist() { - return nil, "", fmt.Errorf(tr("binary file not found in %s"), importFilePath) + return nil, "", errors.New(i18n.Tr("binary file not found in %s", importFilePath)) } return importFilePath.Parent(), strings.TrimSuffix(importFilePath.Base(), importFilePath.Ext()), nil } @@ -712,19 +804,19 @@ func determineBuildPathAndSketchName(importFile, importDir string, sk *sketch.Sk buildPath := paths.New(importDir) sketchName, err := detectSketchNameFromBuildPath(buildPath) if err != nil { - return nil, "", errors.Errorf(tr("autodetect build artifact: %s"), err) + return nil, "", fmt.Errorf("%s: %w", i18n.Tr("looking for build artifacts"), err) } return buildPath, sketchName, nil } // Case 3: nothing given... if sk == nil { - return nil, "", fmt.Errorf(tr("no sketch or build directory/file specified")) + return nil, "", errors.New(i18n.Tr("no sketch or build directory/file specified")) } // Case 4: only sketch specified. In this case we use the generated build path // and the given sketch name. - return sk.DefaultBuildPath(), sk.Name + sk.MainFile.Ext(), nil + return s.getDefaultSketchBuildPath(sk, nil), sk.Name + sk.MainFile.Ext(), nil } func detectSketchNameFromBuildPath(buildPath *paths.Path) (string, error) { @@ -764,12 +856,12 @@ func detectSketchNameFromBuildPath(buildPath *paths.Path) (string, error) { } if candidateName != name { - return "", errors.Errorf(tr("multiple build artifacts found: '%[1]s' and '%[2]s'"), candidateFile, file) + return "", errors.New(i18n.Tr("multiple build artifacts found: '%[1]s' and '%[2]s'", candidateFile, file)) } } if candidateName == "" { - return "", errors.New(tr("could not find a valid build artifact")) + return "", errors.New(i18n.Tr("could not find a valid build artifact")) } return candidateName, nil } diff --git a/commands/service_upload_burnbootloader.go b/commands/service_upload_burnbootloader.go new file mode 100644 index 00000000000..e03e8b3195c --- /dev/null +++ b/commands/service_upload_burnbootloader.go @@ -0,0 +1,96 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "io" + + "github.com/arduino/arduino-cli/commands/internal/instances" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" +) + +// BurnBootloaderToServerStreams return a server stream that forwards the output and error streams to the provided io.Writers +func BurnBootloaderToServerStreams(ctx context.Context, outStrem, errStream io.Writer) rpc.ArduinoCoreService_BurnBootloaderServer { + stream := streamResponseToCallback(ctx, func(resp *rpc.BurnBootloaderResponse) error { + if outData := resp.GetOutStream(); len(outData) > 0 { + _, err := outStrem.Write(outData) + return err + } + if errData := resp.GetErrStream(); len(errData) > 0 { + _, err := errStream.Write(errData) + return err + } + return nil + }) + return stream +} + +// BurnBootloader performs the burn bootloader action +func (s *arduinoCoreServerImpl) BurnBootloader(req *rpc.BurnBootloaderRequest, stream rpc.ArduinoCoreService_BurnBootloaderServer) error { + syncSend := NewSynchronizedSend(stream.Send) + outStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.BurnBootloaderResponse{ + Message: &rpc.BurnBootloaderResponse_OutStream{ + OutStream: data, + }, + }) + }) + defer outStream.Close() + errStream := feedStreamTo(func(data []byte) { + syncSend.Send(&rpc.BurnBootloaderResponse{ + Message: &rpc.BurnBootloaderResponse_ErrStream{ + ErrStream: data, + }, + }) + }) + defer errStream.Close() + + logrus. + WithField("fqbn", req.GetFqbn()). + WithField("port", req.GetPort()). + WithField("programmer", req.GetProgrammer()). + Trace("BurnBootloader started", req.GetFqbn()) + + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return err + } + defer release() + + if _, err := s.runProgramAction( + stream.Context(), + pme, + nil, // sketch + "", // importFile + "", // importDir + req.GetFqbn(), + req.GetPort(), + req.GetProgrammer(), + req.GetVerbose(), + req.GetVerify(), + true, // burnBootloader + outStream, + errStream, + req.GetDryRun(), + map[string]string{}, // User fields + req.GetUploadProperties(), + ); err != nil { + return err + } + return syncSend.Send(&rpc.BurnBootloaderResponse{}) +} diff --git a/commands/upload/programmers_list.go b/commands/service_upload_list_programmers.go similarity index 72% rename from commands/upload/programmers_list.go rename to commands/service_upload_list_programmers.go index b7290e68f5f..761d9babf5c 100644 --- a/commands/upload/programmers_list.go +++ b/commands/service_upload_list_programmers.go @@ -13,38 +13,39 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package upload +package commands import ( "context" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/pkg/fqbn" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) // ListProgrammersAvailableForUpload FIXMEDOC -func ListProgrammersAvailableForUpload(ctx context.Context, req *rpc.ListProgrammersAvailableForUploadRequest) (*rpc.ListProgrammersAvailableForUploadResponse, error) { - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} +func (s *arduinoCoreServerImpl) ListProgrammersAvailableForUpload(ctx context.Context, req *rpc.ListProgrammersAvailableForUploadRequest) (*rpc.ListProgrammersAvailableForUploadResponse, error) { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { + return nil, err } defer release() fqbnIn := req.GetFqbn() if fqbnIn == "" { - return nil, &arduino.MissingFQBNError{} + return nil, &cmderrors.MissingFQBNError{} } - fqbn, err := cores.ParseFQBN(fqbnIn) + fqbn, err := fqbn.Parse(fqbnIn) if err != nil { - return nil, &arduino.InvalidFQBNError{Cause: err} + return nil, &cmderrors.InvalidFQBNError{Cause: err} } // Find target platforms _, platform, _, _, refPlatform, err := pme.ResolveFQBN(fqbn) if err != nil { - return nil, &arduino.UnknownFQBNError{Cause: err} + return nil, &cmderrors.UnknownFQBNError{Cause: err} } result := []*rpc.Programmer{} diff --git a/commands/upload/upload_test.go b/commands/service_upload_test.go similarity index 73% rename from commands/upload/upload_test.go rename to commands/service_upload_test.go index e1f87cd9832..4a86a0f274b 100644 --- a/commands/upload/upload_test.go +++ b/commands/service_upload_test.go @@ -13,42 +13,45 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package upload +package commands import ( "bytes" + "context" "fmt" "strings" "testing" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/pkg/fqbn" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" ) func TestDetectSketchNameFromBuildPath(t *testing.T) { - sk1, err1 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_1")) + sk1, err1 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_1")) require.NoError(t, err1) require.Equal(t, "sketch.ino", sk1) - sk2, err2 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_2")) + sk2, err2 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_2")) require.NoError(t, err2) require.Equal(t, "Blink.ino", sk2) - sk3, err3 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_3")) + sk3, err3 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_3")) require.Error(t, err3) require.Equal(t, "", sk3) - sk4, err4 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_4")) + sk4, err4 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_4")) require.Error(t, err4) require.Equal(t, "", sk4) - sk5, err5 := detectSketchNameFromBuildPath(paths.New("testdata/build_path_invalid")) + sk5, err5 := detectSketchNameFromBuildPath(paths.New("testdata/upload/build_path_invalid")) require.Error(t, err5) require.Equal(t, "", sk5) } @@ -58,58 +61,60 @@ func TestDetermineBuildPathAndSketchName(t *testing.T) { importFile string importDir string sketch *sketch.Sketch - fqbn *cores.FQBN + fqbn *fqbn.FQBN resBuildPath string resSketchName string } - blonk, err := sketch.New(paths.New("testdata/Blonk")) + blonk, err := sketch.New(paths.New("testdata/upload/Blonk")) require.NoError(t, err) - fqbn, err := cores.ParseFQBN("arduino:samd:mkr1000") + fqbn, err := fqbn.Parse("arduino:samd:mkr1000") require.NoError(t, err) + srv := NewArduinoCoreServer().(*arduinoCoreServerImpl) + tests := []test{ // 00: error: no data passed in {"", "", nil, nil, "", ""}, // 01: use importFile to detect build.path and project_name - {"testdata/build_path_2/Blink.ino.hex", "", nil, nil, "testdata/build_path_2", "Blink.ino"}, + {"testdata/upload/build_path_2/Blink.ino.hex", "", nil, nil, "testdata/upload/build_path_2", "Blink.ino"}, // 02: use importPath as build.path and project_name - {"", "testdata/build_path_2", nil, nil, "testdata/build_path_2", "Blink.ino"}, + {"", "testdata/upload/build_path_2", nil, nil, "testdata/upload/build_path_2", "Blink.ino"}, // 03: error: used both importPath and importFile - {"testdata/build_path_2/Blink.ino.hex", "testdata/build_path_2", nil, nil, "", ""}, + {"testdata/upload/build_path_2/Blink.ino.hex", "testdata/upload/build_path_2", nil, nil, "", ""}, // 04: only sketch without FQBN - {"", "", blonk, nil, blonk.DefaultBuildPath().String(), "Blonk.ino"}, + {"", "", blonk, nil, srv.getDefaultSketchBuildPath(blonk, nil).String(), "Blonk.ino"}, // 05: use importFile to detect build.path and project_name, sketch is ignored. - {"testdata/build_path_2/Blink.ino.hex", "", blonk, nil, "testdata/build_path_2", "Blink.ino"}, + {"testdata/upload/build_path_2/Blink.ino.hex", "", blonk, nil, "testdata/upload/build_path_2", "Blink.ino"}, // 06: use importPath as build.path and Blink as project name, ignore the sketch Blonk - {"", "testdata/build_path_2", blonk, nil, "testdata/build_path_2", "Blink.ino"}, + {"", "testdata/upload/build_path_2", blonk, nil, "testdata/upload/build_path_2", "Blink.ino"}, // 07: error: used both importPath and importFile - {"testdata/build_path_2/Blink.ino.hex", "testdata/build_path_2", blonk, nil, "", ""}, + {"testdata/upload/build_path_2/Blink.ino.hex", "testdata/upload/build_path_2", blonk, nil, "", ""}, // 08: error: no data passed in {"", "", nil, fqbn, "", ""}, // 09: use importFile to detect build.path and project_name, fqbn ignored - {"testdata/build_path_2/Blink.ino.hex", "", nil, fqbn, "testdata/build_path_2", "Blink.ino"}, + {"testdata/upload/build_path_2/Blink.ino.hex", "", nil, fqbn, "testdata/upload/build_path_2", "Blink.ino"}, // 10: use importPath as build.path and project_name, fqbn ignored - {"", "testdata/build_path_2", nil, fqbn, "testdata/build_path_2", "Blink.ino"}, + {"", "testdata/upload/build_path_2", nil, fqbn, "testdata/upload/build_path_2", "Blink.ino"}, // 11: error: used both importPath and importFile - {"testdata/build_path_2/Blink.ino.hex", "testdata/build_path_2", nil, fqbn, "", ""}, + {"testdata/upload/build_path_2/Blink.ino.hex", "testdata/upload/build_path_2", nil, fqbn, "", ""}, // 12: use sketch to determine project name and sketch+fqbn to determine build path - {"", "", blonk, fqbn, blonk.DefaultBuildPath().String(), "Blonk.ino"}, + {"", "", blonk, fqbn, srv.getDefaultSketchBuildPath(blonk, nil).String(), "Blonk.ino"}, // 13: use importFile to detect build.path and project_name, sketch+fqbn is ignored. - {"testdata/build_path_2/Blink.ino.hex", "", blonk, fqbn, "testdata/build_path_2", "Blink.ino"}, + {"testdata/upload/build_path_2/Blink.ino.hex", "", blonk, fqbn, "testdata/upload/build_path_2", "Blink.ino"}, // 14: use importPath as build.path and Blink as project name, ignore the sketch Blonk, ignore fqbn - {"", "testdata/build_path_2", blonk, fqbn, "testdata/build_path_2", "Blink.ino"}, + {"", "testdata/upload/build_path_2", blonk, fqbn, "testdata/upload/build_path_2", "Blink.ino"}, // 15: error: used both importPath and importFile - {"testdata/build_path_2/Blink.ino.hex", "testdata/build_path_2", blonk, fqbn, "", ""}, + {"testdata/upload/build_path_2/Blink.ino.hex", "testdata/upload/build_path_2", blonk, fqbn, "", ""}, // 16: importPath containing multiple firmwares, but one has the same name as the containing folder - {"", "testdata/firmware", nil, fqbn, "testdata/firmware", "firmware.ino"}, + {"", "testdata/upload/firmware", nil, fqbn, "testdata/upload/firmware", "firmware.ino"}, // 17: importFile among multiple firmwares - {"testdata/firmware/another_firmware.ino.bin", "", nil, fqbn, "testdata/firmware", "another_firmware.ino"}, + {"testdata/upload/firmware/another_firmware.ino.bin", "", nil, fqbn, "testdata/upload/firmware", "another_firmware.ino"}, } for i, test := range tests { t.Run(fmt.Sprintf("SubTest%02d", i), func(t *testing.T) { - buildPath, sketchName, err := determineBuildPathAndSketchName(test.importFile, test.importDir, test.sketch, test.fqbn) + buildPath, sketchName, err := srv.determineBuildPathAndSketchName(test.importFile, test.importDir, test.sketch) if test.resBuildPath == "" { require.Error(t, err) require.Nil(t, buildPath) @@ -127,10 +132,10 @@ func TestDetermineBuildPathAndSketchName(t *testing.T) { } func TestUploadPropertiesComposition(t *testing.T) { - pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test") - errs := pmb.LoadHardwareFromDirectory(paths.New("testdata", "hardware")) + pmb := packagemanager.NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) + errs := pmb.LoadHardwareFromDirectory(paths.New("testdata", "upload", "hardware")) require.Len(t, errs, 0) - buildPath1 := paths.New("testdata", "build_path_1") + buildPath1 := paths.New("testdata", "upload", "build_path_1") logrus.SetLevel(logrus.TraceLevel) type test struct { importDir *paths.Path @@ -149,42 +154,44 @@ func TestUploadPropertiesComposition(t *testing.T) { tests := []test{ // 0: classic upload, requires port - {buildPath1, "alice:avr:board1", "port", "serial", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol port -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "port", "serial", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol port -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, {buildPath1, "alice:avr:board1", "", "", "", false, "FAIL", ""}, // 2: classic upload, no port - {buildPath1, "alice:avr:board2", "port", "serial", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, - {buildPath1, "alice:avr:board2", "", "", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board2", "port", "serial", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board2", "", "", "", false, "conf-board1 conf-general conf-upload $$VERBOSE-VERIFY$$ protocol -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, // 4: upload with programmer, requires port - {buildPath1, "alice:avr:board1", "port", "serial", "progr1", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ progprotocol port -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "port", "serial", "progr1", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ progprotocol port -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, {buildPath1, "alice:avr:board1", "", "", "progr1", false, "FAIL", ""}, // 6: upload with programmer, no port - {buildPath1, "alice:avr:board1", "port", "serial", "progr2", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog2protocol -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, - {buildPath1, "alice:avr:board1", "", "", "progr2", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog2protocol -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "port", "serial", "progr2", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog2protocol -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "", "", "progr2", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog2protocol -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, // 8: upload with programmer, require port through extra params - {buildPath1, "alice:avr:board1", "port", "serial", "progr3", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog3protocol port -bspeed testdata/build_path_1/sketch.ino.hex\n", ""}, + {buildPath1, "alice:avr:board1", "port", "serial", "progr3", false, "conf-board1 conf-general conf-program $$VERBOSE-VERIFY$$ prog3protocol port -bspeed testdata/upload/build_path_1/sketch.ino.hex\n", ""}, {buildPath1, "alice:avr:board1", "", "", "progr3", false, "FAIL", ""}, // 10: burn bootloader, require port {buildPath1, "alice:avr:board1", "port", "serial", "", true, "FAIL", ""}, // requires programmer {buildPath1, "alice:avr:board1", "port", "serial", "progr1", true, "ERASE conf-board1 conf-general conf-erase $$VERBOSE-VERIFY$$ genprog1protocol port -bspeed\n", - "BURN conf-board1 conf-general conf-bootloader $$VERBOSE-VERIFY$$ genprog1protocol port -bspeed -F0xFF " + cwd + "/testdata/hardware/alice/avr/bootloaders/niceboot/niceboot.hex\n"}, + "BURN conf-board1 conf-general conf-bootloader $$VERBOSE-VERIFY$$ genprog1protocol port -bspeed -F0xFF " + cwd + "/testdata/upload/hardware/alice/avr/bootloaders/niceboot/niceboot.hex\n"}, // 12: burn bootloader, preferences override from programmers.txt {buildPath1, "alice:avr:board1", "port", "serial", "progr4", true, "ERASE conf-board1 conf-two-general conf-two-erase $$VERBOSE-VERIFY$$ prog4protocol-bootloader port -bspeed\n", - "BURN conf-board1 conf-two-general conf-two-bootloader $$VERBOSE-VERIFY$$ prog4protocol-bootloader port -bspeed -F0xFF " + cwd + "/testdata/hardware/alice/avr/bootloaders/niceboot/niceboot.hex\n"}, + "BURN conf-board1 conf-two-general conf-two-bootloader $$VERBOSE-VERIFY$$ prog4protocol-bootloader port -bspeed -F0xFF " + cwd + "/testdata/upload/hardware/alice/avr/bootloaders/niceboot/niceboot.hex\n"}, } pm := pmb.Build() pme, release := pm.NewExplorer() defer release() + srv := NewArduinoCoreServer().(*arduinoCoreServerImpl) testRunner := func(t *testing.T, test test, verboseVerify bool) { outStream := &bytes.Buffer{} errStream := &bytes.Buffer{} - _, err := runProgramAction( + _, err := srv.runProgramAction( + context.Background(), pme, nil, // sketch "", // importFile @@ -199,6 +206,7 @@ func TestUploadPropertiesComposition(t *testing.T) { errStream, false, map[string]string{}, + nil, ) verboseVerifyOutput := "verbose verify" if !verboseVerify { @@ -288,14 +296,14 @@ tools.arduino_ota.upload.field.password.secret=true`)) userFields := getUserFields("avrdude", platformRelease) require.Len(t, userFields, 2) - require.Equal(t, userFields[0].ToolId, "avrdude") - require.Equal(t, userFields[0].Name, "username") - require.Equal(t, userFields[0].Label, "Username") - require.False(t, userFields[0].Secret) - require.Equal(t, userFields[1].ToolId, "avrdude") - require.Equal(t, userFields[1].Name, "password") - require.Equal(t, userFields[1].Label, "Password") - require.True(t, userFields[1].Secret) + require.Equal(t, userFields[0].GetToolId(), "avrdude") + require.Equal(t, userFields[0].GetName(), "username") + require.Equal(t, userFields[0].GetLabel(), "Username") + require.False(t, userFields[0].GetSecret()) + require.Equal(t, userFields[1].GetToolId(), "avrdude") + require.Equal(t, userFields[1].GetName(), "password") + require.Equal(t, userFields[1].GetLabel(), "Password") + require.True(t, userFields[1].GetSecret()) props, err = properties.LoadFromBytes([]byte(` tools.arduino_ota.upload.field.password=Password @@ -310,10 +318,10 @@ tools.arduino_ota.upload.field.some_field=This is a really long label that ideal platformRelease.Properties = props userFields = getUserFields("arduino_ota", platformRelease) require.Len(t, userFields, 1) - require.Equal(t, userFields[0].ToolId, "arduino_ota") - require.Equal(t, userFields[0].Name, "some_field") - require.Equal(t, userFields[0].Label, "This is a really long label that ideally must nev…") - require.False(t, userFields[0].Secret) + require.Equal(t, userFields[0].GetToolId(), "arduino_ota") + require.Equal(t, userFields[0].GetName(), "some_field") + require.Equal(t, userFields[0].GetLabel(), "This is a really long label that ideally must nev…") + require.False(t, userFields[0].GetSecret()) } func TestOverrideProtocolProperties(t *testing.T) { diff --git a/commands/sketch/load.go b/commands/sketch/load.go deleted file mode 100644 index ee6eb649ca5..00000000000 --- a/commands/sketch/load.go +++ /dev/null @@ -1,79 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package sketch - -import ( - "context" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/sketch" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - paths "github.com/arduino/go-paths-helper" -) - -// LoadSketch collects and returns all files composing a sketch -func LoadSketch(ctx context.Context, req *rpc.LoadSketchRequest) (*rpc.LoadSketchResponse, error) { - // TODO: This should be a ToRpc function for the Sketch struct - sk, err := sketch.New(paths.New(req.SketchPath)) - if err != nil { - return nil, &arduino.CantOpenSketchError{Cause: err} - } - - otherSketchFiles := make([]string, sk.OtherSketchFiles.Len()) - for i, file := range sk.OtherSketchFiles { - otherSketchFiles[i] = file.String() - } - - additionalFiles := make([]string, sk.AdditionalFiles.Len()) - for i, file := range sk.AdditionalFiles { - additionalFiles[i] = file.String() - } - - rootFolderFiles := make([]string, sk.RootFolderFiles.Len()) - for i, file := range sk.RootFolderFiles { - rootFolderFiles[i] = file.String() - } - - defaultPort, defaultProtocol := sk.GetDefaultPortAddressAndProtocol() - - profiles := make([](*rpc.SketchProfile), len(sk.Project.Profiles)) - for i, profile := range sk.Project.Profiles { - profiles[i] = &rpc.SketchProfile{ - Name: profile.Name, - Fqbn: profile.FQBN, - } - } - - defaultProfileResp := &rpc.SketchProfile{} - defaultProfile := sk.GetProfile(sk.Project.DefaultProfile) - if defaultProfile != nil { - defaultProfileResp.Name = defaultProfile.Name - defaultProfileResp.Fqbn = defaultProfile.FQBN - } - - return &rpc.LoadSketchResponse{ - MainFile: sk.MainFile.String(), - LocationPath: sk.FullPath.String(), - OtherSketchFiles: otherSketchFiles, - AdditionalFiles: additionalFiles, - RootFolderFiles: rootFolderFiles, - DefaultFqbn: sk.GetDefaultFQBN(), - DefaultPort: defaultPort, - DefaultProtocol: defaultProtocol, - Profiles: profiles, - DefaultProfile: defaultProfileResp, - }, nil -} diff --git a/commands/daemon/term_example/main.go b/commands/term_example/main.go similarity index 86% rename from commands/daemon/term_example/main.go rename to commands/term_example/main.go index 16aa36f3d53..f5f96623617 100644 --- a/commands/daemon/term_example/main.go +++ b/commands/term_example/main.go @@ -31,7 +31,7 @@ import ( // This program exercise CLI monitor functionality. func main() { - conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) + conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatal("error connecting to arduino-cli rpc server, you can start it by running `arduino-cli daemon`") } @@ -44,7 +44,7 @@ func main() { if err != nil { log.Fatal("Create:", err) } - instance := resp.Instance + instance := resp.GetInstance() respStream, err := cli.Init(context.Background(), &commands.InitRequest{Instance: instance}) if err != nil { @@ -70,8 +70,8 @@ func main() { if len(ports) == 0 { log.Fatal("No port to connect!") } - port := ports[0].Port - fmt.Println("Detected port:", port.Label, port.ProtocolLabel) + port := ports[0].GetPort() + fmt.Println("Detected port:", port.GetLabel(), port.GetProtocolLabel()) connectToPort(cli, instance, port) time.Sleep(5 * time.Second) @@ -89,8 +89,10 @@ func connectToPort(cli commands.ArduinoCoreServiceClient, instance *commands.Ins log.Fatal("Error opening Monitor:", err) } if err := monitorClient.Send(&commands.MonitorRequest{ - Instance: instance, - Port: port, + Message: &commands.MonitorRequest_OpenRequest{OpenRequest: &commands.MonitorPortOpenRequest{ + Instance: instance, + Port: port, + }}, }); err != nil { log.Fatal("Error sending Monitor config:", err) } @@ -106,9 +108,9 @@ func connectToPort(cli commands.ArduinoCoreServiceClient, instance *commands.Ins } }() - hello := &commands.MonitorRequest{ + hello := &commands.MonitorRequest{Message: &commands.MonitorRequest_TxData{ TxData: []byte("HELLO!"), - } + }} fmt.Println("Send:", hello) if err := monitorClient.Send(hello); err != nil { log.Fatal("Monitor send HELLO:", err) diff --git a/commands/daemon/testdata/arduino-cli.yml b/commands/testdata/arduino-cli.yml similarity index 100% rename from commands/daemon/testdata/arduino-cli.yml rename to commands/testdata/arduino-cli.yml diff --git a/commands/debug/testdata/custom_hardware/arduino-test/samd/boards.txt b/commands/testdata/debug/custom_hardware/arduino-test/samd/boards.txt similarity index 100% rename from commands/debug/testdata/custom_hardware/arduino-test/samd/boards.txt rename to commands/testdata/debug/custom_hardware/arduino-test/samd/boards.txt diff --git a/commands/debug/testdata/custom_hardware/arduino-test/samd/platform.txt b/commands/testdata/debug/custom_hardware/arduino-test/samd/platform.txt similarity index 100% rename from commands/debug/testdata/custom_hardware/arduino-test/samd/platform.txt rename to commands/testdata/debug/custom_hardware/arduino-test/samd/platform.txt diff --git a/commands/testdata/debug/custom_hardware/arduino-test/samd/programmers.txt b/commands/testdata/debug/custom_hardware/arduino-test/samd/programmers.txt new file mode 100644 index 00000000000..332ca0d5c51 --- /dev/null +++ b/commands/testdata/debug/custom_hardware/arduino-test/samd/programmers.txt @@ -0,0 +1 @@ +edbg.name=edbg diff --git a/commands/debug/testdata/data_dir/packages/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb b/commands/testdata/debug/data_dir/packages/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb similarity index 100% rename from commands/debug/testdata/data_dir/packages/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb rename to commands/testdata/debug/data_dir/packages/arduino-test/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb diff --git a/commands/debug/testdata/data_dir/packages/arduino-test/tools/openocd/0.10.0-arduino7/bin/openocd b/commands/testdata/debug/data_dir/packages/arduino-test/tools/openocd/0.10.0-arduino7/bin/openocd similarity index 100% rename from commands/debug/testdata/data_dir/packages/arduino-test/tools/openocd/0.10.0-arduino7/bin/openocd rename to commands/testdata/debug/data_dir/packages/arduino-test/tools/openocd/0.10.0-arduino7/bin/openocd diff --git a/commands/debug/testdata/hello/build/arduino-test.samd.arduino_zero_edbg/hello.ino.bin b/commands/testdata/debug/hello/build/arduino-test.samd.arduino_zero_edbg/hello.ino.bin similarity index 100% rename from commands/debug/testdata/hello/build/arduino-test.samd.arduino_zero_edbg/hello.ino.bin rename to commands/testdata/debug/hello/build/arduino-test.samd.arduino_zero_edbg/hello.ino.bin diff --git a/commands/debug/testdata/hello/build/arduino-test.samd.mkr1000/hello.ino.bin b/commands/testdata/debug/hello/build/arduino-test.samd.mkr1000/hello.ino.bin similarity index 100% rename from commands/debug/testdata/hello/build/arduino-test.samd.mkr1000/hello.ino.bin rename to commands/testdata/debug/hello/build/arduino-test.samd.mkr1000/hello.ino.bin diff --git a/commands/debug/testdata/hello/hello.ino b/commands/testdata/debug/hello/hello.ino similarity index 100% rename from commands/debug/testdata/hello/hello.ino rename to commands/testdata/debug/hello/hello.ino diff --git a/commands/lib/testdata/full/library_index.json b/commands/testdata/libraries/full/library_index.json similarity index 100% rename from commands/lib/testdata/full/library_index.json rename to commands/testdata/libraries/full/library_index.json diff --git a/commands/testdata/libraries/qualified_search/library_index.json b/commands/testdata/libraries/qualified_search/library_index.json new file mode 100644 index 00000000000..23dfb04bae9 --- /dev/null +++ b/commands/testdata/libraries/qualified_search/library_index.json @@ -0,0 +1,136 @@ +{ + "libraries": [ + { + "name": "Array", + "version": "1.2.1", + "author": "Peter Polidoro \u003cpeterpolidoro@gmail.com\u003e", + "maintainer": "Peter Polidoro \u003cpeterpolidoro@gmail.com\u003e", + "sentence": "An array container similar to the C++ std::array", + "paragraph": "Like this project? Please star it on GitHub!", + "website": "https://github.com/janelia-arduino/Array.git", + "category": "Data Storage", + "architectures": ["*"], + "types": ["Contributed"], + "repository": "https://github.com/janelia-arduino/Array.git", + "url": "https://downloads.arduino.cc/libraries/github.com/janelia-arduino/Array-1.2.1.zip", + "archiveFileName": "Array-1.2.1.zip", + "size": 7859, + "checksum": "SHA-256:dc69e0b4d1390c08253120a80e6e07e5cc6185ec24cbe3cb96dec2d8173e6495" + }, + { + "name": "esp8266-framework", + "version": "1.1.5", + "author": "Suraj I.", + "maintainer": "Suraj I. \u003csurajinamdar151@gmail.com\u003e", + "sentence": "esp8266 framework stack for easy configurable applications", + "paragraph": "esp8266 framework includes all services like gpio, wifi, http, mqtt, ntp, ota, napt, espnow, mesh, server etc. which are ready to use in all applications", + "website": "https://github.com/Suraj151/esp8266-framework", + "category": "Communication", + "architectures": ["esp8266"], + "types": ["Contributed"], + "repository": "https://github.com/Suraj151/esp8266-framework.git", + "url": "https://downloads.arduino.cc/libraries/github.com/Suraj151/esp8266_framework-1.1.5.zip", + "archiveFileName": "esp8266_framework-1.1.5.zip", + "size": 1918535, + "checksum": "SHA-256:81731d4ccc80846c317a2d4e2086d32caa695ed97d3e4765a59c5651b4be30b5" + }, + { + "name": "Painless Mesh", + "version": "1.5.0", + "author": "Coopdis,Scotty Franzyshen,Edwin van Leeuwen,Germán Martín,Maximilian Schwarz,Doanh Doanh", + "maintainer": "Edwin van Leeuwen", + "sentence": "A painless way to setup a mesh with ESP8266 and ESP32 devices", + "paragraph": "A painless way to setup a mesh with ESP8266 and ESP32 devices", + "website": "https://gitlab.com/painlessMesh/painlessMesh", + "category": "Communication", + "architectures": ["esp8266", "esp32"], + "types": ["Contributed"], + "repository": "https://gitlab.com/painlessMesh/painlessMesh.git", + "providesIncludes": ["painlessMesh.h"], + "dependencies": [ + { + "name": "ArduinoJson" + }, + { + "name": "TaskScheduler" + } + ], + "url": "https://downloads.arduino.cc/libraries/gitlab.com/painlessMesh/Painless_Mesh-1.5.0.zip", + "archiveFileName": "Painless_Mesh-1.5.0.zip", + "size": 293531, + "checksum": "SHA-256:9d965064fc704e8ba19c0452cc50e619145f7869b9b135dbf7e521f6ec0a4b33" + }, + { + "name": "Pushdata_ESP8266_SSL", + "version": "0.0.6", + "author": "Ragnar Lonn", + "maintainer": "Ragnar Lonn \u003chello@pushdata.io\u003e", + "license": "MIT", + "sentence": "Free, ultra-simple time series data storage for your IoT sensors", + "paragraph": "Pushdata.io client library that makes it very simple to store your time series data online", + "website": "https://pushdata.io", + "category": "Communication", + "architectures": ["*"], + "types": ["Contributed"], + "repository": "https://github.com/pushdata-io/Arduino_ESP8266_SSL.git", + "providesIncludes": ["Pushdata_ESP8266_SSL.h"], + "url": "https://downloads.arduino.cc/libraries/github.com/pushdata-io/Pushdata_ESP8266_SSL-0.0.6.zip", + "archiveFileName": "Pushdata_ESP8266_SSL-0.0.6.zip", + "size": 12160, + "checksum": "SHA-256:5d592eb7900782f681b86f5fd77c5d9f25c78555e3b5f0880c52197031206df0" + }, + { + "name": "RF24Mesh", + "version": "1.0.0", + "author": "TMRh20", + "maintainer": "TMRh20", + "sentence": "A library for NRF24L01(+) devices mesh.", + "paragraph": "Provides a simple and seamless 'mesh' layer for sensor networks, allowing automatic and dynamic configuration that can be customized to suit many scenarios. It is currently designed to interface directly with with the RF24Network Development library, an OSI Network Layer using nRF24L01(+) radios driven by the newly optimized RF24 library fork.", + "website": "http://tmrh20.github.io/RF24Mesh/", + "category": "Communication", + "architectures": ["avr"], + "types": ["Contributed"], + "repository": "https://github.com/TMRh20/RF24Mesh.git", + "url": "https://downloads.arduino.cc/libraries/github.com/TMRh20/RF24Mesh-1.0.0.zip", + "archiveFileName": "RF24Mesh-1.0.0.zip", + "size": 31419, + "checksum": "SHA-256:1b122a6412bc06a33a7fbcef34e2210d0990c25839fd7bc547604103f28194b5" + }, + { + "name": "RTCtime", + "version": "1.0.5", + "author": "smz \u003ctinker@smz.it\u003e", + "maintainer": "smz (https://github.com/smz)", + "sentence": "A \"Standard C Runtime\" compatible library for interfacing the DS1307 and DS3231 Real Time Clock modules.", + "paragraph": "This library is for getting/setting time from hardware RTC modules. It uses an API compatible with the AVR implementation of the Standard C runtime time library as available in the Arduino IDE since version 1.6.10 (AVR C Runtime Library 2.0.0)", + "website": "https://github.com/smz/Arduino-RTCtime", + "category": "Timing", + "architectures": ["*"], + "types": ["Contributed"], + "repository": "https://github.com/smz/Arduino-RTCtime.git", + "url": "https://downloads.arduino.cc/libraries/github.com/smz/RTCtime-1.0.5.zip", + "archiveFileName": "RTCtime-1.0.5.zip", + "size": 18870, + "checksum": "SHA-256:89493bb6d1f834426e82330fdf55a249ff43eb61707831d75deed8644a7ebce8" + }, + { + "name": "DLLN3X ZigBee Mesh Module Library", + "version": "1.0.1", + "author": "Duke Liu \u003cmentalflow@ourdocs.cn\u003e", + "maintainer": "Duke Liu \u003cmentalflow@ourdocs.cn\u003e", + "license": "MIT", + "sentence": "This library allows you to use DLLN3X ZigBee mesh module very easily.", + "paragraph": "This library currently allows basic send and receive operations using the DLLN3X module, with more features to come.", + "website": "https://github.com/mentalfl0w/DLLN3X_zigbee_mesh_module_library", + "category": "Communication", + "architectures": ["*"], + "types": ["Contributed"], + "repository": "https://github.com/mentalfl0w/DLLN3X_zigbee_mesh_module_library.git", + "providesIncludes": ["DLLN3X.h"], + "url": "https://downloads.arduino.cc/libraries/github.com/mentalfl0w/DLLN3X_ZigBee_Mesh_Module_Library-1.0.1.zip", + "archiveFileName": "DLLN3X_ZigBee_Mesh_Module_Library-1.0.1.zip", + "size": 6122, + "checksum": "SHA-256:a28833bbd575ef8deab744a1f0e1175dad9e5329bf5c620fc2fe53e1de1d32ba" + } + ] +} diff --git a/commands/lib/testdata/test1/library_index.json b/commands/testdata/libraries/test1/library_index.json similarity index 100% rename from commands/lib/testdata/test1/library_index.json rename to commands/testdata/libraries/test1/library_index.json diff --git a/commands/core/testdata/package_index.json b/commands/testdata/platform/package_index.json similarity index 100% rename from commands/core/testdata/package_index.json rename to commands/testdata/platform/package_index.json diff --git a/commands/sketch/testdata/sketch_with_profile/sketch.yml b/commands/testdata/sketch_with_profile/sketch.yml similarity index 100% rename from commands/sketch/testdata/sketch_with_profile/sketch.yml rename to commands/testdata/sketch_with_profile/sketch.yml diff --git a/commands/sketch/testdata/sketch_with_profile/sketch_with_profile.ino b/commands/testdata/sketch_with_profile/sketch_with_profile.ino similarity index 100% rename from commands/sketch/testdata/sketch_with_profile/sketch_with_profile.ino rename to commands/testdata/sketch_with_profile/sketch_with_profile.ino diff --git a/commands/upload/testdata/Blonk/Blonk.ino b/commands/testdata/upload/Blonk/Blonk.ino similarity index 100% rename from commands/upload/testdata/Blonk/Blonk.ino rename to commands/testdata/upload/Blonk/Blonk.ino diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.bin b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.bin similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.bin rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.bin diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.elf b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.elf similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.elf rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.elf diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.hex b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.hex similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.hex rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.hex diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.map b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.map similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.map rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.map diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.bin b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.bin similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.bin rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.bin diff --git a/commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.hex b/commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.hex similarity index 100% rename from commands/upload/testdata/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.hex rename to commands/testdata/upload/Blonk/build/arduino.samd.mkr1000/Blonk.ino.with_bootloader.hex diff --git a/commands/upload/testdata/build_path_1/sketch.ino.bin b/commands/testdata/upload/build_path_1/sketch.ino.bin similarity index 100% rename from commands/upload/testdata/build_path_1/sketch.ino.bin rename to commands/testdata/upload/build_path_1/sketch.ino.bin diff --git a/commands/upload/testdata/build_path_2/Blink.ino.bin b/commands/testdata/upload/build_path_2/Blink.ino.bin similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.bin rename to commands/testdata/upload/build_path_2/Blink.ino.bin diff --git a/commands/upload/testdata/build_path_2/Blink.ino.elf b/commands/testdata/upload/build_path_2/Blink.ino.elf similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.elf rename to commands/testdata/upload/build_path_2/Blink.ino.elf diff --git a/commands/upload/testdata/build_path_2/Blink.ino.hex b/commands/testdata/upload/build_path_2/Blink.ino.hex similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.hex rename to commands/testdata/upload/build_path_2/Blink.ino.hex diff --git a/commands/upload/testdata/build_path_2/Blink.ino.map b/commands/testdata/upload/build_path_2/Blink.ino.map similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.map rename to commands/testdata/upload/build_path_2/Blink.ino.map diff --git a/commands/upload/testdata/build_path_2/Blink.ino.with_bootloader.bin b/commands/testdata/upload/build_path_2/Blink.ino.with_bootloader.bin similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.with_bootloader.bin rename to commands/testdata/upload/build_path_2/Blink.ino.with_bootloader.bin diff --git a/commands/upload/testdata/build_path_2/Blink.ino.with_bootloader.hex b/commands/testdata/upload/build_path_2/Blink.ino.with_bootloader.hex similarity index 100% rename from commands/upload/testdata/build_path_2/Blink.ino.with_bootloader.hex rename to commands/testdata/upload/build_path_2/Blink.ino.with_bootloader.hex diff --git a/commands/upload/testdata/build_path_3/AnotherSketch.ino.bin b/commands/testdata/upload/build_path_3/AnotherSketch.ino.bin similarity index 100% rename from commands/upload/testdata/build_path_3/AnotherSketch.ino.bin rename to commands/testdata/upload/build_path_3/AnotherSketch.ino.bin diff --git a/commands/upload/testdata/build_path_3/Blink.ino.bin b/commands/testdata/upload/build_path_3/Blink.ino.bin similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.bin rename to commands/testdata/upload/build_path_3/Blink.ino.bin diff --git a/commands/upload/testdata/build_path_3/Blink.ino.elf b/commands/testdata/upload/build_path_3/Blink.ino.elf similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.elf rename to commands/testdata/upload/build_path_3/Blink.ino.elf diff --git a/commands/upload/testdata/build_path_3/Blink.ino.hex b/commands/testdata/upload/build_path_3/Blink.ino.hex similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.hex rename to commands/testdata/upload/build_path_3/Blink.ino.hex diff --git a/commands/upload/testdata/build_path_3/Blink.ino.map b/commands/testdata/upload/build_path_3/Blink.ino.map similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.map rename to commands/testdata/upload/build_path_3/Blink.ino.map diff --git a/commands/upload/testdata/build_path_3/Blink.ino.with_bootloader.bin b/commands/testdata/upload/build_path_3/Blink.ino.with_bootloader.bin similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.with_bootloader.bin rename to commands/testdata/upload/build_path_3/Blink.ino.with_bootloader.bin diff --git a/commands/upload/testdata/build_path_3/Blink.ino.with_bootloader.hex b/commands/testdata/upload/build_path_3/Blink.ino.with_bootloader.hex similarity index 100% rename from commands/upload/testdata/build_path_3/Blink.ino.with_bootloader.hex rename to commands/testdata/upload/build_path_3/Blink.ino.with_bootloader.hex diff --git a/commands/upload/testdata/build_path_4/some_other_files.txt b/commands/testdata/upload/build_path_4/some_other_files.txt similarity index 100% rename from commands/upload/testdata/build_path_4/some_other_files.txt rename to commands/testdata/upload/build_path_4/some_other_files.txt diff --git a/commands/upload/testdata/firmware/another_firmware.ino.bin b/commands/testdata/upload/firmware/another_firmware.ino.bin similarity index 100% rename from commands/upload/testdata/firmware/another_firmware.ino.bin rename to commands/testdata/upload/firmware/another_firmware.ino.bin diff --git a/commands/upload/testdata/firmware/firmware.ino.bin b/commands/testdata/upload/firmware/firmware.ino.bin similarity index 100% rename from commands/upload/testdata/firmware/firmware.ino.bin rename to commands/testdata/upload/firmware/firmware.ino.bin diff --git a/commands/upload/testdata/hardware/alice/avr/boards.txt b/commands/testdata/upload/hardware/alice/avr/boards.txt similarity index 100% rename from commands/upload/testdata/hardware/alice/avr/boards.txt rename to commands/testdata/upload/hardware/alice/avr/boards.txt diff --git a/commands/upload/testdata/hardware/alice/avr/platform.txt b/commands/testdata/upload/hardware/alice/avr/platform.txt similarity index 100% rename from commands/upload/testdata/hardware/alice/avr/platform.txt rename to commands/testdata/upload/hardware/alice/avr/platform.txt diff --git a/commands/upload/testdata/hardware/alice/avr/programmers.txt b/commands/testdata/upload/hardware/alice/avr/programmers.txt similarity index 100% rename from commands/upload/testdata/hardware/alice/avr/programmers.txt rename to commands/testdata/upload/hardware/alice/avr/programmers.txt diff --git a/commands/upload/burnbootloader.go b/commands/upload/burnbootloader.go deleted file mode 100644 index ad98c84d7af..00000000000 --- a/commands/upload/burnbootloader.go +++ /dev/null @@ -1,62 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package upload - -import ( - "context" - "io" - - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/internal/instances" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/sirupsen/logrus" -) - -// BurnBootloader FIXMEDOC -func BurnBootloader(ctx context.Context, req *rpc.BurnBootloaderRequest, outStream io.Writer, errStream io.Writer) (*rpc.BurnBootloaderResponse, error) { - logrus. - WithField("fqbn", req.GetFqbn()). - WithField("port", req.GetPort()). - WithField("programmer", req.GetProgrammer()). - Trace("BurnBootloader started", req.GetFqbn()) - - pme, release := instances.GetPackageManagerExplorer(req.GetInstance()) - if pme == nil { - return nil, &arduino.InvalidInstanceError{} - } - defer release() - - _, err := runProgramAction( - pme, - nil, // sketch - "", // importFile - "", // importDir - req.GetFqbn(), - req.GetPort(), - req.GetProgrammer(), - req.GetVerbose(), - req.GetVerify(), - true, // burnBootloader - outStream, - errStream, - req.GetDryRun(), - map[string]string{}, // User fields - ) - if err != nil { - return nil, err - } - return &rpc.BurnBootloaderResponse{}, nil -} diff --git a/commands/core.go b/commands/utility_core.go similarity index 56% rename from commands/core.go rename to commands/utility_core.go index f75fbce04f4..32f32709d46 100644 --- a/commands/core.go +++ b/commands/utility_core.go @@ -16,14 +16,27 @@ package commands import ( - "github.com/arduino/arduino-cli/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) -// PlatformReleaseToRPC converts our internal structure to the RPC structure. +// platformToRPCPlatformMetadata converts our internal structure to the RPC structure. +func platformToRPCPlatformMetadata(platform *cores.Platform) *rpc.PlatformMetadata { + return &rpc.PlatformMetadata{ + Id: platform.String(), + Maintainer: platform.Package.Maintainer, + Website: platform.Package.WebsiteURL, + Email: platform.Package.Email, + ManuallyInstalled: platform.ManuallyInstalled, + Deprecated: platform.Deprecated, + Indexed: platform.Indexed, + } +} + +// platformReleaseToRPC converts our internal structure to the RPC structure. // Note: this function does not touch the "Installed" field of rpc.Platform as it's not always clear that the // platformRelease we're currently converting is actually installed. -func PlatformReleaseToRPC(platformRelease *cores.PlatformRelease) *rpc.Platform { +func platformReleaseToRPC(platformRelease *cores.PlatformRelease) *rpc.PlatformRelease { // If the boards are not installed yet, the `platformRelease.Boards` will be a zero length slice. // In such case, we have to use the `platformRelease.BoardsManifest` instead. // So that we can retrieve the name of the boards at least. @@ -50,21 +63,17 @@ func PlatformReleaseToRPC(platformRelease *cores.PlatformRelease) *rpc.Platform } } - result := &rpc.Platform{ - Id: platformRelease.Platform.String(), - Name: platformRelease.Platform.Name, - Maintainer: platformRelease.Platform.Package.Maintainer, - Website: platformRelease.Platform.Package.WebsiteURL, - Email: platformRelease.Platform.Package.Email, - Help: &rpc.HelpResources{Online: platformRelease.Platform.Package.Help.Online}, - Boards: boards, - Latest: platformRelease.Version.String(), - ManuallyInstalled: platformRelease.Platform.ManuallyInstalled, - Deprecated: platformRelease.Platform.Deprecated, - Type: []string{platformRelease.Platform.Category}, - Indexed: platformRelease.Platform.Indexed, - MissingMetadata: !platformRelease.HasMetadata(), + // This field make sense only if the platformRelease is installed otherwise is an "undefined behaviour" + missingMetadata := platformRelease.IsInstalled() && !platformRelease.HasMetadata() + return &rpc.PlatformRelease{ + Name: platformRelease.Name, + Help: &rpc.HelpResources{Online: platformRelease.Platform.Package.Help.Online}, + Boards: boards, + Version: platformRelease.Version.String(), + Installed: platformRelease.IsInstalled(), + MissingMetadata: missingMetadata, + Types: []string{platformRelease.Category}, + Deprecated: platformRelease.Deprecated, + Compatible: platformRelease.IsCompatible(), } - - return result } diff --git a/commands/utility_grpc_streaming.go b/commands/utility_grpc_streaming.go new file mode 100644 index 00000000000..927e5e40f2d --- /dev/null +++ b/commands/utility_grpc_streaming.go @@ -0,0 +1,120 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "context" + "errors" + "sync" + + "google.golang.org/grpc/metadata" +) + +type streamingResponseProxyToChan[T any] struct { + ctx context.Context + respChan chan<- *T + respLock sync.Mutex +} + +func streamResponseToChan[T any](ctx context.Context) (*streamingResponseProxyToChan[T], <-chan *T) { + respChan := make(chan *T, 1) + w := &streamingResponseProxyToChan[T]{ + ctx: ctx, + respChan: respChan, + } + go func() { + <-ctx.Done() + w.respLock.Lock() + close(w.respChan) + w.respChan = nil + w.respLock.Unlock() + }() + return w, respChan +} + +func (w *streamingResponseProxyToChan[T]) Send(resp *T) error { + w.respLock.Lock() + if w.respChan != nil { + w.respChan <- resp + } + w.respLock.Unlock() + return nil +} + +func (w *streamingResponseProxyToChan[T]) Context() context.Context { + return w.ctx +} + +func (w *streamingResponseProxyToChan[T]) RecvMsg(m any) error { + return errors.New("RecvMsg not implemented") +} + +func (w *streamingResponseProxyToChan[T]) SendHeader(metadata.MD) error { + return errors.New("SendHeader not implemented") +} + +func (w *streamingResponseProxyToChan[T]) SendMsg(m any) error { + return errors.New("SendMsg not implemented") +} + +func (w *streamingResponseProxyToChan[T]) SetHeader(metadata.MD) error { + return errors.New("SetHeader not implemented") +} + +func (w *streamingResponseProxyToChan[T]) SetTrailer(tr metadata.MD) { +} + +// streamingResponseProxyToCallback is a streaming response proxy that +// forwards the responses to a callback function +type streamingResponseProxyToCallback[T any] struct { + ctx context.Context + cb func(*T) error +} + +// creates a streaming response proxy that forwards the responses to a callback function +func streamResponseToCallback[T any](ctx context.Context, cb func(*T) error) *streamingResponseProxyToCallback[T] { + if cb == nil { + cb = func(*T) error { return nil } + } + return &streamingResponseProxyToCallback[T]{ctx: ctx, cb: cb} +} + +func (w *streamingResponseProxyToCallback[T]) Send(resp *T) error { + return w.cb(resp) +} + +func (w *streamingResponseProxyToCallback[T]) Context() context.Context { + return w.ctx +} + +func (w *streamingResponseProxyToCallback[T]) RecvMsg(m any) error { + return errors.New("RecvMsg not implemented") +} + +func (w *streamingResponseProxyToCallback[T]) SendHeader(metadata.MD) error { + return errors.New("SendHeader not implemented") +} + +func (w *streamingResponseProxyToCallback[T]) SendMsg(m any) error { + return errors.New("SendMsg not implemented") +} + +func (w *streamingResponseProxyToCallback[T]) SetHeader(metadata.MD) error { + return errors.New("SetHeader not implemented") +} + +func (w *streamingResponseProxyToCallback[T]) SetTrailer(tr metadata.MD) { +} diff --git a/commands/utility_libraries_index_search_matcher.go b/commands/utility_libraries_index_search_matcher.go new file mode 100644 index 00000000000..f8ed7205c9d --- /dev/null +++ b/commands/utility_libraries_index_search_matcher.go @@ -0,0 +1,135 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package commands + +import ( + "strings" + + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex" + "github.com/arduino/arduino-cli/internal/arduino/utils" +) + +// matcherTokensFromQueryString parses the query string into tokens of interest +// for the qualifier-value pattern matching. +func matcherTokensFromQueryString(query string) []string { + escaped := false + quoted := false + tokens := []string{} + sb := &strings.Builder{} + + for _, r := range query { + // Short circuit the loop on backslash so that all other paths can clear + // the escaped flag. + if !escaped && r == '\\' { + escaped = true + continue + } + + if r == '"' { + if !escaped { + quoted = !quoted + } else { + sb.WriteRune(r) + } + } else if !quoted && r == ' ' { + tokens = append(tokens, strings.ToLower(sb.String())) + sb.Reset() + } else { + sb.WriteRune(r) + } + escaped = false + } + if sb.Len() > 0 { + tokens = append(tokens, strings.ToLower(sb.String())) + } + + return tokens +} + +// defaulLibraryMatchExtractor returns a string describing the library that +// is used for the simple search. +func defaultLibraryMatchExtractor(lib *librariesindex.Library) string { + res := lib.Name + " " + + lib.Latest.Paragraph + " " + + lib.Latest.Sentence + " " + + lib.Latest.Author + " " + for _, include := range lib.Latest.ProvidesIncludes { + res += include + " " + } + return res +} + +var qualifiers map[string]func(lib *librariesindex.Library) string = map[string]func(lib *librariesindex.Library) string{ + "name": func(lib *librariesindex.Library) string { return lib.Name }, + "architectures": func(lib *librariesindex.Library) string { return strings.Join(lib.Latest.Architectures, " ") }, + "author": func(lib *librariesindex.Library) string { return lib.Latest.Author }, + "category": func(lib *librariesindex.Library) string { return lib.Latest.Category }, + "dependencies": func(lib *librariesindex.Library) string { + names := make([]string, len(lib.Latest.Dependencies)) + for i, dep := range lib.Latest.Dependencies { + names[i] = dep.GetName() + } + return strings.Join(names, " ") + }, + "license": func(lib *librariesindex.Library) string { return lib.Latest.License }, + "maintainer": func(lib *librariesindex.Library) string { return lib.Latest.Maintainer }, + "paragraph": func(lib *librariesindex.Library) string { return lib.Latest.Paragraph }, + "provides": func(lib *librariesindex.Library) string { return strings.Join(lib.Latest.ProvidesIncludes, " ") }, + "sentence": func(lib *librariesindex.Library) string { return lib.Latest.Sentence }, + "types": func(lib *librariesindex.Library) string { return strings.Join(lib.Latest.Types, " ") }, + "version": func(lib *librariesindex.Library) string { return lib.Latest.Version.String() }, + "website": func(lib *librariesindex.Library) string { return lib.Latest.Website }, +} + +// MatcherFromQueryString returns a closure that takes a library as a +// parameter and returns true if the library matches the query. +func MatcherFromQueryString(query string) func(*librariesindex.Library) bool { + // A qv-query is one using [:=] syntax. + qvQuery := strings.Contains(query, ":") || strings.Contains(query, "=") + + if !qvQuery { + queryTerms := utils.SearchTermsFromQueryString(query) + return func(lib *librariesindex.Library) bool { + return utils.Match(defaultLibraryMatchExtractor(lib), queryTerms) + } + } + + queryTerms := matcherTokensFromQueryString(query) + + return func(lib *librariesindex.Library) bool { + matched := true + for _, term := range queryTerms { + if sepIdx := strings.IndexAny(term, ":="); sepIdx != -1 { + qualifier, separator, target := term[:sepIdx], term[sepIdx], term[sepIdx+1:] + if extractor, ok := qualifiers[qualifier]; ok { + switch separator { + case ':': + matched = (matched && utils.Match(extractor(lib), []string{target})) + continue + case '=': + matched = (matched && strings.ToLower(extractor(lib)) == target) + continue + } + } + } + // We perform the usual match in the following cases: + // 1. Unknown qualifier names revert to basic search terms. + // 2. Terms that do not use qv-syntax. + matched = (matched && utils.Match(defaultLibraryMatchExtractor(lib), []string{term})) + } + return matched + } +} diff --git a/commands/version.go b/commands/utility_version.go similarity index 64% rename from commands/version.go rename to commands/utility_version.go index fe9d36ca727..a7232d6fdc4 100644 --- a/commands/version.go +++ b/commands/utility_version.go @@ -16,19 +16,20 @@ package commands import ( + "github.com/arduino/arduino-cli/commands/cmderrors" semver "go.bug.st/relaxed-semver" ) -// Versioned is an object that provides a GetVersion() method -type Versioned interface { - GetVersion() string -} - -// ParseVersion returns the version parsed from an interface that provides -// the GetVersion() method (interface Versioned) -func ParseVersion(req Versioned) (*semver.Version, error) { - if req.GetVersion() != "" { - return semver.Parse(req.GetVersion()) +// parseVersion returns the parsed version or nil if the version is +// the empty string. An error is returned if the version is not valid +// semver. +func parseVersion(version string) (*semver.Version, error) { + if version == "" { + return nil, nil + } + res, err := semver.Parse(version) + if err != nil { + return nil, &cmderrors.InvalidVersionError{Cause: err} } - return nil, nil + return res, nil } diff --git a/configuration/configuration.go b/configuration/configuration.go deleted file mode 100644 index 22a7d9049bc..00000000000 --- a/configuration/configuration.go +++ /dev/null @@ -1,148 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package configuration - -import ( - "os" - "path/filepath" - "runtime" - "strings" - - "github.com/arduino/arduino-cli/i18n" - "github.com/arduino/arduino-cli/internal/cli/feedback" - paths "github.com/arduino/go-paths-helper" - "github.com/arduino/go-win32-utils" - "github.com/spf13/cobra" - "github.com/spf13/viper" -) - -// Settings is a global instance of viper holding configurations for the CLI and the gRPC consumers -var Settings *viper.Viper - -var tr = i18n.Tr - -// Init initialize defaults and read the configuration file. -// Please note the logging system hasn't been configured yet, -// so logging shouldn't be used here. -func Init(configFile string) *viper.Viper { - // Create a new viper instance with default values for all the settings - settings := viper.New() - SetDefaults(settings) - - // Set config name and config path - if configFilePath := paths.New(configFile); configFilePath != nil { - settings.SetConfigName(strings.TrimSuffix(configFilePath.Base(), configFilePath.Ext())) - settings.AddConfigPath(configFilePath.Parent().String()) - } else { - configDir := settings.GetString("directories.Data") - // Get default data path if none was provided - if configDir == "" { - configDir = getDefaultArduinoDataDir() - } - - settings.SetConfigName("arduino-cli") - settings.AddConfigPath(configDir) - } - - // Attempt to read config file - if err := settings.ReadInConfig(); err != nil { - // ConfigFileNotFoundError is acceptable, anything else - // should be reported to the user - if _, ok := err.(viper.ConfigFileNotFoundError); !ok { - feedback.Warning(tr("Error reading config file: %v", err)) - } - } - - return settings -} - -// BindFlags creates all the flags binding between the cobra Command and the instance of viper -func BindFlags(cmd *cobra.Command, settings *viper.Viper) { - settings.BindPFlag("logging.level", cmd.Flag("log-level")) - settings.BindPFlag("logging.file", cmd.Flag("log-file")) - settings.BindPFlag("logging.format", cmd.Flag("log-format")) - settings.BindPFlag("board_manager.additional_urls", cmd.Flag("additional-urls")) - settings.BindPFlag("output.no_color", cmd.Flag("no-color")) -} - -// getDefaultArduinoDataDir returns the full path to the default arduino folder -func getDefaultArduinoDataDir() string { - userHomeDir, err := os.UserHomeDir() - if err != nil { - feedback.Warning(tr("Unable to get user home dir: %v", err)) - return "." - } - - switch runtime.GOOS { - case "linux": - return filepath.Join(userHomeDir, ".arduino15") - case "darwin": - return filepath.Join(userHomeDir, "Library", "Arduino15") - case "windows": - localAppDataPath, err := win32.GetLocalAppDataFolder() - if err != nil { - feedback.Warning(tr("Unable to get Local App Data Folder: %v", err)) - return "." - } - return filepath.Join(localAppDataPath, "Arduino15") - default: - return "." - } -} - -// getDefaultUserDir returns the full path to the default user folder -func getDefaultUserDir() string { - userHomeDir, err := os.UserHomeDir() - if err != nil { - feedback.Warning(tr("Unable to get user home dir: %v", err)) - return "." - } - - switch runtime.GOOS { - case "linux": - return filepath.Join(userHomeDir, "Arduino") - case "darwin": - return filepath.Join(userHomeDir, "Documents", "Arduino") - case "windows": - documentsPath, err := win32.GetDocumentsFolder() - if err != nil { - feedback.Warning(tr("Unable to get Documents Folder: %v", err)) - return "." - } - return filepath.Join(documentsPath, "Arduino") - default: - return "." - } -} - -// GetDefaultBuiltinLibrariesDir returns the full path to the default builtin libraries dir -func GetDefaultBuiltinLibrariesDir() string { - return filepath.Join(getDefaultArduinoDataDir(), "libraries") -} - -// FindConfigFileInArgs returns the config file path using the -// argument '--config-file' (if specified) or looking in the current working dir -func FindConfigFileInArgs(args []string) string { - // Look for '--config-file' argument - for i, arg := range args { - if arg == "--config-file" { - if len(args) > i+1 { - return args[i+1] - } - } - } - return "" -} diff --git a/configuration/configuration_test.go b/configuration/configuration_test.go deleted file mode 100644 index ce879e0c8d3..00000000000 --- a/configuration/configuration_test.go +++ /dev/null @@ -1,74 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package configuration - -import ( - "fmt" - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/require" -) - -func tmpDirOrDie() string { - dir, err := os.MkdirTemp(os.TempDir(), "cli_test") - if err != nil { - panic(fmt.Sprintf("error creating tmp dir: %v", err)) - } - // Symlinks are evaluated becase the temp folder on Mac OS is inside /var, it's not writable - // and is a symlink to /private/var, we want the full path so we do this - dir, err = filepath.EvalSymlinks(dir) - if err != nil { - panic(fmt.Sprintf("error evaluating tmp dir symlink: %v", err)) - } - return dir -} - -func TestInit(t *testing.T) { - tmp := tmpDirOrDie() - defer os.RemoveAll(tmp) - settings := Init(filepath.Join(tmp, "arduino-cli.yaml")) - require.NotNil(t, settings) - - require.Equal(t, "info", settings.GetString("logging.level")) - require.Equal(t, "text", settings.GetString("logging.format")) - - require.Empty(t, settings.GetStringSlice("board_manager.additional_urls")) - - require.NotEmpty(t, settings.GetString("directories.Data")) - require.NotEmpty(t, settings.GetString("directories.Downloads")) - require.NotEmpty(t, settings.GetString("directories.User")) - - require.Equal(t, "50051", settings.GetString("daemon.port")) - - require.Equal(t, true, settings.GetBool("metrics.enabled")) - require.Equal(t, ":9090", settings.GetString("metrics.addr")) -} - -func TestFindConfigFile(t *testing.T) { - configFile := FindConfigFileInArgs([]string{"--config-file"}) - require.Equal(t, "", configFile) - - configFile = FindConfigFileInArgs([]string{"--config-file", "some/path/to/config"}) - require.Equal(t, "some/path/to/config", configFile) - - configFile = FindConfigFileInArgs([]string{"--config-file", "some/path/to/config/arduino-cli.yaml"}) - require.Equal(t, "some/path/to/config/arduino-cli.yaml", configFile) - - configFile = FindConfigFileInArgs([]string{}) - require.Equal(t, "", configFile) -} diff --git a/configuration/defaults.go b/configuration/defaults.go deleted file mode 100644 index be1a0088a62..00000000000 --- a/configuration/defaults.go +++ /dev/null @@ -1,72 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package configuration - -import ( - "path/filepath" - "strings" - "time" - - "github.com/spf13/viper" -) - -// SetDefaults sets the default values for certain keys -func SetDefaults(settings *viper.Viper) { - // logging - settings.SetDefault("logging.level", "info") - settings.SetDefault("logging.format", "text") - - // Libraries - settings.SetDefault("library.enable_unsafe_install", false) - - // Boards Manager - settings.SetDefault("board_manager.additional_urls", []string{}) - - // arduino directories - settings.SetDefault("directories.Data", getDefaultArduinoDataDir()) - settings.SetDefault("directories.Downloads", filepath.Join(getDefaultArduinoDataDir(), "staging")) - settings.SetDefault("directories.User", getDefaultUserDir()) - - // Sketch compilation - settings.SetDefault("sketch.always_export_binaries", false) - settings.SetDefault("build_cache.ttl", time.Hour*24*30) - settings.SetDefault("build_cache.compilations_before_purge", 10) - - // daemon settings - settings.SetDefault("daemon.port", "50051") - - // metrics settings - settings.SetDefault("metrics.enabled", true) - settings.SetDefault("metrics.addr", ":9090") - - // output settings - settings.SetDefault("output.no_color", false) - - // updater settings - settings.SetDefault("updater.enable_notification", true) - - // Bind env vars - settings.SetEnvPrefix("ARDUINO") - settings.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) - settings.AutomaticEnv() - - // Bind env aliases to keep backward compatibility - settings.BindEnv("library.enable_unsafe_install", "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL") - settings.BindEnv("directories.User", "ARDUINO_SKETCHBOOK_DIR") - settings.BindEnv("directories.Downloads", "ARDUINO_DOWNLOADS_DIR") - settings.BindEnv("directories.Data", "ARDUINO_DATA_DIR") - settings.BindEnv("sketch.always_export_binaries", "ARDUINO_SKETCH_ALWAYS_EXPORT_BINARIES") -} diff --git a/configuration/network.go b/configuration/network.go deleted file mode 100644 index 793c67de155..00000000000 --- a/configuration/network.go +++ /dev/null @@ -1,67 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package configuration - -import ( - "fmt" - "net/url" - "os" - "runtime" - - "github.com/arduino/arduino-cli/version" - "github.com/spf13/viper" -) - -// UserAgent returns the user agent (mainly used by HTTP clients) -func UserAgent(settings *viper.Viper) string { - subComponent := "" - if settings != nil { - subComponent = settings.GetString("network.user_agent_ext") - } - if subComponent != "" { - subComponent = " " + subComponent - } - - extendedUA := os.Getenv("ARDUINO_CLI_USER_AGENT_EXTENSION") - if extendedUA != "" { - extendedUA = " " + extendedUA - } - - return fmt.Sprintf("%s/%s%s (%s; %s; %s) Commit:%s%s", - version.VersionInfo.Application, - version.VersionInfo.VersionString, - subComponent, - runtime.GOARCH, runtime.GOOS, runtime.Version(), - version.VersionInfo.Commit, - extendedUA) -} - -// NetworkProxy returns the proxy configuration (mainly used by HTTP clients) -func NetworkProxy(settings *viper.Viper) (*url.URL, error) { - if settings == nil || !settings.IsSet("network.proxy") { - return nil, nil - } - if proxyConfig := settings.GetString("network.proxy"); proxyConfig == "" { - // empty configuration - // this workaround must be here until viper can UnSet properties: - // https://github.com/spf13/viper/pull/519 - return nil, nil - } else if proxy, err := url.Parse(proxyConfig); err != nil { - return nil, fmt.Errorf(tr("Invalid network.proxy '%[1]s': %[2]s"), proxyConfig, err) - } else { - return proxy, nil - } -} diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index d21314c52c5..7f615230da6 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -8,9 +8,9 @@ There are several ways you can get involved: | ------------------------------------------------- | ------------------------------------------------------- | | - Support request
- Question
- Discussion | Post on the [Arduino Forum][forum] | | - Bug report
- Feature request | Issue report (read the [issue guidelines][issues]) | -| Beta testing | Try out the [nightly build][nightly] | +| Testing | Try out the [nightly build][nightly] | | - Bug fix
- Enhancement | Pull Request (read the [pull request guidelines][prs]) | -| Translations for Arduino CLI | [transifex][translate] | +| Translations for Arduino CLI | Use the [transifex][translate] platform | | Monetary | - [Donate][donate]
- [Buy official products][store] | ## Issue Reports @@ -79,13 +79,7 @@ If you want to run integration tests you will also need: If you're working on the gRPC interface you will also have to: -- download and install the [protoc][6] compiler (use the version required to match the generated code, please note that - the latest releases does not follow semantic versioning anymore so, for example, the version 4.24.3 must be searched - as 24.3 dropping the major number) -- install `protoc-gen-go` using: `go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31.0` (use the version - required to match the generated code) -- install `protoc-gen-go-grpc` using: `go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0` (use the version - required to match the generated code) +- download and install [buf][6] our tool to compile and generate proto files ### Building the source code @@ -309,7 +303,7 @@ package main import ( "fmt" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" ) func main() { @@ -337,7 +331,7 @@ If your PR doesn't need to be included in the changelog, please start the commit [1]: https://go.dev/doc/install [2]: https://taskfile.dev/#/installation [3]: https://www.python.org/downloads/ -[6]: https://github.com/protocolbuffers/protobuf/releases +[6]: https://buf.build/docs/installation/ [7]: https://pages.github.com/ [9]: https://www.mkdocs.org/ [11]: https://github.com/arduino/arduino-cli/blob/master/.github/workflows/deploy-cobra-mkdocs-versioned-poetry.yml diff --git a/docs/FAQ.md b/docs/FAQ.md index a58c40098d5..ebd50812830 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -9,7 +9,12 @@ When you run [`arduino-cli board list`][arduino cli board list], your board does ## What's the FQBN string? -For a deeper understanding of how FQBN works, you should understand the [Arduino platform specification][0]. +FQBN stands for Fully Qualified Board Name. It has the following format: +`VENDOR:ARCHITECTURE:BOARD_ID[:MENU_ID=OPTION_ID[,MENU2_ID=OPTION_ID ...]]`, with each `MENU_ID=OPTION_ID` being an +optional key-value pair configuration. Each field accepts letters (`A-Z` or `a-z`), numbers (`0-9`), underscores (`_`), +dashes(`-`) and dots(`.`). The special character `=` is accepted in the configuration value. The `VENDOR` and +`ARCHITECTURE` parts can be empty. For a deeper understanding of how FQBN works, you should understand the [Arduino +platform specification][0]. ## How to set multiple board options? @@ -22,8 +27,8 @@ Additional board options have to be separated by commas (instead of colon): The serial monitor is available through the [monitor command][monitor command]. By the way, the functionality provided by this command is very limited and you may want to look for other tools if you need more advanced functionality. -There are many excellent serial terminals to chose from. On Linux or macOS, you may already have [screen][screen] -installed. On Windows, a good choice for command line usage is Plink, included with [PuTTY][putty]. +There are many excellent serial terminals to chose from. On Linux or macOS, you may already have `screen` installed. On +Windows, a good choice for command line usage is Plink, included with [PuTTY][putty]. ## How to change monitor configuration? @@ -36,6 +41,18 @@ when using a serial port, the monitor baud rate can be set to 4800 with the foll `$ arduino-cli monitor -p --config baudrate=4800` +## "Permission denied" error in sketch upload + +This problem might happen on some Linux systems, and can be solved by setting up serial port permissions. First, search +for the port your board is connected to, with the command: + +`$ arduino-cli board list` + +Then add your user to the group with the following command, replacing `` with your username and `` with +your group name. Logging out and in again is necessary for the changes to take effect. + +`$ sudo usermod -a -G ` + ## Additional assistance If your question wasn't answered, feel free to ask on [Arduino CLI's forum board][1]. @@ -43,7 +60,6 @@ If your question wasn't answered, feel free to ask on [Arduino CLI's forum board [arduino cli board list]: commands/arduino-cli_board_list.md [0]: platform-specification.md [1]: https://forum.arduino.cc/c/software/arduino-cli/89 -[screen]: https://www.gnu.org/software/screen/manual/screen.html [putty]: https://www.chiark.greenend.org.uk/~sgtatham/putty/ [monitor command]: commands/arduino-cli_monitor.md [configuration parameters]: pluggable-monitor-specification.md#describe-command diff --git a/docs/UPGRADING.md b/docs/UPGRADING.md index 537373e6d45..d83701331e6 100644 --- a/docs/UPGRADING.md +++ b/docs/UPGRADING.md @@ -1,8 +1,908 @@ # Upgrading -Here you can find a list of migration guides to handle breaking changes between releases of the CLI. +Here you can find a list of migration guides to handle breaking changes, deprecations, and bugfixes that may cause +problems between releases of the CLI. -## v0.35.0 +## 1.0.4 + +### The build cache path specified with `compile --build-cache-path` or `build_cache.path` now affects also sketches. + +Previously the specified build cache path only affected cores and it was ignored for sketches. This is now fixed and +both cores and sketches are cached in the given directory. + +### A full build of the sketch is performed if a build path is specified in `compile --build-path ...`. + +Previously if a build path was specified a cached core could have been used from the global build cache path resulting +in a partial build inside the given build path. + +Now if a build path is specified, the global build cache path is ignored and the full build is done in the given build +path. + +#### `compile --build-cache-path` is deprecated. + +The change above, makes the `compile --build-cache-path` flag useless. It is kept just for backward compatibility. + +### The default `build_cache.path` has been moved from the temp folder to the user's cache folder. + +Previously the `build_cache.path` was in `$TMP/arduino`. Now it has been moved to the specific OS user's cache folder, +for example in Linux it happens to be `$HOME/.cache/arduino`. + +## 1.0.0 + +### `compile --build-cache-path` slightly changed directory format + +Now compiled cores are cached under the `cores` subdir of the path specified in `--build-cache-path`, previously it was +saved under the `core` subdir. The new behaviour is coherent with the default cache directory `/tmp/arduino/cores/...` +when the cache directory is not set by the user. + +### Configuration file now supports only YAML format. + +The Arduino CLI configuration file now supports only the YAML format. + +### gRPC Setting API important changes + +The Settings API has been heavily refactored. Here a quick recap of the new methods: + +- `SettingsGetValue` returns the value of a setting given the key. The returned value is a string encoded in JSON, or + YAML + + ```proto + message SettingsGetValueRequest { + // The key to get + string key = 1; + // The format of the encoded_value (default is + // "json", allowed values are "json" and "yaml) + string value_format = 2; + } + + message SettingsGetValueResponse { + // The value of the key (encoded) + string encoded_value = 1; + } + ``` + +- `SettingsSetValue` change the value of a setting. The value may be specified in JSON, YAML, or as a command-line + argument. If `encoded_value` is an empty string the setting is deleted. + + ```proto + message SettingsSetValueRequest { + // The key to change + string key = 1; + // The new value (encoded), no objects, + // only scalar, or array of scalars are + // allowed. + string encoded_value = 2; + // The format of the encoded_value (default is + // "json", allowed values are "json", "yaml", + // and "cli") + string value_format = 3; + } + ``` + +- `SettingsEnumerate` returns all the available keys and their type (`string`, `int`, `[]string`...) +- `ConfigurationOpen` replaces the current configuration with the one passed as argument. Differently from + `SettingsSetValue`, this call replaces the whole configuration. +- `ConfigurationSave` outputs the current configuration in the specified format. The configuration is not saved in a + file, this call returns just the content, it's a duty of the caller to store the content in a file. +- `ConfigurationGet` return the current configuration in a structured gRPC message `Configuration`. + +The previous gRPC Setting rpc call may be replaced as follows: + +- The old `SettingsMerge` rpc call can now be done trough `SettingsSetValue`. +- The old `SettingsDelete` rpc call can now be done trough `SettingsSetValue` passing the `key` to delete with an empty + `value`. +- The old `SettingsGetAll` rpc call has been replaced by `ConfigurationGet` that returns a structured message + `Configuration` with all the settings populated. +- The old `SettingsWrite` rpc call has been removed. It is partially replaced by `ConfigurationSave` but the actual file + save must be performed by the caller. + +### golang: importing `arduino-cli` as a library now requires the creation of a gRPC service. + +Previously the methods implementing the Arduino business logic were available in the global namespace +`github.com/arduino/arduino-cli/commands/*` and could be called directly. + +The above is no more true. All the global `commands.*` functions have been converted to methods of the +`arduinoCoreServerImpl` struct that implements the gRPC `ArduinoCoreServer` interface. The configuration is now part of +the server internal state. Developers may create a "daemon-less" server by calling the `commands.NewArduinoCoreServer()` +function and can use the returned object to call all the needed gRPC functions. + +The methods of the `ArduinoCoreServer` are generated through the gRPC protobuf definitions, some of those methods are +gRPC "streaming" methods and requires a streaming object to be passed as argument, we provided helper methods to create +these objects. + +For example if previously we could call `commands.Init` like this: + +```go +// old Init signature +func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) error { ... } + +// ... + +// Initialize instance +if err := commands.Init(&rpc.InitRequest{Instance: req.GetInstance()}, respCB); err != nil { + return err +} +``` + +now the `responseCallback` must be wrapped into an `rpc.ArduinoCoreService_InitServer`, and we provided a method exactly +for that: + +```go +// new Init method +func (s *arduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCoreService_InitServer) error { ... } + +/// ... + +// Initialize instance +initStream := InitStreamResponseToCallbackFunction(ctx, respCB) +if err := srv.Init(&rpc.InitRequest{Instance: req.GetInstance()}, initStream); err != nil { + return err +} +``` + +Each gRPC method has an helper method to obtain the corresponding `ArduinoCoreService_*Server` parameter. Here a simple, +but complete, example: + +```go +package main + +import ( + "context" + "fmt" + "io" + "log" + + "github.com/arduino/arduino-cli/commands" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" +) + +func main() { + // Create a new ArduinoCoreServer + srv := commands.NewArduinoCoreServer() + + // Disable logging + logrus.SetOutput(io.Discard) + + // Create a new instance in the server + ctx := context.Background() + resp, err := srv.Create(ctx, &rpc.CreateRequest{}) + if err != nil { + log.Fatal("Error creating instance:", err) + } + instance := resp.GetInstance() + + // Defer the destruction of the instance + defer func() { + if _, err := srv.Destroy(ctx, &rpc.DestroyRequest{Instance: instance}); err != nil { + log.Fatal("Error destroying instance:", err) + } + fmt.Println("Instance successfully destroyed") + }() + + // Initialize the instance + initStream := commands.InitStreamResponseToCallbackFunction(ctx, func(r *rpc.InitResponse) error { + fmt.Println("INIT> ", r) + return nil + }) + if err := srv.Init(&rpc.InitRequest{Instance: instance}, initStream); err != nil { + log.Fatal("Error during initialization:", err) + } + + // Search for platforms and output the result + searchResp, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{Instance: instance}) + if err != nil { + log.Fatal("Error searching for platforms:", err) + } + for _, platformSummary := range searchResp.GetSearchOutput() { + installed := platformSummary.GetInstalledRelease() + meta := platformSummary.GetMetadata() + fmt.Printf("%30s %8s %s\n", meta.GetId(), installed.GetVersion(), installed.GetName()) + } +} +``` + +### YAML output format is no more supported + +The `yaml` option of the `--format` flag is no more supported. Use `--format json` if machine parsable output is needed. + +### gRPC: The `type` field has been renamed to `types` in the `cc.arduino.cli.commands.v1.PlatformRelease` message. + +Rebuilding the gRPC bindings from the proto files requires to rename all access to `type` field as `types`. + +By the way, the wire protocol is not affected by this change, existing clients should work fine without modification. + +### The `type` field has been renamed to `types` in the JSON output including a platform release. + +Since the `type` field may contain multiple values has been renamed to `types` to better express this aspect. + +Previously: + +``` +$ arduino-cli core list --json | jq '.platforms[4].releases."1.8.13"' +{ + "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards", + "version": "1.8.13", + "type": [ + "Arduino" + ], + ... +``` + +Now: + +``` +$ arduino-cli core list --json | jq '.platforms[4].releases."1.8.13"' +{ + "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards", + "version": "1.8.13", + "types": [ + "Arduino" + ], + ... +``` + +### The gRPC `cc.arduino.cli.commands.v1.CompileRequest.export_binaries` changed type. + +Previously the field `export_binaries` was a `google.protobuf.BoolValue`. We used this type because it expresses this +field's optional nature (that is, it could be `true`, `false`, and `null` if not set). + +Now the field is an `optional bool`, since the latest protobuf protocol changes now allows optional fields. + +### Some gRPC responses messages now uses the `oneof` clause. + +The following responses message: + +- `cc.arduino.cli.commands.v1.PlatformInstallResponse` +- `cc.arduino.cli.commands.v1.PlatformDownloadResponse` +- `cc.arduino.cli.commands.v1.PlatformUninstallResponse` +- `cc.arduino.cli.commands.v1.PlatformUpgradeResponse` +- `cc.arduino.cli.commands.v1.DebugResponse` +- `cc.arduino.cli.commands.v1.LibraryDownloadResponse` +- `cc.arduino.cli.commands.v1.LibraryInstallResponse` +- `cc.arduino.cli.commands.v1.LibraryUpgradeResponse` +- `cc.arduino.cli.commands.v1.LibraryUninstallResponse` +- `cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse` +- `cc.arduino.cli.commands.v1.ZipLibraryInstallResponse` +- `cc.arduino.cli.commands.v1.GitLibraryInstallResponse` +- `cc.arduino.cli.commands.v1.MonitorResponse` + +now use the `oneof` clause to make the stream nature of the message more explicit. Just to give an example, the +`PlatformInstallResponse` message has been changed from: + +```proto +message PlatformInstallResponse { + // Progress of the downloads of the platform and tool files. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; +} +``` + +to: + +```proto +message PlatformInstallResponse { + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the downloads of the platform and tool files. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; + // The installation result. + Result result = 3; + } +} +``` + +The other messages have been changed in a similar way. + +### The gRPC `cc.arduino.cli.commands.v1.UpdateIndexResponse` and `UpdateLibrariesIndexResponse` have changed. + +The responses coming from the update index commands: + +```proto +message UpdateIndexResponse { + // Progress of the package index download. + DownloadProgress download_progress = 1; +} + +message UpdateLibrariesIndexResponse { + // Progress of the libraries index download. + DownloadProgress download_progress = 1; +} +``` + +are now more explicit and contains details about the result of the operation: + +```proto +message UpdateIndexResponse { + message Result { + // The result of the packages index update. + repeated IndexUpdateReport updated_indexes = 1; + } + oneof message { + // Progress of the package index download. + DownloadProgress download_progress = 1; + // The result of the index update. + Result result = 2; + } +} + +message UpdateLibrariesIndexResponse { + message Result { + // The result of the libraries index update. + IndexUpdateReport libraries_index = 1; + } + oneof message { + // Progress of the libraries index download. + DownloadProgress download_progress = 1; + // The result of the index update. + Result result = 2; + } +} +``` + +The `IndexUpdateReport` message contains details for each index update operation performed: + +```proto +message IndexUpdateReport { + enum Status { + // The status of the index update is unspecified. + STATUS_UNSPECIFIED = 0; + // The index has been successfully updated. + STATUS_UPDATED = 1; + // The index was already up to date. + STATUS_ALREADY_UP_TO_DATE = 2; + // The index update failed. + STATUS_FAILED = 3; + // The index update was skipped. + STATUS_SKIPPED = 4; + } + + // The URL of the index that was updated. + string index_url = 1; + // The result of the index update. + Status status = 2; +} +``` + +### The gRPC `cc.arduino.cli.commands.v1.Profile` message has been removed in favor of `SketchProfile` + +The message `Profile` has been replaced with `SketchProfile` in the `InitResponse.profile` field: + +```proto +message InitResponse { + oneof message { + Progress init_progress = 1; + google.rpc.Status error = 2; + // Selected profile information + SketchProfile profile = 3; + } +} +``` + +### The gRPC `cc.arduino.cli.commands.v1.LoadSketchResponse` message has been changed. + +Previously the `LoadSketchResponse` containted all the information about the sketch: + +```proto +message LoadSketchResponse { + string main_file = 1; + string location_path = 2; + repeated string other_sketch_files = 3; + repeated string additional_files = 4; + repeated string root_folder_files = 5; + string default_fqbn = 6; + string default_port = 7; + string default_protocol = 8; + repeated SketchProfile profiles = 9; + SketchProfile default_profile = 10; +} +``` + +Now all the metadata have been moved into a specific `Sketch` message: + +```proto +message LoadSketchResponse { + Sketch sketch = 1; +} + +message Sketch { + string main_file = 1; + string location_path = 2; + repeated string other_sketch_files = 3; + repeated string additional_files = 4; + repeated string root_folder_files = 5; + string default_fqbn = 6; + string default_port = 7; + string default_protocol = 8; + repeated SketchProfile profiles = 9; + SketchProfile default_profile = 10; +} +``` + +### Drop support for `builtin.tools` + +We're dropping the `builtin.tools` support. It was the equivalent of Arduino IDE 1.x bundled tools directory. + +### The gRPC `cc.arduino.cli.commands.v1.MonitorRequest` message has been changed. + +Previously the `MonitorRequest` was a single message used to open the monitor, to stream data, and to change the port +configuration: + +```proto +message MonitorRequest { + // Arduino Core Service instance from the `Init` response. + Instance instance = 1; + // Port to open, must be filled only on the first request + Port port = 2; + // The board FQBN we are trying to connect to. This is optional, and it's + // needed to disambiguate if more than one platform provides the pluggable + // monitor for a given port protocol. + string fqbn = 3; + // Data to send to the port + bytes tx_data = 4; + // Port configuration, optional, contains settings of the port to be applied + MonitorPortConfiguration port_configuration = 5; +} +``` + +Now the meaning of the fields has been clarified with the `oneof` clause, making it more explicit: + +```proto +message MonitorRequest { + oneof message { + // Open request, it must be the first incoming message + MonitorPortOpenRequest open_request = 1; + // Data to send to the port + bytes tx_data = 2; + // Port configuration, contains settings of the port to be changed + MonitorPortConfiguration updated_configuration = 3; + // Close message, set to true to gracefully close a port (this ensure + // that the gRPC streaming call is closed by the daemon AFTER the port + // has been successfully closed) + bool close = 4; + } +} + +message MonitorPortOpenRequest { + // Arduino Core Service instance from the `Init` response. + Instance instance = 1; + // Port to open, must be filled only on the first request + Port port = 2; + // The board FQBN we are trying to connect to. This is optional, and it's + // needed to disambiguate if more than one platform provides the pluggable + // monitor for a given port protocol. + string fqbn = 3; + // Port configuration, optional, contains settings of the port to be applied + MonitorPortConfiguration port_configuration = 4; +} +``` + +Now the message field `MonitorPortOpenRequest.open_request` must be sent in the first message after opening the +streaming gRPC call. + +The identification number of the fields has been changed, this change is not binary compatible with old clients. + +### Some golang modules from `github.com/arduino/arduino-cli/*` have been made private. + +The following golang modules are no longer available as public API: + +- `github.com/arduino/arduino-cli/arduino` +- `github.com/arduino/arduino-cli/buildcache` +- `github.com/arduino/arduino-cli/client_example` +- `github.com/arduino/arduino-cli/configuration` +- `github.com/arduino/arduino-cli/docsgen` +- `github.com/arduino/arduino-cli/executils` +- `github.com/arduino/arduino-cli/i18n` +- `github.com/arduino/arduino-cli/table` + +Most of the `executils` library has been integrated inside the `go-paths` library `github.com/arduino/go-paths-helper`. +The other packages are not intended for usage outside the Arduino CLI, we will keep them internal to allow future +breaking changes as needed. + +### CLI changed JSON output for some `lib`, `core`, `config`, `board`, and `sketch` commands. + +- `arduino-cli lib list --format json` results are now wrapped under `installed_libraries` key + + ``` + { "installed_libraries": [ {...}, {...} ] } + ``` + +- `arduino-cli lib examples --format json` results are now wrapped under `examples` key + + ``` + { "examples": [ {...}, {...} ] } + ``` + +- `arduino-cli core search --format json` and `arduino-cli core list --format json` results are now wrapped under + `platforms` key + + ``` + { "platforms": [ {...}, {...} ] } + ``` + +- `arduino-cli config init --format json` now correctly returns a json object containg the config path + + ``` + { "config_path": "/home/user/.arduino15/arduino-cli.yaml" } + ``` + +- `arduino-cli config dump --format json` results are now wrapped under `config` key + + ``` + { "config": { ... } } + ``` + +- `arduino-cli board search --format json` results are now wrapped under `boards` key + + ``` + { "boards": [ {...}, {...} ] } + ``` + +- `arduino-cli board list --format json` results are now wrapped under `detected_ports` key + + ``` + { "detected_ports": [ {...}, {...} ] } + ``` + +- `arduino-cli sketch new` now correctly returns a json object containing the sketch path + + ``` + { "sketch_path": "/tmp/my_sketch" } + ``` + +### `config dump` no longer returns default configuration values + +Previously, the `config dump` CLI command returned the effective configuration, including both the values explicitly set +via the configuration file and environment variables as well as the values provided by defaults. + +It now only returns the explicitly set configuration data. + +Use `config get ` to get the effective value of the configuration + +### The gRPC response `cc.arduino.cli.commands.v1.CompileResponse` has been changed. + +The `CompilerResponse` message has been refactored to made explicit which fields are intended for streaming the build +process and which fields are part of the build result. + +The old `CompilerResponse`: + +```protoc +message CompileResponse { + // The output of the compilation process (stream) + bytes out_stream = 1; + // The error output of the compilation process (stream) + bytes err_stream = 2; + // The compiler build path + string build_path = 3; + // The libraries used in the build + repeated Library used_libraries = 4; + // The size of the executable split by sections + repeated ExecutableSectionSize executable_sections_size = 5; + // The platform where the board is defined + InstalledPlatformReference board_platform = 6; + // The platform used for the build (if referenced from the board platform) + InstalledPlatformReference build_platform = 7; + // Completions reports of the compilation process (stream) + TaskProgress progress = 8; + // Build properties used for compiling + repeated string build_properties = 9; + // Compiler errors and warnings + repeated CompileDiagnostic diagnostics = 10; +} +``` + +has been split into a `CompilerResponse` and a `BuilderResult`: + +```protoc +message CompileResponse { + oneof message { + // The output of the compilation process (stream) + bytes out_stream = 1; + // The error output of the compilation process (stream) + bytes err_stream = 2; + // Completions reports of the compilation process (stream) + TaskProgress progress = 3; + // The compilation result + BuilderResult result = 4; + } +} + +message BuilderResult { + // The compiler build path + string build_path = 1; + // The libraries used in the build + repeated Library used_libraries = 2; + // The size of the executable split by sections + repeated ExecutableSectionSize executable_sections_size = 3; + // The platform where the board is defined + InstalledPlatformReference board_platform = 4; + // The platform used for the build (if referenced from the board platform) + InstalledPlatformReference build_platform = 5; + // Build properties used for compiling + repeated string build_properties = 7; + // Compiler errors and warnings + repeated CompileDiagnostic diagnostics = 8; +} +``` + +with a clear distinction on which fields are streamed. + +### The gRPC response `cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse` and `cc.arduino.cli.commands.v1.BurnBootloaderResponse` has been changed. + +The old messages: + +```protoc +message UploadUsingProgrammerResponse { + // The output of the upload process. + bytes out_stream = 1; + // The error output of the upload process. + bytes err_stream = 2; +} + +message BurnBootloaderResponse { + // The output of the burn bootloader process. + bytes out_stream = 1; + // The error output of the burn bootloader process. + bytes err_stream = 2; +} +``` + +now have the `oneof` clause that makes explicit the streaming nature of the response: + +```protoc +message UploadUsingProgrammerResponse { + oneof message { + // The output of the upload process. + bytes out_stream = 1; + // The error output of the upload process. + bytes err_stream = 2; + } +} + +message BurnBootloaderResponse { + oneof message { + // The output of the burn bootloader process. + bytes out_stream = 1; + // The error output of the burn bootloader process. + bytes err_stream = 2; + } +} +``` + +### The gRPC `cc.arduino.cli.commands.v1.PlatformRelease` has been changed. + +We've added a new field called `compatible`. This field indicates if the current platform release is installable or not. +It may happen that a platform doesn't have a dependency available for an OS/ARCH, in such cases, if we try to install +the platform it will fail. The new field can be used to know upfront if a specific release is installable. + +### The gRPC `cc.arduino.cli.commands.v1.PlatformSummary` has been changed. + +We've modified the behavior of `latest_version`. Now this field indicates the latest version that can be installed in +the current OS/ARCH. + +### `core list` now returns only the latest version that can be installed. + +Previously, we showed the latest version without checking if all the dependencies were available in the current OS/ARCH. +Now, the latest version will always point to an installable one even if a newer incompatible one is present. + +### `core search` now returns the latest installable version of a core. + +We now show in the `version` column the latest installable version. If none are available then we show a `n/a` label. +The corresponding command with `--format json` now returns the same output of +`arduino-cli core search --all --format json`. + +### `core upgrade` and `core install` will install the latest compatible version. + +Previously, we'd have tried the installation/upgrade of a core even if all the required tools weren't available in the +current OS/ARCH. Now we check this upfront, and allowing the installation of incompatible versions only if a user +explicitly provides it like: `core install arduino:renesas_uno@1.0.2` + +### gRPC service `cc.arduino.cli.settings.v1` has been removed, and all RPC calls have been migrated to `cc.arduino.cli.commands.v1` + +The service `cc.arduino.cli.settings.v1` no longer exists and all existing RPC calls have been moved to the +`cc.arduino.cli.commands.v1` service adding a `Settings` prefix to the names of all messages. The existing RPC calls: + +- `rpc GetAll(GetAllRequest) returns (GetAllResponse)` +- `rpc Merge(MergeRequest) returns (MergeResponse)` +- `rpc GetValue(GetValueRequest) returns (GetValueResponse)` +- `rpc SetValue(SetValueRequest) returns (SetValueResponse)` +- `rpc Write(WriteRequest) returns (WriteResponse)` +- `rpc Delete(DeleteRequest) returns (DeleteResponse)` + +are now renamed to: + +- `rpc SettingsGetAll(SettingsGetAllRequest) returns (SettingsGetAllResponse)` +- `rpc SettingsMerge(SettingsMergeRequest) returns (SettingsMergeResponse)` +- `rpc SettingsGetValue(SettingsGetValueRequest) returns (SettingsGetValueResponse)` +- `rpc SettingsSetValue(SettingsSetValueRequest) returns (SettingsSetValueResponse)` +- `rpc SettingsWrite(SettingsWriteRequest) returns (SettingsWriteResponse)` +- `rpc SettingsDelete(SettingsDeleteRequest) returns (SettingsDeleteResponse)` + +### gRPC `cc.arduino.cli.commands.v1.LibrarySearchRequest` message has been changed. + +The `query` field has been removed, use `search_args` instead. + +### CLI `core list` and `core search` changed JSON output. + +Below is an example of the response containing an object with all possible keys set. + +```json +[ + { + "id": "arduino:avr", + "maintainer": "Arduino", + "website": "http://www.arduino.cc/", + "email": "packages@arduino.cc", + "indexed": true, + "manually_installed": true, + "deprecated": true, + "releases": { + "1.6.2": { + "name": "Arduino AVR Boards", + "version": "1.6.2", + "type": [ + "Arduino" + ], + "installed": true, + "boards": [ + { + "name": "Arduino Robot Motor" + } + ], + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "missing_metadata": true, + "deprecated": true + }, + "1.8.3": { ... } + }, + "installed_version": "1.6.2", + "latest_version": "1.8.3" + } +] +``` + +### gRPC `cc.arduino.cli.commands.v1.PlatformSearchResponse` message has been changed. + +The old behavior was a bit misleading to the client because, to list all the available versions for each platform, we +used to use the `latest` as it was describing the current platform version. We introduced a new message: +`PlatformSummary`, with the intent to make the response more straightforward and less error-prone. + +```protobuf +message PlatformSearchResponse { + // Results of the search. + repeated PlatformSummary search_output = 1; +} + +// PlatformSummary is a structure containing all the information about +// a platform and all its available releases. +message PlatformSummary { + // Generic information about a platform + PlatformMetadata metadata = 1; + // Maps version to the corresponding PlatformRelease + map releases = 2; + // The installed version of the platform, or empty string if none installed + string installed_version = 3; + // The latest available version of the platform, or empty if none available + string latest_version = 4; +} +``` + +The new response contains an array of `PlatformSummary`. `PlatformSummary` contains all the information about a platform +and all its available releases. Releases contain all the PlatformReleases of a specific platform, and the key is the +semver string of a specific version. We've added the `installed_version` and `latest_version` to make more convenient +the access of such values in the map. A few notes about the behavior of the `releases` map: + +- It can be empty if no releases are found +- It can contain a single-release +- It can contain multiple releases +- If in the request we provide the `manually_installed=true`, the key of such release is an empty string. + +### Removed gRPC API: `cc.arduino.cli.commands.v1.PlatformList`, `PlatformListRequest`, and `PlatformListResponse`. + +The following gRPC API have been removed: + +- `cc.arduino.cli.commands.v1.PlatformList`: you can use the already available gRPC method `PlatformSearch` to perform + the same task. Setting the `all_versions=true` and `manually_installed=true` in the `PlatformSearchRequest` returns + all the data needed to produce the same result of the old api. +- `cc.arduino.cli.commands.v1.PlatformListRequest`. +- `cc.arduino.cli.commands.v1.PlatformListResponse`. + +### gRPC `cc.arduino.cli.commands.v1.Platform` message has been changed. + +The old `Platform` and other information such as name, website, and email... contained details about the currently +installed version and the latest available. We noticed an ambiguous use of the `latest` field, especially when such a +message came in the `PlatformSearchResponse` response. In that use case, the latest field contained the specific version +of a particular platform: this is a hack because the value doesn't always reflect the meaning of that property. Another +inconsistent case occurs when a platform maintainer changes the name of a particular release. We always pick the value +from the latest release, but this might not be what we want to do all the time. We concluded that the design of that +message isn't something to be considered future-proof proof, so we decided to modify it as follows: + +```protobuf +// Platform is a structure containing all the information about a single +// platform release. +message Platform { + // Generic information about a platform + PlatformMetadata metadata = 1; + // Information about a specific release of a platform + PlatformRelease release = 2; +} + +// PlatformMetadata contains generic information about a platform (not +// correlated to a specific release). +message PlatformMetadata { + // Platform ID (e.g., `arduino:avr`). + string id = 1; + // Maintainer of the platform's package. + string maintainer = 2; + // A URL provided by the author of the platform's package, intended to point + // to their website. + string website = 3; + // Email of the maintainer of the platform's package. + string email = 4; + // If true this Platform has been installed manually in the user' sketchbook + // hardware folder + bool manually_installed = 5; + // True if the latest release of this Platform has been deprecated + bool deprecated = 6; + // If true the platform is indexed + bool indexed = 7; +} + +// PlatformRelease contains information about a specific release of a platform. +message PlatformRelease { + // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). + string name = 1; + // Version of the platform release + string version = 5; + // Type of the platform. + repeated string type = 6; + // True if the platform is installed + bool installed = 7; + // List of boards provided by the platform. If the platform is installed, + // this is the boards listed in the platform's boards.txt. If the platform is + // not installed, this is an arbitrary list of board names provided by the + // platform author for display and may not match boards.txt. + repeated Board boards = 8; + // A URL provided by the author of the platform's package, intended to point + // to their online help service. + HelpResources help = 9; + // This field is true if the platform is missing installation metadata (this + // happens if the platform has been installed with the legacy Arduino IDE + // <=1.8.x). If the platform miss metadata and it's not indexed through a + // package index, it may fail to work correctly in some circumstances, and it + // may need to be reinstalled. This should be evaluated only when the + // PlatformRelease is `Installed` otherwise is an undefined behaviour. + bool missing_metadata = 10; + // True this release is deprecated + bool deprecated = 11; +} +``` + +To address all the inconsistencies/inaccuracies we introduced two messages: + +- `PlatformMetadata` contains generic information about a platform (not correlated to a specific release). +- `PlatformRelease` contains information about a specific release of a platform. + +### `debugging_supported` field has been removed from gRPC `cc.arduino.cli.commands.v1.BoardDetails` and `board details` command in CLI + +The `debugging_supported` field has been removed, since the possibility to debug is determined by: + +- the board selected +- the board option selected +- the programmer selected + +the `board details` command has no sufficient information to determine it. If you need to determine if a specific +selection of board + option + programmer supports debugging, use the gRPC call +`cc.arduino.cli.commands.v1.GetDebugConfig`: if the call is successful, it means that the debugging is supported. + +## 0.35.0 ### CLI `debug --info` changed JSON output. @@ -13,7 +913,7 @@ The string field `server_configuration.script` is now an array and has been rena "executable": "/tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/Blink.ino.elf", "toolchain": "gcc", "toolchain_path": "/home/user/.arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4/bin/", - "toolchain_prefix": "arm-none-eabi-", + "toolchain_prefix": "arm-none-eabi", "server": "openocd", "server_path": "/home/user/.arduino15/packages/arduino/tools/openocd/0.10.0-arduino7/bin/openocd", "server_configuration": { @@ -1091,7 +1991,7 @@ https://arduino.github.io/arduino-cli/dev/rpc/commands/#monitorresponse https://arduino.github.io/arduino-cli/dev/rpc/commands/#enumeratemonitorportsettingsrequest https://arduino.github.io/arduino-cli/dev/rpc/commands/#enumeratemonitorportsettingsresponse -https://github.com/arduino/arduino-cli/blob/master/commands/daemon/term_example/main.go +https://github.com/arduino/arduino-cli/blob/752709af9bf1bf8f6c1e6f689b1e8b86cc4e884e/commands/daemon/term_example/main.go ## 0.23.0 @@ -2245,13 +3145,15 @@ Now: debug.executable={build.path}/{build.project_name}.elf debug.toolchain=gcc debug.toolchain.path={runtime.tools.arm-none-eabi-gcc-7-2017q4.path}/bin/ -debug.toolchain.prefix=arm-none-eabi- +debug.toolchain.prefix=arm-none-eabi debug.server=openocd debug.server.openocd.path={runtime.tools.openocd-0.10.0-arduino7.path}/bin/ debug.server.openocd.scripts_dir={runtime.tools.openocd-0.10.0-arduino7.path}/share/openocd/scripts/ debug.server.openocd.script={runtime.platform.path}/variants/{build.variant}/{build.openocdscript} ``` +The `debug.executable` key must be present and non-empty for debugging to be supported. + The `debug.server.XXXX` subkeys are optional and also "free text", this means that the configuration may be extended as needed by the specific server. For now only `openocd` is supported. Anyway, if this change works, any other kind of server may be fairly easily added. diff --git a/docs/configuration.md b/docs/configuration.md index 334dac750a4..df78cfabfa0 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -2,18 +2,19 @@ - `board_manager` - `additional_urls` - the URLs to any additional Boards Manager package index files needed for your boards platforms. + - `enable_unsafe_install` - set to `true` to allow installation of packages that do not pass the checksum test. This + is considered an unsafe installation method and should be used only for development purposes. - `daemon` - options related to running Arduino CLI as a [gRPC] server. - `port` - TCP port used for gRPC client connections. - `directories` - directories used by Arduino CLI. - `data` - directory used to store Boards/Library Manager index files and Boards Manager platform installations. - `downloads` - directory used to stage downloaded archives during Boards/Library Manager installations. - `user` - the equivalent of the Arduino IDE's ["sketchbook" directory][sketchbook directory]. Library Manager - installations are made to the `libraries` subdirectory of the user directory. + installations are made to the `libraries` subdirectory of the user directory. Users can manually install 3rd party + platforms in the `hardware` subdirectory of the user directory. - `builtin.libraries` - the libraries in this directory will be available to all platforms without the need for the user to install them, but with the lowest priority over other installed libraries with the same name, it's the equivalent of the Arduino IDE's bundled libraries directory. - - `builtin.tools` - it's a list of directories of tools that will be available to all platforms without the need for - the user to install them, it's the equivalent of the Arduino IDE 1.x bundled tools directory. - `library` - configuration options relating to Arduino libraries. - `enable_unsafe_install` - set to `true` to enable the use of the `--git-url` and `--zip-file` flags with [`arduino-cli lib install`][arduino cli lib install]. These are considered "unsafe" installation methods because @@ -37,11 +38,39 @@ - `updater` - configuration options related to Arduino CLI updates - `enable_notification` - set to `false` to disable notifications of new Arduino CLI releases, defaults to `true` - `build_cache` configuration options related to the compilation cache + - `path` - the path to the build cache, default is `$TMP/arduino`. + - `extra_paths` - a list of paths to look for precompiled artifacts if not found on `build_cache.path` setting. - `compilations_before_purge` - interval, in number of compilations, at which the cache is purged, defaults to `10`. When `0` the cache is never purged. - `ttl` - cache expiration time of build folders. If the cache is hit by a compilation the corresponding build files lifetime is renewed. The value format must be a valid input for [time.ParseDuration()](https://pkg.go.dev/time#ParseDuration), defaults to `720h` (30 days). +- `network` - configuration options related to the network connection. + - `proxy` - URL of the proxy server. + - `connection_timeout` - network connection timeout, the value format must be a valid input for + [time.ParseDuration()](https://pkg.go.dev/time#ParseDuration), defaults to `60s` (60 seconds). `0` means it will + wait indefinitely. + - `cloud_api.skip_board_detection_calls` - if set to `true` it will make the Arduino CLI skip network calls to Arduino + Cloud API to help detection of an unknown board. + +### Default directories + +The following are the default directories selected by the Arduino CLI if alternatives are not specified in the +configuration file. + +- The `directories.data` default is OS-dependent: + + - on Linux (and other Unix-based OS) is: `{HOME}/.arduino15` + - on Windows is: `{HOME}/AppData/Local/Arduino15` + - on MacOS is: `{HOME}/Library/Arduino15` + +- The `directories.downloads` default is `{directories.data}/staging`. If the value of `{directories.data}` is changed + in the configuration the user-specified value will be used. + +- The `directories.user` default is OS-dependent: + - on Linux (and other Unix-based OS) is: `{HOME}/Arduino` + - on Windows is: `{DOCUMENTS}/Arduino` + - on MacOS is: `{HOME}/Documents/Arduino` ## Configuration methods @@ -97,8 +126,7 @@ $ export ARDUINO_BOARD_MANAGER_ADDITIONAL_URLS="https://downloads.arduino.cc/pac ### Configuration file -[`arduino-cli config init`][arduino-cli config init] creates or updates a configuration file with the current -configuration settings. +[`arduino-cli config init`][arduino-cli config init] creates a new empty configuration file. This allows saving the options set by command line flags or environment variables. For example: @@ -106,28 +134,14 @@ This allows saving the options set by command line flags or environment variable arduino-cli config init --additional-urls https://downloads.arduino.cc/packages/package_staging_index.json ``` -#### File name - -The configuration file must be named `arduino-cli`, with the appropriate file extension for the file's format. - -#### Supported formats - -`arduino-cli config init` creates a YAML file, however a variety of common formats are supported: - -- [JSON] -- [TOML] -- [YAML] -- [Java properties file] -- [HCL] -- envfile -- [INI] - #### Locations -Configuration files in the following locations are recognized by Arduino CLI: +The default configuration file is named `arduino-cli.yaml`. The configuration file is searched in the following +locations, in order of priority: 1. Location specified by the [`--config-file`][arduino cli command reference] command line flag -1. Arduino CLI data directory (as configured by `directories.data`) +1. Location specified by the `ARDUINO_CONFIG_FILE` environment variable +1. Location specified by the `ARDUINO_DIRECTORIES_DATA` environment variable If multiple configuration files are present, the one highest on the above list is used. Configuration files are not combined. diff --git a/docs/getting-started.md b/docs/getting-started.md index 19628282f91..f0e1f97b4bc 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,5 +1,4 @@ -Despite the lack of feature parity at the moment, Arduino CLI provides many of the features you can find in the Arduino -IDE. Let's see some examples. +Arduino CLI provides all the features you can find in the Arduino IDE. Let's see some examples. ## Before you start @@ -8,34 +7,35 @@ IDE. Let's see some examples. ```console $ arduino-cli help core -Arduino Core operations. +Arduino core operations. Usage: - arduino-cli core [command] + arduino-cli core [command] Examples: - ./arduino-cli core update-index + arduino-cli core update-index Available Commands: - download Downloads one or more cores and corresponding tool dependencies. - install Installs one or more cores and corresponding tool dependencies. - list Shows the list of installed platforms. - search Search for a core in Boards Manager. - uninstall Uninstalls one or more cores and corresponding tool dependencies if no more used. - update-index Updates the index of cores. - upgrade Upgrades one or all installed platforms to the latest version. + download Downloads one or more cores and corresponding tool dependencies. + install Installs one or more cores and corresponding tool dependencies. + list Shows the list of installed platforms. + search Search for a core in Boards Manager. + uninstall Uninstalls one or more cores and corresponding tool dependencies if no longer used. + update-index Updates the index of cores. + upgrade Upgrades one or all installed platforms to the latest version. Flags: - -h, --help help for core + -h, --help help for core Global Flags: - --additional-urls strings Additional URLs for Boards Manager. - --config-file string The custom config file (if not specified the default will be used). - --format string The output format, can be [text|json]. (default "text") - --log-file string Path to the file where logs will be written. - --log-format string The output format for the logs, can be [text|json]. - --log-level string Messages with this level and above will be logged. - -v, --verbose Print the logs on the standard output. + --additional-urls strings Comma-separated list of additional URLs for the Boards Manager. + --config-file string The custom config file (if not specified the default will be used). + --json Print the output in JSON format. + --log Print the logs on the standard output. + --log-file string Path to the file where logs will be written. + --log-format string The output format for the logs, can be: text, json + --log-level string Messages with this level and above will be logged. Valid levels are: trace, debug, info, warn, error, fatal, panic + --no-color Disable colored output. Use "arduino-cli core [command] --help" for more information about a command. ``` @@ -349,6 +349,6 @@ metrics: ``` [configuration documentation]: configuration.md -[client_example]: https://github.com/arduino/arduino-cli/blob/master/client_example +[client_example]: https://github.com/arduino/arduino-cli/blob/master/rpc/internal/client_example [grpc reference]: rpc/commands.md [prometheus]: https://prometheus.io/ diff --git a/docs/img/CLI_Go_library_interface_screenshot.png b/docs/img/CLI_Go_library_interface_screenshot.png deleted file mode 100644 index 6fc6787a888..00000000000 Binary files a/docs/img/CLI_Go_library_interface_screenshot.png and /dev/null differ diff --git a/docs/img/CLI_JSON_output_screenshot.png b/docs/img/CLI_JSON_output_screenshot.png deleted file mode 100644 index b1e3952b78b..00000000000 Binary files a/docs/img/CLI_JSON_output_screenshot.png and /dev/null differ diff --git a/docs/img/CLI_configuration_methods_screenshot.png b/docs/img/CLI_configuration_methods_screenshot.png deleted file mode 100644 index 6836d27aecc..00000000000 Binary files a/docs/img/CLI_configuration_methods_screenshot.png and /dev/null differ diff --git a/docs/img/CLI_gRPC_interface_screenshot.png b/docs/img/CLI_gRPC_interface_screenshot.png deleted file mode 100644 index 91250f0c13f..00000000000 Binary files a/docs/img/CLI_gRPC_interface_screenshot.png and /dev/null differ diff --git a/docs/index.md b/docs/index.md index 1e85317f7a6..2819e36b837 100644 --- a/docs/index.md +++ b/docs/index.md @@ -19,5 +19,5 @@ services and messages are detailed in the [gRPC reference] pages. [installation]: installation.md [getting started guide]: getting-started.md -[client_example]: https://github.com/arduino/arduino-cli/blob/master/client_example +[client_example]: https://github.com/arduino/arduino-cli/blob/master/rpc/internal/client_example [grpc reference]: rpc/commands.md diff --git a/docs/installation.md b/docs/installation.md index b5499ee6ce9..06cc18a9102 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -79,10 +79,6 @@ in your [`PATH`](https://en.wikipedia.org/wiki/PATH%5F%28variable%29) or add the [macos64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_macOS_64bit.tar.gz [macosarm64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_macOS_ARM64.tar.gz -> **Deprecation notice**: links in the form -> `http://downloads.arduino.cc/arduino-cli/arduino-cli-latest-.tar.bz2` won’t be further updated. That URL -> will provide the version `0.3.7-alpha.preview`, regardless of further releases. - ### Previous versions These are available from the "Assets" sections on the [releases page](https://github.com/arduino/arduino-cli/releases). diff --git a/docs/integration-options.md b/docs/integration-options.md index 90b9b849159..fe476365407 100644 --- a/docs/integration-options.md +++ b/docs/integration-options.md @@ -14,9 +14,51 @@ how we designed the software so that it can be effectively leveraged under diffe As you might expect, the first way to use the Arduino CLI is from a terminal and by a human, and user experience plays a key role here. The UX is under a continuous improvement process as we want the tool to be powerful without being too complicated. We heavily rely on sub-commands to provide a rich set of different operations logically grouped together, -so that users can easily explore the interface while getting very specific contextual help. +so that users can easily explore the interface while getting very specific contextual help (even in Chinese!). -![contextual help screenshot][] +``` +$ LANG=zh arduino-cli +Arduino 命令行界面 (arduino-cli) + +用法: + arduino-cli [command] + +示例: + arduino-cli <命令> [参数...] + +可用命令: + board Arduino 开发板命令 + burn-bootloader 上传引导加载程序。 + cache Arduino 缓存命令。 + compile 编译 Arduino 项目 + completion 已生成脚本 + config Arduino 配置命令。 + core Arduino 内核操作。 + daemon 在端口上作为守护进程运行:50051 + debug 调试 Arduino 项目 + help Help about any command + lib Arduino 关于库的命令。 + monitor 开启开发板的通信端口。 + outdated 列出可以升级的内核和库 + sketch Arduino CLI 项目命令 + update 更新内核和库的索引 + upgrade 升级已安装的内核和库。 + upload 上传 Arduino 项目。 + version 显示 Arduino CLI 的版本号。 + +参数: + --additional-urls strings 以逗号分隔的开发板管理器附加地址列表。 + --config-file string 自定义配置文件(如果未指定,将使用默认值)。 + --format string 日志的输出格​​式,可以是:text, json, jsonmini, yaml (default "text") + -h, --help help for arduino-cli + --log 在标准输出上打印日志。 + --log-file string 写入日志的文件的路径。 + --log-format string 日志的输出格​​式,可以是:text, json + --log-level string 记录此级别及以上的消息。有效级别为 trace, debug, info, warn, error, fatal, panic + --no-color Disable colored output. + +使用 "arduino-cli [command] --help" 获取有关命令的更多信息。 +``` ### Console applications for robots @@ -26,18 +68,68 @@ system. There are some niceties to observe when you write software that’s supp one in particular is the ability to run without a configuration file. This is possible because every configuration option you find in the arduino-cli.yaml configuration file can be provided either through a command line flag or by setting an environment variable. To give an example, the following commands are all equivalent and will fetch the -package index used to work with unstable experimental versions of Arduino's cores: +external package index for ESP32 platforms: + +``` +$ cat ~/.arduino15/arduino-cli.yaml +board_manager: + additional_urls: + - https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json + +$ arduino-cli core update-index +Downloading index: package_index.tar.bz2 downloaded +Downloading index: package_esp32_index.json downloaded +``` -![configuration methods screenshot][] +or: + +``` +$ export ARDUINO_BOARD_MANAGER_ADDITIONAL_URLS="https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json" +$ arduino-cli core update-index +Downloading index: package_index.tar.bz2 downloaded +Downloading index: package_esp32_index.json downloaded +``` + +or: + +``` +$ arduino-cli core update-index --additional-urls="https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json" +Downloading index: package_index.tar.bz2 downloaded +Downloading index: package_esp32_index.json downloaded +``` See the [configuration documentation] for details about Arduino CLI's configuration system. Consistent with the previous paragraph, when it comes to providing output the Arduino CLI aims to be user friendly but also slightly verbose, something that doesn’t play well with robots. This is why we added an option to provide output -that’s easy to parse. For example, the following figure shows what getting the software version in [JSON] format looks -like. +that’s easy to parse. For example, the following figure shows what getting the result in [JSON] format and filtering +using the `jq` tools may look like: -![JSON output screenshot][] +``` +$ arduino-cli lib search FlashStorage --format json | jq .libraries[0].latest +{ + "author": "Various", + "version": "1.0.0", + "maintainer": "Arduino ", + "sentence": "The FlashStorage library aims to provide a convenient way to store and retrieve user's data using the non-volatile flash memory of microcontrollers.", + "paragraph": "Useful if the EEPROM is not available or too small. Currently, ATSAMD21 and ATSAMD51 cpu are supported (and consequently every board based on this cpu like the Arduino Zero or Aduino MKR1000).", + "website": "https://github.com/cmaglie/FlashStorage", + "category": "Data Storage", + "architectures": [ + "samd" + ], + "types": [ + "Contributed" + ], + "resources": { + "url": "https://downloads.arduino.cc/libraries/github.com/cmaglie/FlashStorage-1.0.0.zip", + "archive_filename": "FlashStorage-1.0.0.zip", + "checksum": "SHA-256:2f5a349e1c5dc4ec7f7e22268c0f998af3f471b98ed873abd6e671ac67940e39", + "size": 12265, + "cache_path": "libraries" + } +} +``` Even if not related to software design, one last feature that’s worth mentioning is the availability of a one-line [installation script] that can be used to make the latest version of the Arduino CLI available on most systems with an @@ -53,7 +145,54 @@ of features of the command line interface and waiting for clients to connect and following is some [Golang] code capable of retrieving the version number of a remote running Arduino CLI server instance: -![gRPC interface screenshot][] +```go +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "context" + "log" + "time" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +func main() { + // Establish a connection with the gRPC server + conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + log.Println(err) + log.Fatal("error connecting to arduino-cli rpc server, you can start it by running `arduino-cli daemon`") + } + defer conn.Close() + + // Create an instance of the gRPC clients. + cli := rpc.NewArduinoCoreServiceClient(conn) + + // Now we can call various methods of the API... + versionResp, err := cli.Version(context.Background(), &rpc.VersionRequest{}) + if err != nil { + log.Fatalf("Error getting version: %s", err) + } + log.Printf("arduino-cli version: %v", versionResp.GetVersion()) +} +``` gRPC is language agnostic: even if the example is written in Golang, the programming language used for the client can be Python, JavaScript or any of the many [supported ones][grpc supported languages], leading to a variety of possible @@ -68,13 +207,86 @@ For more information on Arduino CLI's gRPC interface, see the [gRPC interface re Arduino CLI is written in [Golang] and the code is organized in a way that makes it easy to use it as a library by including the modules you need in another Golang application at compile time. Both the first and second pillars rely on -a common Golang API, a set of functions that abstract all the functionalities offered by the Arduino CLI, so that when -we provide a fix or a new feature, they are automatically available to both the command line and gRPC interfaces. The -source modules implementing this API can be imported in other Golang programs to embed a full-fledged Arduino CLI. For -example, this is how some backend services powering [Arduino Cloud] can compile sketches and manage libraries. Just to -give you a taste of what it means to embed the Arduino CLI, here is how to search for a core using the API: +a common Golang API, based on the gRPC protobuf definitions: a set of functions that abstract all the functionalities +offered by the Arduino CLI, so that when we provide a fix or a new feature, they are automatically available to both the +command line and gRPC interfaces. The source modules implementing this API are implemented through the `commands` +package, and it can be imported in other Golang programs to embed a full-fledged Arduino CLI. For example, this is how +some backend services powering [Arduino Cloud] can compile sketches and manage libraries. Just to give you a taste of +what it means to embed the Arduino CLI, here is how to search for a core using the API: + +```go +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "context" + "fmt" + "io" + "log" + + "github.com/arduino/arduino-cli/commands" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" +) + +func main() { + // Create a new ArduinoCoreServer + srv := commands.NewArduinoCoreServer() + + // Disable logging + logrus.SetOutput(io.Discard) + + // Create a new instance in the server + ctx := context.Background() + resp, err := srv.Create(ctx, &rpc.CreateRequest{}) + if err != nil { + log.Fatal("Error creating instance:", err) + } + instance := resp.GetInstance() + + // Defer the destruction of the instance + defer func() { + if _, err := srv.Destroy(ctx, &rpc.DestroyRequest{Instance: instance}); err != nil { + log.Fatal("Error destroying instance:", err) + } + fmt.Println("Instance successfully destroyed") + }() + + // Initialize the instance + initStream := commands.InitStreamResponseToCallbackFunction(ctx, func(r *rpc.InitResponse) error { + fmt.Println("INIT> ", r) + return nil + }) + if err := srv.Init(&rpc.InitRequest{Instance: instance}, initStream); err != nil { + log.Fatal("Error during initialization:", err) + } -![Go library interface screenshot][] + // Search for platforms and output the result + searchResp, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{Instance: instance}) + if err != nil { + log.Fatal("Error searching for platforms:", err) + } + for _, platformSummary := range searchResp.GetSearchOutput() { + installed := platformSummary.GetInstalledRelease() + meta := platformSummary.GetMetadata() + fmt.Printf("%30s %8s %s\n", meta.GetId(), installed.GetVersion(), installed.GetName()) + } +} +``` Embedding the Arduino CLI is limited to Golang applications and requires a deep knowledge of its internals. For the average use case, the gRPC interface might be a better alternative. Nevertheless, this remains a valid option that we @@ -102,11 +314,7 @@ tracker] if you’ve got a use case that doesn’t fit one of the three pillars. [grpc interface reference]: rpc/commands.md [grpc supported languages]: https://grpc.io/docs/languages/ [arduino cli repository]: https://github.com/arduino/arduino-cli -[grpc client example]: https://github.com/arduino/arduino-cli/blob/master/client_example +[grpc client example]: https://github.com/arduino/arduino-cli/blob/master/rpc/internal/client_example [commands package]: https://github.com/arduino/arduino-cli/tree/master/commands [issue tracker]: https://github.com/arduino/arduino-cli/issues [contextual help screenshot]: img/CLI_contextual_help_screenshot.png -[configuration methods screenshot]: img/CLI_configuration_methods_screenshot.png -[json output screenshot]: img/CLI_JSON_output_screenshot.png -[grpc interface screenshot]: img/CLI_gRPC_interface_screenshot.png -[go library interface screenshot]: img/CLI_Go_library_interface_screenshot.png diff --git a/docs/library-specification.md b/docs/library-specification.md index a5fa721e57d..34168156e89 100644 --- a/docs/library-specification.md +++ b/docs/library-specification.md @@ -9,9 +9,8 @@ This new library format is intended to be used in tandem with **Library Manager* The Library Manager allows users to automatically download and install libraries needed in their projects, with an easy to use graphical interface in the [Arduino IDE](https://docs.arduino.cc/software/ide-v1/tutorials/installing-libraries#using-the-library-manager)/[Arduino IDE 2.0](https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-installing-a-library#installing-a-library) -and -[Arduino Web Editor](https://create.arduino.cc/projecthub/Arduino_Genuino/getting-started-with-arduino-web-editor-on-various-platforms-4b3e4a#toc-libraries-and-the-arduino-web-editor-11) -as well as [`arduino-cli lib`](commands/arduino-cli_lib.md). +and [Arduino Cloud Editor](https://docs.arduino.cc/arduino-cloud/guides/editor/#library-manager) as well as +[`arduino-cli lib`](commands/arduino-cli_lib.md). More information about how Library Manager works is available [here](https://github.com/arduino/library-registry/blob/main/FAQ.md#readme). diff --git a/docs/package_index_json-specification.md b/docs/package_index_json-specification.md index ef8bbdaa3f3..2752ef732ea 100644 --- a/docs/package_index_json-specification.md +++ b/docs/package_index_json-specification.md @@ -170,20 +170,21 @@ Each tool version may come in different build flavours for different OS. Each fl array. The IDE will take care to install the right flavour for the user's OS by matching the `host` value with the following table or fail if a needed flavour is missing. -| OS flavour | `host` regexp value | `host` suggested value | -| ------------ | ------------------------------------- | ---------------------------------- | -| Linux 32 | `i[3456]86-.*linux-gnu` | `i686-linux-gnu` | -| Linux 64 | `x86_64-.*linux-gnu` | `x86_64-linux-gnu` | -| Linux Arm | `arm.*-linux-gnueabihf` | `arm-linux-gnueabihf` | -| Linux Arm64 | `(aarch64\|arm64)-linux-gnu` | `aarch64-linux-gnu` | -| Windows 32 | `i[3456]86-.*(mingw32\|cygwin)` | `i686-mingw32` or `i686-cygwin` | -| Windows 64 | `(amd64\|x86_64)-.*(mingw32\|cygwin)` | `x86_64-migw32` or `x86_64-cygwin` | -| MacOSX 32 | `i[3456]86-apple-darwin.*` | `i686-apple-darwin` | -| MacOSX 64 | `x86_64-apple-darwin.*` | `x86_64-apple-darwin` | -| MacOSX Arm64 | `arm64-apple-darwin.*` | `arm64-apple-darwin` | -| FreeBSD 32 | `i?[3456]86-freebsd[0-9]*` | `i686-freebsd` | -| FreeBSD 64 | `amd64-freebsd[0-9]*` | `amd64-freebsd` | -| FreeBSD Arm | `arm.*-freebsd[0-9]*` | `arm-freebsd` | +| OS flavour | `host` regexp | suggested `host` value | +| --------------- | ------------------------------------- | ----------------------------------- | +| Linux 32 | `i[3456]86-.*linux-gnu` | `i686-linux-gnu` | +| Linux 64 | `x86_64-.*linux-gnu` | `x86_64-linux-gnu` | +| Linux Arm | `arm.*-linux-gnueabihf` | `arm-linux-gnueabihf` | +| Linux Arm64 | `(aarch64\|arm64)-linux-gnu` | `aarch64-linux-gnu` | +| Linux RISC-V 64 | `riscv64-linux-gnu` | `riscv64-linux-gnu` | +| Windows 32 | `i[3456]86-.*(mingw32\|cygwin)` | `i686-mingw32` or `i686-cygwin` | +| Windows 64 | `(amd64\|x86_64)-.*(mingw32\|cygwin)` | `x86_64-mingw32` or `x86_64-cygwin` | +| MacOSX 32 | `i[3456]86-apple-darwin.*` | `i686-apple-darwin` | +| MacOSX 64 | `x86_64-apple-darwin.*` | `x86_64-apple-darwin` | +| MacOSX Arm64 | `arm64-apple-darwin.*` | `arm64-apple-darwin` | +| FreeBSD 32 | `i?[3456]86-freebsd[0-9]*` | `i686-freebsd` | +| FreeBSD 64 | `amd64-freebsd[0-9]*` | `amd64-freebsd` | +| FreeBSD Arm | `arm.*-freebsd[0-9]*` | `arm-freebsd` | The `host` value is matched with the regexp, this means that a more specific value for the `host` field is allowed (for example you may write `x86_64-apple-darwin14.1` for MacOSX instead of the suggested `x86_64-apple-darwin`), by the way, diff --git a/docs/platform-specification.md b/docs/platform-specification.md index c34047bf8d9..47fbc2a62bc 100644 --- a/docs/platform-specification.md +++ b/docs/platform-specification.md @@ -5,31 +5,65 @@ Platforms add support for new boards to the Arduino development software. They a [Boards Manager](package_index_json-specification.md) or manual installation to the _hardware_ folder of Arduino's sketchbook folder (AKA "user directory").
A platform may consist of as little as a single configuration file. -## Hardware Folders structure +## Platform installation directories -The new hardware folders have a hierarchical structure organized in two levels: +If the platforms are installed using the Board Manager the installation directory location will be as follow: -- the first level is the vendor/maintainer -- the second level is the supported architecture +`{directories.data}/packages/{VENDOR_NAME}/hardware/{ARCHITECTURE}/{VERSION}/...` -A vendor/maintainer can have multiple supported architectures. For example, below we have three hardware vendors called -"arduino", "yyyyy" and "xxxxx": +- `{directories.data}` is the data directory as specified in the + [configuration file](configuration.md#default-directories). +- `{VENDOR_NAME}` is the identifier of the vendor/maintainer of the platform. +- `{ARCHITECTURE}` is the architecture of the CPU used in the platform. +- `{VERSION}` is the platform version. + +Alternatively, a platform may be manually installed by the user inside the Sketchbook/user directory as follows: + +`{directories.user}/hardware/{VENDOR_NAME}/{ARCHITECTURE}/...` + +- `{directories.user}` is the user directory as specified in the + [configuration file](configuration.md#default-directories). +- `{VENDOR_NAME}` is the identifier of the vendor/maintainer of the platform. +- `{ARCHITECTURE}` is the architecture of the CPU used in the platform. + +A vendor/maintainer may have multiple supported architectures. + +Let's see an example, below we have a bunch of platforms downloaded from three hardware vendors `arduino`, `adafruit` +and `esp32`, and installed using the Board Manager: ``` -hardware/arduino/avr/... - Arduino - AVR Boards -hardware/arduino/sam/... - Arduino - SAM (32bit ARM) Boards -hardware/yyyyy/avr/... - Yyy - AVR -hardware/xxxxx/avr/... - Xxx - AVR +{directories.data}/packages/arduino/hardware/avr/1.8.6/... +{directories.data}/packages/arduino/hardware/esp32/2.0.18-arduino.5/... +{directories.data}/packages/arduino/hardware/nrf52/1.4.5/... +{directories.data}/packages/adafruit/hardware/nrf52/1.6.1/... +{directories.data}/packages/esp32/hardware/esp32/3.0.7/... ``` -The vendor "arduino" has two supported architectures (AVR and SAM), while "xxxxx" and "yyyyy" have only AVR. +In this example three architectures have been installed from the vendor `arduino` (`avr`, `esp32` and `nrf52`), and one +from `adafruit` and `esp32` (`nrf52` and `esp32` respectively). Note that the vendor `esp32` has the same name as the +architecture `esp32`. + +If the user manually installed the same platforms, they should have unpacked them in the following directories: + +``` +{directories.user}/hardware/arduino/avr/... +{directories.user}/hardware/arduino/esp32/... +{directories.user}/hardware/arduino/nrf52/... +{directories.user}/hardware/adafruit/nrf52/... +{directories.user}/hardware/esp32/esp32/... +``` + +In this latter case the version must be omitted. + +### Notes about choosing the architecture name Architecture values are case sensitive (e.g. `AVR` != `avr`). -If possible, follow existing architecture name conventions when creating hardware packages. Use the vendor folder name -to differentiate your package. The architecture folder name is used to determine library compatibility and to permit -referencing resources from another core of the same architecture, so use of a non-standard architecture name can have a -harmful effect. +Platform developers should follow the existing architecture name conventions when creating hardware packages, if you +need to differentiate your package use the vendor/maintainer folder name to do so. + +The architecture name is used to determine the libraries compatibility and to permit referencing resources from another +platform of the same architecture. Use of a non-standard architecture name can have a harmful effect. ## Architecture configurations @@ -83,8 +117,9 @@ suffixes are `.linux`, `.windows` and `.macosx`. The following automatically generated properties can be used globally in all configuration files: -- `{runtime.platform.path}`: the absolute path of the [board platform](#platform-terminology) folder (i.e. the folder - containing boards.txt) +- `{runtime.platform.path}`: is the absolute path of the [board platform](#platform-terminology) folder (i.e. the folder + containing boards.txt) unless `{runtime.use_core_platform_path_for_runtime_platform_path}` is set to `true` in this + case, the value is the absolute path of the referenced core platform. - `{runtime.hardware.path}`: the absolute path of the hardware folder (i.e. the folder containing the [board platform](#platform-terminology) folder) - `{runtime.ide.path}`: the absolute path of the Arduino IDE or Arduino CLI folder @@ -113,8 +148,11 @@ The following automatically generated properties can be used globally in all con - `{extra.time.zone}`: local timezone offset without the DST component - `{extra.time.dst}`: local daylight savings time offset -Compatibility note: Versions before Arduino IDE 1.6.0 only used one digit per version number component in -`{runtime.ide.version}` (so 1.5.9 was `159`, not `10509`). +Compatibility notes: + +- Versions before Arduino IDE 1.6.0 only used one digit per version number component in `{runtime.ide.version}` (so + 1.5.9 was `159`, not `10509`). +- `{runtime.use_core_platform_path_for_runtime_platform_path}` support is available from Arduino CLI >=1.0.4. ## platform.txt @@ -534,6 +572,9 @@ This explains the presence of **{build.mcu}** or **{build.board}** in the platfo overwritten respectively by **{uno.build.mcu}** and **{uno.build.board}** when the Uno board is selected! Moreover the following properties are automatically generated: +- `{build.board.platform.path}`: The path to the selected board's platform. (available since Arduino CLI >=1.0.4) +- `{build.core.platform.path}`: The path to the core's platform. It may differ from the board's platform path because + the latter may reference a core from another platform. (available since Arduino CLI >=1.0.4) - `{build.core.path}`: The path to the selected board's core folder (inside the [core platform](#platform-terminology), for example hardware/arduino/avr/core/arduino) - `{build.system.path}`: The path to the [core platform](#platform-terminology)'s system folder if available (for @@ -547,14 +588,14 @@ will be used to identify a board by the discovery process when plugged in. For example we could declare a series of `upload_port.vid` and `upload_port.pid` properties for the Uno like so: ``` -uno.upload_port.vid.0=0x2341 -uno.upload_port.pid.0=0x0043 -uno.upload_port.vid.1=0x2341 -uno.upload_port.pid.1=0x0001 -uno.upload_port.vid.2=0x2A03 -uno.upload_port.pid.2=0x0043 -uno.upload_port.vid.3=0x2341 -uno.upload_port.pid.3=0x0243 +uno.upload_port.0.vid=0x2341 +uno.upload_port.0.pid=0x0043 +uno.upload_port.1.vid=0x2341 +uno.upload_port.1.pid=0x0001 +uno.upload_port.2.vid=0x2A03 +uno.upload_port.2.pid=0x0043 +uno.upload_port.3.vid=0x2341 +uno.upload_port.3.pid=0x0243 ``` In this case we're using the board's USB VID/PID pair to identify it but `upload_port.*` properties can be anything that @@ -728,6 +769,24 @@ the [board and core platform](#platform-terminology) of the currently selected b platforms may now need to define copies of the programmers that were previously assumed to be provided by another platform. +### Set a default programmer for a board (since Arduino CLI >=0.35.0, Arduino IDE >=2.3.0) + +A default programmer for each board may be specified through the `programmer.default` directive in the board definition: + +``` +BOARD_ID.programmer.default=PROGRAMMER_ID +``` + +The default programmer will be selected automatically if the user do not specifiy or select another programmer. This may +be useful for boards with an on-board programmer/debugger. + +For example if we want to set Atmel ICE as the default programmer for the Arduino UNO we would add the following line to +the `boards.txt` file: + +``` +uno.programmer.default=atmel-ice +``` + ## Tools The Arduino development software uses external command line tools to upload the compiled sketch to the board or to burn @@ -1351,12 +1410,15 @@ to provide some debug configuration directives. All the debug directives are grouped under the `debug.*` directives. Here is the complete list of the supported directives: +- `debug.executable`: is the absolute path to the compiled binary of the sketch - `debug.toolchain`: is a unique identifier of the required toolchain, currently we support `gcc` (and compatible) only - `debug.toolchain.path`: is the absolute path to the toolchain directory - `debug.toolchain.prefix`: is the prefix of the toolchain (for example `arm-none-eabi-`) - `debug.server`: is a unique identifier of the required debug server, currently we support only `openocd` - `debug.svd_file`: is the absolute path to the SVD descriptor. +If the `debug.executable` property is not present or is empty debugging will not be allowed. + OpenOCD server specific configurations: - `debug.server.openocd.path`: is the absolute path to the OpenOCD directory @@ -1403,6 +1465,105 @@ will result in the following JSON to be merged in the Arduino IDE generated `lau } ``` +All the values are converted by default to a string in the resulting JSON. If another type is needed the value can be +prefixed with the tags `[boolean]`, `[number]`, `[string]` or `[object]` to force a specific type in the JSON. Moreover +the hierarchy of the properties may be used to build JSON objects. For example: + +``` +debug.cortex-debug.custom.aBoolean=[boolean]true +debug.cortex-debug.custom.aNumber=[number]10 +debug.cortex-debug.custom.anotherNumber=[number]10.20 +debug.cortex-debug.custom.anObject=[object]{"key":"value", "boolean":true} +debug.cortex-debug.custom.anotherObject.key=value +debug.cortex-debug.custom.anotherObject.boolean=[boolean]true +``` + +will result in the following JSON: + +```json +{ + "aBoolean": true, + "aNumber": 10, + "anotherNumber": 10.2, + "anObject": { + "boolean": true, + "key": "value" + }, + "anotherObject": { + "boolean": true, + "key": "value" + } +} +``` + +### Additional debugger config selection via `debug.additional_config` directive. + +It is possible to use any sub-tree of the platform configuration to override the debugger configuration using the +directive `debug.additional_config=CONFIG_PREFIX`. This rule will use the configuration under `CONFIG_PREFIX.*` to +override the current `debug.*` config. + +This change allows a more convenient rationalization and selection of the configs to apply to the debugger. For example, +we could factor common parts of a configuration in the platform.txt file: + +``` +# CONFIG 1 +debug-overrides.esp32.cortex-debug.custom.name=Arduino on ESP32 +debug-overrides.esp32.cortex-debug.custom.request=attach +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.0=set remote hardware-watchpoint-limit 2 +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.1=monitor reset halt +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.2=monitor gdb_sync +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.3=thb setup +debug-overrides.esp32.cortex-debug.custom.postAttachCommands.4=c +debug-overrides.esp32.cortex-debug.custom.overrideRestartCommands.0=monitor reset halt +debug-overrides.esp32.cortex-debug.custom.overrideRestartCommands.1=monitor gdb_sync +debug-overrides.esp32.cortex-debug.custom.overrideRestartCommands.2=thb setup +debug-overrides.esp32.cortex-debug.custom.overrideRestartCommands.3=c + +# CONFIG 2 +debug-overrides.esp32s2.cortex-debug.custom.name=Arduino on ESP32-S2 +debug-overrides.esp32s2.cortex-debug.custom.request=attach +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.0=set remote hardware-watchpoint-limit 2 +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.1=monitor reset halt +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.2=monitor gdb_sync +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.3=thb setup +debug-overrides.esp32s2.cortex-debug.custom.postAttachCommands.4=c +debug-overrides.esp32s2.cortex-debug.custom.overrideRestartCommands.0=monitor reset halt +debug-overrides.esp32s2.cortex-debug.custom.overrideRestartCommands.1=monitor gdb_sync +debug-overrides.esp32s2.cortex-debug.custom.overrideRestartCommands.2=thb setup +debug-overrides.esp32s2.cortex-debug.custom.overrideRestartCommands.3=c +``` + +and choose which one to use depending on the board in the boards.txt file: + +``` +myboard.name=My Board with esp32 +myboard.debug.additional_config=debug-overrides.esp32 + +anotherboard.name=My Board with esp32s2 +anotherboard.debug.additional_config=debug-overrides.esp32s2 +... +``` + +Another possibility is to compose the configuration using another variable present in the board configuration, for +example if in the `platform.txt` we add: + +``` +debug.additional_config=debug-overrides.{build.mcu} +``` + +we may use the `build.mcu` value as a "selector" for the board-specific debug configuration that is overlapped to the +global debug configuration: + +``` +myboard.name=My Board with esp32 +myboard.build.mcu=esp32 +... + +anotherboard.name=My Board with esp32s2 +anotherboard.build.mcu=esp32s2 +... +``` + ### Optimization level for debugging The compiler optimization level that is appropriate for normal usage will often not provide a good experience while diff --git a/docs/pluggable-discovery-specification.md b/docs/pluggable-discovery-specification.md index 4854fa1968e..759dd86eea1 100644 --- a/docs/pluggable-discovery-specification.md +++ b/docs/pluggable-discovery-specification.md @@ -312,7 +312,8 @@ The `properties` associated to a port can be used to identify the board attached "candidate" board attached to that port. Some port `properties` may not be precise enough to uniquely identify a board, in that case more boards may match the -same set of `properties`, that's why we called it "candidate". +same set of `properties`, that's why we called it "candidate". The board identification properties should be used only +if they allows to match the board model beyond any doubt. Let's see an example to clarify things a bit, let's suppose that we have the following `properties` coming from the serial discovery: @@ -392,6 +393,13 @@ myboard.upload_port.1.apples=40 will match on both `pears=20, apples=30` and `pears=30, apples=40` but not `pears=20, apples=40`, in that sense each "set" of identification properties is independent from each other and cannot be mixed for port matching. +#### An important note about `vid` and `pid` + +The board identification properties should be used only if they allows to match the board model beyond any doubt. +Sometimes a board do not expose a unique vid/pid combination, this is the case for example if a USB-2-serial converter +chip is used (like the omnipresent FT232 or CH340): those chips exposes their specific vid/pid that will be the same for +all the other boards using the same chip. In such cases the board identification properties should NOT be used. + #### Identification of board options [Custom board options](platform-specification.md#custom-board-options) can also be identified. diff --git a/docs/sketch-build-process.md b/docs/sketch-build-process.md index 6fad171187e..9f1f0067571 100644 --- a/docs/sketch-build-process.md +++ b/docs/sketch-build-process.md @@ -137,8 +137,8 @@ The "location priority" is determined as follows (in order of highest to lowest #### Location priorities in Arduino Web Editor -The location priorities system works in the same manner in [Arduino Web Editor](https://create.arduino.cc/editor), but -its cloud-based nature may make the locations of libraries less obvious. +The location priorities system works in the same manner in [Arduino Web Editor](https://create.arduino.cc/), but its +cloud-based nature may make the locations of libraries less obvious. 1. **Custom**: the imported libraries, shown under the **Libraries > Custom** tab. - These libraries are under `/tmp/\/custom` diff --git a/docs/sketch-project-file.md b/docs/sketch-project-file.md index 640ede7505e..1660bba9f1b 100644 --- a/docs/sketch-project-file.md +++ b/docs/sketch-project-file.md @@ -10,10 +10,12 @@ multiple profiles. Each profile will define: - The board FQBN +- The programmer to use - The target core platform name and version (with the 3rd party platform index URL if needed) - A possible core platform name and version, that is a dependency of the target core platform (with the 3rd party platform index URL if needed) - The libraries used in the sketch (including their version) +- The port and protocol to upload the sketch and monitor the board The format of the file is the following: @@ -22,6 +24,7 @@ profiles: : notes: fqbn: + programmer: platforms: - platform: () platform_index_url: <3RD_PARTY_PLATFORM_URL> @@ -31,7 +34,11 @@ profiles: - () - () - () - + port: + port_config: + : + ... + protocol: ...more profiles here... ``` @@ -50,6 +57,16 @@ otherwise below). The available fields are: - `libraries:` is a section where the required libraries to build the project are defined. This section is optional. - `` is the version required for the library, for example, `1.0.0`. - `` is a free text string available to the developer to add comments. This field is optional. +- `` is the programmer that will be used. This field is optional. + +The following fields are available since Arduino CLI 1.1.0: + +- `` is the port that will be used to upload and monitor the board (unless explicitly set otherwise). This + field is optional. +- `port_config` section with `` and `` defines the port settings that will be + used in the `monitor` command. Typically is used to set the baudrate for the serial port (for example + `baudrate: 115200`) but any setting/value can be specified. Multiple settings can be set. These fields are optional. +- `` is the protocol for the port used to upload and monitor the board. This field is optional. A complete example of a sketch project file may be the following: @@ -73,14 +90,17 @@ profiles: - VitconMQTT (1.0.1) - Arduino_ConnectionHandler (0.6.4) - TinyDHT sensor library (1.1.0) + port: /dev/ttyACM0 + port_config: + baudrate: 115200 tiny: notes: testing the very limit of the AVR platform, it will be very unstable fqbn: attiny:avr:ATtinyX5:cpu=attiny85,clock=internal16 platforms: - - platform: attiny:avr@1.0.2 + - platform: attiny:avr (1.0.2) platform_index_url: https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json - - platform: arduino:avr@1.8.3 + - platform: arduino:avr (1.8.3) libraries: - ArduinoIoTCloud (1.0.2) - Arduino_ConnectionHandler (0.6.4) @@ -134,19 +154,27 @@ The sketch project file may be used to set the default value for some command li particular: - The `default_fqbn` key sets the default value for the `--fqbn` flag +- The `default_programmer` key sets the default value for the `--programmer` flag - The `default_port` key sets the default value for the `--port` flag +- The `default_port_config` key sets the default values for the `--config` flag in the `monitor` command (available + since Arduino CLI 1.1.0) - The `default_protocol` key sets the default value for the `--protocol` flag - The `default_profile` key sets the default value for the `--profile` flag For example: ``` -default_fqbn: arduino:avr:uno +default_fqbn: arduino:samd:mkr1000 +default_programmer: atmel_ice default_port: /dev/ttyACM0 +default_port_config: + baudrate: 115200 default_protocol: serial default_profile: myprofile ``` -With this configuration set, it is not necessary to specify the `--fqbn`, `--port`, `--protocol` or `--profile` flags to -the [`arduino-cli compile`](commands/arduino-cli_compile.md) or [`arduino-cli upload`](commands/arduino-cli_upload.md) -commands when compiling or uploading the sketch. +With this configuration set, it is not necessary to specify the `--fqbn`, `--programmer`, `--port`, `--protocol` or +`--profile` flags to the [`arduino-cli compile`](commands/arduino-cli_compile.md), +[`arduino-cli upload`](commands/arduino-cli_upload.md) or [`arduino-cli debug`](commands/arduino-cli_debug.md) commands +when compiling, uploading or debugging the sketch. Moreover in the `monitor` command it is not necessary to specify the +`--config baudrate=115200` to communicate with the monitor port of the board. diff --git a/docs/versioning.md b/docs/versioning.md new file mode 100644 index 00000000000..17b0414a8ed --- /dev/null +++ b/docs/versioning.md @@ -0,0 +1,120 @@ +# Backward compatibility policy for arduino-cli. + +The arduino-cli project follows a strict semantic versioning policy. We are committing not to make breaking changes in +minor releases of Arduino CLI 1.x.x. + +The release rules are the following: + +- Alpha phase `0.0.X`: In this phase, the software is going through a quick iteration of the API, each release (with + increments of X) may contain massive and breaking changes. +- Beta phase `0.Y.X`: The software is usable, but the API is still not settled and is under continuous testing and + review. Breaking changes are expected. Bug fixes and new features are made as patch releases (with increments of X). + Breaking changes due to API refinements are made as minor releases (with increments of Y). +- Production release-candidate `1.0.0-rc.X`: in this phase, the software is considered ready for release and distributed + to the users for final testing. Release candidates (with increments of X) are possible for bug fixes only. +- **Production release `1.Y.X`**: For the production releases backward compatibility is guaranteed, and all the breaking + changes are cumulated for the next major release (2.0.0). Bug fixes are made as patch releases (with increments of X); + New features are released as minor releases (with increments of Y). +- Next major release development `>=2.0.0` and up: see below. + +## Backward compatibility guarantees and definition of "breaking change" + +There are three main user facing API in the arduino-cli project: + +- the standalone command-line API +- the gRPC API +- the golang API + +Let's examine the backward compatibility rules for each one of these categories. + +### Breaking changes in the command-line app + +Changes in the command-line interface are considered breaking if: + +- a command, a positional argument, or a flag is removed or renamed +- a command, a positional argument, or a flag behavior is changed +- an optional positional argument or a flag is made mandatory +- a positional argument or a flag format is changed + +The following changes to the command-line syntax are NOT considered breaking changes: + +- a new command is added +- a new optional positional argument is added +- a new optional flag is added + +Any change in the **human-readable** text output is **NOT** considered a breaking change. In general, the human-readable +text is subject to translation and small adjustments in natural language syntax and presentation. + +We will consider breaking changes only in the **machine-readable** output of the commands using the `--json` flag. In +particular, we have a breaking change in the JSON command output if: + +- a key in a JSON object is renamed or removed. +- a value in a JSON object or array changes meaning or changes format. + +We do **NOT** have a breaking change if: + +- a new key is added to an existing JSON object + +### Breaking changes in the gRPC API + +To ensure gRPC API backward compatibility the only allowed changes are: + +- adding a new service +- adding a new method to a service +- adding a field to an existing message +- adding a value to an enum + +In general, **adding** to the gRPC API is allowed, **ANY OTHER** change will be considered a breaking change, some +examples are: + +- renaming a service +- renaming a method +- changing a method signature +- renaming a field in a message +- changing a field type in a message +- deleting a field in a message +- etc. + +The gRPC API is defined as a gRPC service running in the endpoint `cc.arduino.cli.commands.v1`. When a breaking change +happens a new gRPC endpoint is created from the existing API. The first breaking change will be implemented in the new +service `cc.arduino.cli.commands.v2`. + +### Breaking changes in the golang API + +The public golang API from the import path `github.com/arduino/arduino-cli` is guaranteed to be stable. Breaking changes +in the API will follow the go-lang guidelines and will be implemented by changing the import path by adding the `/v2` +suffix: `github.com/arduino/arduino-cli/v2`. + +## Development process for the next major releases. + +The development of the 2.0.0 release will proceed in a separate git branch `2.x.x`, in parallel with the 1.0.0 releases +that will continue on the `master` git branch. + +New features and bug fixes should be made on the `master` branch and ported to the `2.x.x` once completed (unless it's a +2.0 specific change, in that case, it's fine to develop directly on the `2.x.x` branch). + +Future releases and pre-releases of the `2.x.x` will follow the following versioning policy: + +- Beta `2.0.0-beta.X.Y`: The v2 API is still under testing and review. Bug fixes and new features are released with + increments of Y. Breaking changes are still possible and released with increments of X. +- Release Candidate `2.0.0-rc.X`: The v2 API is ready for release. Release candidates are distributed for user testing. + Bug-fix releases only are allowed (with increments of X). +- `2.0.0` and up: The same rules for the `1.0.0` applies. + +After the 2.0.0 release, the `master` branch will be moved to `2.x.x`, and the 1.0 branch will be tracked by a new +`1.x.x` branch. + +The command-line interface for CLI 2.0 will be incompatible with CLI 1.0. Some commands may still be compatible though +depending on the amount of changes. + +The gRPC daemon is flexible enough to run both services v1 and v2 at the same time. This capability allows a deprecation +period to allow a soft transition from v1 API to v2 API. We will deprecate the v1 API in the CLI 2.0 series but we will +continue to support it until the next major release CLI 3.0. At that point, we may decide to drop the support for the v1 +API entirely but, depending on the balance between user demand and maintenance effort, we may decide to continue to +support it. + +The go-lang API import path will be updated, following the go modules guidelines, by adding the `/v2` suffix: +`github.com/arduino/arduino-cli/v2`. + +Unlike the gRPC counterpart, we will not guarantee a deprecation policy and a soft transition period for the go-lang API +(but again depending on the balance between user demand and maintenance effort we may decide to deprecate some API). diff --git a/executils/executils.go b/executils/executils.go deleted file mode 100644 index 573db1a3ded..00000000000 --- a/executils/executils.go +++ /dev/null @@ -1,76 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package executils - -import ( - "bytes" - "io" - "os/exec" - - "github.com/arduino/arduino-cli/i18n" -) - -var tr = i18n.Tr - -// PipeCommands executes the commands received as input by feeding the output of -// one to the input of the other, exactly like Unix Pipe (|). -// Returns the output of the final command and the eventual error. -// -// code inspired by https://gist.github.com/tyndyll/89fbb2c2273f83a074dc -func PipeCommands(commands ...*exec.Cmd) ([]byte, error) { - var errorBuffer, outputBuffer bytes.Buffer - pipeStack := make([]*io.PipeWriter, len(commands)-1) - i := 0 - for ; i < len(commands)-1; i++ { - stdinPipe, stdoutPipe := io.Pipe() - commands[i].Stdout = stdoutPipe - commands[i].Stderr = &errorBuffer - commands[i+1].Stdin = stdinPipe - pipeStack[i] = stdoutPipe - } - commands[i].Stdout = &outputBuffer - commands[i].Stderr = &errorBuffer - - if err := call(commands, pipeStack); err != nil { - return nil, err - } - - return outputBuffer.Bytes(), nil -} - -func call(stack []*exec.Cmd, pipes []*io.PipeWriter) (err error) { - if stack[0].Process == nil { - if err = stack[0].Start(); err != nil { - return err - } - } - if len(stack) > 1 { - if err = stack[1].Start(); err != nil { - return err - } - defer func() { - pipes[0].Close() - err = call(stack[1:], pipes[1:]) - }() - } - return stack[0].Wait() -} - -// TellCommandNotToSpawnShell avoids that the specified Cmd display a small -// command prompt while runnning on Windows. It has no effects on other OS. -func TellCommandNotToSpawnShell(cmd *exec.Cmd) { - tellCommandNotToSpawnShell(cmd) -} diff --git a/executils/output.go b/executils/output.go deleted file mode 100644 index 1049ff01699..00000000000 --- a/executils/output.go +++ /dev/null @@ -1,82 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package executils - -import ( - "bufio" - "fmt" - "os" - "os/exec" -) - -// OutputListener is a callback interface to receive output messages from process -type OutputListener interface { - Output(msg string) -} - -// AttachStdoutListener adds an OutputListener to the stdout of the process -func AttachStdoutListener(cmd *exec.Cmd, listener OutputListener) error { - stdout, err := cmd.StdoutPipe() - if err != nil { - return fmt.Errorf(tr("can't retrieve standard output stream: %s"), err) - } - - stdoutCopy := bufio.NewScanner(stdout) - stdoutCopy.Split(bufio.ScanLines) - go func() { - for stdoutCopy.Scan() { - listener.Output(stdoutCopy.Text()) - } - }() - - return nil -} - -// AttachStderrListener adds an OutputListener to the stderr of the process -func AttachStderrListener(cmd *exec.Cmd, listener OutputListener) error { - stderr, err := cmd.StderrPipe() - if err != nil { - return fmt.Errorf(tr("can't retrieve standard error stream: %s"), err) - } - - stderrCopy := bufio.NewScanner(stderr) - stderrCopy.Split(bufio.ScanLines) - go func() { - for stderrCopy.Scan() { - listener.Output(stderrCopy.Text()) - } - }() - - return nil -} - -// PrintToStdout is an OutputListener that outputs messages to standard output -var PrintToStdout = &printToStdout{} - -type printToStdout struct{} - -func (*printToStdout) Output(msg string) { - fmt.Fprintln(os.Stdout, msg) -} - -// PrintToStderr is an OutputListener that outputs messages to standard error -var PrintToStderr = &printToStderr{} - -type printToStderr struct{} - -func (*printToStderr) Output(msg string) { - fmt.Fprintln(os.Stderr, msg) -} diff --git a/executils/process.go b/executils/process.go deleted file mode 100644 index a566226e73f..00000000000 --- a/executils/process.go +++ /dev/null @@ -1,199 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package executils - -import ( - "bytes" - "context" - "io" - "os" - "os/exec" - - "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" -) - -// Process is representation of an external process run -type Process struct { - cmd *exec.Cmd -} - -// NewProcess creates a command with the provided command line arguments -// and environment variables (that will be added to the parent os.Environ). -// The argument args[0] is the path to the executable, the remainder are the -// arguments to the command. -func NewProcess(extraEnv []string, args ...string) (*Process, error) { - if len(args) == 0 { - return nil, errors.New(tr("no executable specified")) - } - p := &Process{ - cmd: exec.Command(args[0], args[1:]...), - } - p.cmd.Env = append(os.Environ(), extraEnv...) - TellCommandNotToSpawnShell(p.cmd) - - // This is required because some tools detects if the program is running - // from terminal by looking at the stdin/out bindings. - // https://github.com/arduino/arduino-cli/issues/844 - p.cmd.Stdin = NullReader - return p, nil -} - -// NewProcessFromPath creates a command from the provided executable path, -// additional environment vars (in addition to the system default ones) -// and command line arguments. -func NewProcessFromPath(extraEnv []string, executable *paths.Path, args ...string) (*Process, error) { - processArgs := []string{executable.String()} - processArgs = append(processArgs, args...) - return NewProcess(extraEnv, processArgs...) -} - -// RedirectStdoutTo will redirect the process' stdout to the specified -// writer. Any previous redirection will be overwritten. -func (p *Process) RedirectStdoutTo(out io.Writer) { - p.cmd.Stdout = out -} - -// RedirectStderrTo will redirect the process' stdout to the specified -// writer. Any previous redirection will be overwritten. -func (p *Process) RedirectStderrTo(out io.Writer) { - p.cmd.Stderr = out -} - -// StdinPipe returns a pipe that will be connected to the command's standard -// input when the command starts. The pipe will be closed automatically after -// Wait sees the command exit. A caller need only call Close to force the pipe -// to close sooner. For example, if the command being run will not exit until -// standard input is closed, the caller must close the pipe. -func (p *Process) StdinPipe() (io.WriteCloser, error) { - if p.cmd.Stdin == NullReader { - p.cmd.Stdin = nil - } - return p.cmd.StdinPipe() -} - -// StdoutPipe returns a pipe that will be connected to the command's standard -// output when the command starts. -// -// Wait will close the pipe after seeing the command exit, so most callers -// don't need to close the pipe themselves. It is thus incorrect to call Wait -// before all reads from the pipe have completed. -// For the same reason, it is incorrect to call Run when using StdoutPipe. -func (p *Process) StdoutPipe() (io.ReadCloser, error) { - return p.cmd.StdoutPipe() -} - -// StderrPipe returns a pipe that will be connected to the command's standard -// error when the command starts. -// -// Wait will close the pipe after seeing the command exit, so most callers -// don't need to close the pipe themselves. It is thus incorrect to call Wait -// before all reads from the pipe have completed. -// For the same reason, it is incorrect to use Run when using StderrPipe. -func (p *Process) StderrPipe() (io.ReadCloser, error) { - return p.cmd.StderrPipe() -} - -// Start will start the underliyng process. -func (p *Process) Start() error { - return p.cmd.Start() -} - -// Wait waits for the command to exit and waits for any copying to stdin or copying -// from stdout or stderr to complete. -func (p *Process) Wait() error { - // TODO: make some helpers to retrieve exit codes out of *ExitError. - return p.cmd.Wait() -} - -// Signal sends a signal to the Process. Sending Interrupt on Windows is not implemented. -func (p *Process) Signal(sig os.Signal) error { - return p.cmd.Process.Signal(sig) -} - -// Kill causes the Process to exit immediately. Kill does not wait until the Process has -// actually exited. This only kills the Process itself, not any other processes it may -// have started. -func (p *Process) Kill() error { - return p.cmd.Process.Kill() -} - -// SetDir sets the working directory of the command. If Dir is the empty string, Run -// runs the command in the calling process's current directory. -func (p *Process) SetDir(dir string) { - p.cmd.Dir = dir -} - -// GetDir gets the working directory of the command. -func (p *Process) GetDir() string { - return p.cmd.Dir -} - -// SetDirFromPath sets the working directory of the command. If path is nil, Run -// runs the command in the calling process's current directory. -func (p *Process) SetDirFromPath(path *paths.Path) { - if path == nil { - p.cmd.Dir = "" - } else { - p.cmd.Dir = path.String() - } -} - -// Run starts the specified command and waits for it to complete. -func (p *Process) Run() error { - return p.cmd.Run() -} - -// SetEnvironment set the environment for the running process. Each entry is of the form "key=value". -// System default environments will be wiped out. -func (p *Process) SetEnvironment(values []string) { - p.cmd.Env = append([]string{}, values...) -} - -// RunWithinContext starts the specified command and waits for it to complete. If the given context -// is canceled before the normal process termination, the process is killed. -func (p *Process) RunWithinContext(ctx context.Context) error { - if err := p.Start(); err != nil { - return err - } - completed := make(chan struct{}) - defer close(completed) - go func() { - select { - case <-ctx.Done(): - p.Kill() - case <-completed: - } - }() - return p.Wait() -} - -// RunAndCaptureOutput starts the specified command and waits for it to complete. If the given context -// is canceled before the normal process termination, the process is killed. The standard output and -// standard error of the process are captured and returned at process termination. -func (p *Process) RunAndCaptureOutput(ctx context.Context) ([]byte, []byte, error) { - stdout := &bytes.Buffer{} - stderr := &bytes.Buffer{} - p.RedirectStdoutTo(stdout) - p.RedirectStderrTo(stderr) - err := p.RunWithinContext(ctx) - return stdout.Bytes(), stderr.Bytes(), err -} - -// GetArgs returns the command arguments -func (p *Process) GetArgs() []string { - return p.cmd.Args -} diff --git a/executils/testdata/delay/.gitignore b/executils/testdata/delay/.gitignore deleted file mode 100644 index fd5812a40bb..00000000000 --- a/executils/testdata/delay/.gitignore +++ /dev/null @@ -1 +0,0 @@ -delay* diff --git a/go.mod b/go.mod index 3cb1be40908..3510c2e00dc 100644 --- a/go.mod +++ b/go.mod @@ -1,66 +1,71 @@ module github.com/arduino/arduino-cli -go 1.21 +go 1.24.1 // We must use this fork until https://github.com/mailru/easyjson/pull/372 is merged replace github.com/mailru/easyjson => github.com/cmaglie/easyjson v0.8.1 require ( - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 - github.com/arduino/go-paths-helper v1.9.2 - github.com/arduino/go-properties-orderedmap v1.8.0 + fortio.org/safecast v1.0.0 + github.com/ProtonMail/go-crypto v1.2.0 + github.com/arduino/go-paths-helper v1.13.0 + github.com/arduino/go-properties-orderedmap v1.8.1 + github.com/arduino/go-serial-utils v0.1.2 github.com/arduino/go-timeutils v0.0.0-20171220113728-d1dd9e313b1b github.com/arduino/go-win32-utils v1.0.0 + github.com/arduino/pluggable-discovery-protocol-handler/v2 v2.2.1 + github.com/arduino/pluggable-monitor-protocol-handler v0.9.2 github.com/cmaglie/pb v1.0.27 - github.com/codeclysm/extract/v3 v3.1.1 + github.com/codeclysm/extract/v4 v4.0.0 github.com/djherbis/buffer v1.2.0 github.com/djherbis/nio/v3 v3.0.1 - github.com/fatih/color v1.15.0 - github.com/go-git/go-git/v5 v5.4.2 - github.com/gofrs/uuid/v5 v5.0.0 - github.com/leonelquinteros/gotext v1.4.0 + github.com/fatih/color v1.18.0 + github.com/go-git/go-git/v5 v5.16.0 + github.com/gofrs/uuid/v5 v5.3.2 + github.com/leonelquinteros/gotext v1.7.1 github.com/mailru/easyjson v0.7.7 github.com/marcinbor85/gohex v0.0.0-20210308104911-55fb1c624d84 - github.com/mattn/go-colorable v0.1.13 + github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 - github.com/pkg/errors v0.9.1 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 - github.com/rogpeppe/go-internal v1.11.0 + github.com/rogpeppe/go-internal v1.14.1 github.com/schollz/closestmatch v2.1.0+incompatible github.com/sirupsen/logrus v1.9.3 - github.com/spf13/cobra v1.7.0 - github.com/spf13/viper v1.17.0 - github.com/stretchr/testify v1.8.4 + github.com/spf13/cobra v1.9.1 + github.com/spf13/viper v1.20.1 + github.com/stretchr/testify v1.10.0 github.com/xeipuuv/gojsonschema v1.2.0 go.bug.st/cleanup v1.0.0 - go.bug.st/downloader/v2 v2.1.1 - go.bug.st/relaxed-semver v0.11.0 - go.bug.st/serial v1.6.1 - go.bug.st/testifyjson v1.1.1 - golang.org/x/term v0.13.0 - golang.org/x/text v0.13.0 - google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a - google.golang.org/grpc v1.59.0 - google.golang.org/protobuf v1.31.0 + go.bug.st/downloader/v2 v2.2.0 + go.bug.st/f v0.4.0 + go.bug.st/relaxed-semver v0.15.0 + go.bug.st/testifyjson v1.3.0 + golang.org/x/sys v0.32.0 + golang.org/x/term v0.31.0 + golang.org/x/text v0.24.0 + google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a + google.golang.org/grpc v1.72.0 + google.golang.org/protobuf v1.36.6 gopkg.in/yaml.v3 v3.0.1 ) require ( - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/cloudflare/circl v1.3.3 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + dario.cat/mergo v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/cloudflare/circl v1.6.1 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect github.com/creack/goselect v0.1.2 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/cyphar/filepath-securejoin v0.4.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/go-git/go-billy/v5 v5.6.2 // indirect + github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/h2non/filetype v1.1.3 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/imdario/mergo v0.3.12 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/itchyny/gojq v0.12.8 // indirect github.com/itchyny/timefmt-go v0.1.3 // indirect @@ -68,35 +73,30 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/juju/errors v1.0.0 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.17.0 // indirect - github.com/magiconair/properties v1.8.7 // indirect + github.com/klauspost/compress v1.17.2 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/pelletier/go-toml/v2 v2.1.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.3 // indirect + github.com/pjbgf/sha1cd v0.3.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sagikazarmark/locafero v0.3.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/sergi/go-diff v1.3.1 // indirect + github.com/sagikazarmark/locafero v0.7.0 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect + github.com/skeema/knownhosts v1.3.1 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.10.0 // indirect - github.com/spf13/cast v1.5.1 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/afero v1.12.0 // indirect + github.com/spf13/cast v1.7.1 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/ulikunitz/xz v0.5.11 // indirect + github.com/ulikunitz/xz v0.5.12 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + go.bug.st/serial v1.6.2 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/tools v0.13.0 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 // indirect + golang.org/x/net v0.39.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect ) diff --git a/go.sum b/go.sum index 7de473165d6..a70cca2d7e4 100644 --- a/go.sum +++ b/go.sum @@ -1,90 +1,45 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +fortio.org/safecast v1.0.0 h1:dr3131WPX8iS1pTf76+39WeXbTrerDYLvi9s7Oi3wiY= +fortio.org/safecast v1.0.0/go.mod h1:xZmcPk3vi4kuUFf+tq4SvnlVdwViqf6ZSZl91Jr9Jdg= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/ProtonMail/go-crypto v1.2.0 h1:+PhXXn4SPGd+qk76TlEePBfOfivE0zkWFenhGhFLzWs= +github.com/ProtonMail/go-crypto v1.2.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/arduino/go-paths-helper v1.0.1/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck= -github.com/arduino/go-paths-helper v1.9.2 h1:omR8DPTL4nbUCWfGey5D+e3WvWfA2zEgoM6ZBRNt7ls= -github.com/arduino/go-paths-helper v1.9.2/go.mod h1:V82BWgAAp4IbmlybxQdk9Bpkz8M4Qyx+RAFKaG9NuvU= -github.com/arduino/go-properties-orderedmap v1.8.0 h1:wEfa6hHdpezrVOh787OmClsf/Kd8qB+zE3P2Xbrn0CQ= -github.com/arduino/go-properties-orderedmap v1.8.0/go.mod h1:DKjD2VXY/NZmlingh4lSFMEYCVubfeArCsGPGDwb2yk= +github.com/arduino/go-paths-helper v1.13.0 h1:HIkgg8ChPw1QPNHkB5bQSs+geTj74vf6TFgVhm/9mmw= +github.com/arduino/go-paths-helper v1.13.0/go.mod h1:jcpW4wr0u69GlXhTYydsdsqAjLaYK5n7oWHfKqOG6LM= +github.com/arduino/go-properties-orderedmap v1.8.1 h1:nU5S6cXPwMoxZs4ORw61wPTALNfriIduvNB4cxTmNYM= +github.com/arduino/go-properties-orderedmap v1.8.1/go.mod h1:DKjD2VXY/NZmlingh4lSFMEYCVubfeArCsGPGDwb2yk= +github.com/arduino/go-serial-utils v0.1.2 h1:MRFwME4w/uaVkJ1R+wzz4KSbI9cF9IDVrYorazvjpTk= +github.com/arduino/go-serial-utils v0.1.2/go.mod h1:kzIsNPgz8DFAd1sAFKve4ubxrdGcwQ4XzvRLlztsgnE= github.com/arduino/go-timeutils v0.0.0-20171220113728-d1dd9e313b1b h1:9hDi4F2st6dbLC3y4i02zFT5quS4X6iioWifGlVwfy4= github.com/arduino/go-timeutils v0.0.0-20171220113728-d1dd9e313b1b/go.mod h1:uwGy5PpN4lqW97FiLnbcx+xx8jly5YuPMJWfVwwjJiQ= github.com/arduino/go-win32-utils v1.0.0 h1:/cXB86sOJxOsCHP7sQmXGLkdValwJt56mIwOHYxgQjQ= github.com/arduino/go-win32-utils v1.0.0/go.mod h1:0jqM7doGEAs6DaJCxxhLBUDS5OawrqF48HqXkcEie/Q= +github.com/arduino/pluggable-discovery-protocol-handler/v2 v2.2.1 h1:Fw8zKj1b/FkcQrWgN7aBw3ubSxpKIUtdANLXvd1Qdzw= +github.com/arduino/pluggable-discovery-protocol-handler/v2 v2.2.1/go.mod h1:1dgblsmK2iBx3L5iNTyRIokeaxbTLUrYiUbHBK6yC3Y= +github.com/arduino/pluggable-monitor-protocol-handler v0.9.2 h1:vb5AmE3bT9we5Ej4AdBxcC9dJLXasRimVqaComf9L3M= +github.com/arduino/pluggable-monitor-protocol-handler v0.9.2/go.mod h1:vMG8tgHyE+hli26oT0JB/M7NxUMzzWoU5wd6cgJQRK4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= +github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/cmaglie/easyjson v0.8.1 h1:nKQ6Yew57jsoGsuyRJPgm8PSsjbU3eO/uA9BsTu3E/8= github.com/cmaglie/easyjson v0.8.1/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/cmaglie/pb v1.0.27 h1:ynGj8vBXR+dtj4B7Q/W/qGt31771Ux5iFfRQBnwdQiA= github.com/cmaglie/pb v1.0.27/go.mod h1:GilkKZMXYjBA4NxItWFfO+lwkp59PLHQ+IOW/b/kmZI= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/codeclysm/extract/v3 v3.1.1 h1:iHZtdEAwSTqPrd+1n4jfhr1qBhUWtHlMTjT90+fJVXg= -github.com/codeclysm/extract/v3 v3.1.1/go.mod h1:ZJi80UG2JtfHqJI+lgJSCACttZi++dHxfWuPaMhlOfQ= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/codeclysm/extract/v4 v4.0.0 h1:H87LFsUNaJTu2e/8p/oiuiUsOK/TaPQ5wxsjPnwPEIY= +github.com/codeclysm/extract/v4 v4.0.0/go.mod h1:SFju1lj6as7FvUgalpSct7torJE0zttbJUWtryPRG6s= +github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/goselect v0.1.2 h1:2DNy14+JPjRBgPzAd1thbQp4BSIihxcBf0IXhQXDRa0= github.com/creack/goselect v0.1.2/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= +github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -94,110 +49,50 @@ github.com/djherbis/buffer v1.2.0 h1:PH5Dd2ss0C7CRRhQCZ2u7MssF+No9ide8Ye71nPHcrQ github.com/djherbis/buffer v1.2.0/go.mod h1:fjnebbZjCUpPinBRD+TDwXSOeNQ7fPQWLfGQqiAiUyE= github.com/djherbis/nio/v3 v3.0.1 h1:6wxhnuppteMa6RHA4L81Dq7ThkZH8SwnDzXDYy95vB4= github.com/djherbis/nio/v3 v3.0.1/go.mod h1:Ng4h80pbZFMla1yKzm61cF0tqqilXZYrogmWgZxOcmg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= +github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= +github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= +github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2SubfXjIWgci8= -github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= -github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= -github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= +github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= +github.com/go-git/go-git/v5 v5.16.0 h1:k3kuOEpkc0DeY7xlL6NaaNg39xdgQbtH5mwCafHO9AQ= +github.com/go-git/go-git/v5 v5.16.0/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= +github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/gofrs/uuid/v5 v5.3.2 h1:2jfO8j3XgSwlz/wHqemAEugfnTlikAYHhnqQ8Xh4fE0= +github.com/gofrs/uuid/v5 v5.3.2/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/itchyny/gojq v0.12.8 h1:Zxcwq8w4IeR8JJYEtoG2MWJZUv0RGY6QqJcO1cqV8+A= @@ -206,116 +101,87 @@ github.com/itchyny/timefmt-go v0.1.3 h1:7M3LGVDsqcd0VZH2U+x393obrzZisp7C0uEe921i github.com/itchyny/timefmt-go v0.1.3/go.mod h1:0osSSCQSASBJMsIZnhAaF1C2fCBTJZXrnj37mG8/c+A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/juju/errors v1.0.0 h1:yiq7kjCLll1BiaRuNY53MGI0+EQ3rF6GB+wvboZDefM= github.com/juju/errors v1.0.0/go.mod h1:B5x9thDqx0wIMH3+aLIMP9HjItInYWObRovoCFM5Qe8= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= -github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= +github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leonelquinteros/gotext v1.4.0 h1:2NHPCto5IoMXbrT0bldPrxj0qM5asOCwtb1aUQZ1tys= -github.com/leonelquinteros/gotext v1.4.0/go.mod h1:yZGXREmoGTtBvZHNcc+Yfug49G/2spuF/i/Qlsvz1Us= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/leonelquinteros/gotext v1.7.1 h1:/JNPeE3lY5JeVYv2+KBpz39994W3W9fmZCGq3eO9Ri8= +github.com/leonelquinteros/gotext v1.7.1/go.mod h1:I0WoFDn9u2D3VbPnnDPT8mzZu0iSXG8iih+AH2fHHqg= github.com/marcinbor85/gohex v0.0.0-20210308104911-55fb1c624d84 h1:hyAgCuG5nqTMDeUD8KZs7HSPs6KprPgPP8QmGV8nyvk= github.com/marcinbor85/gohex v0.0.0-20210308104911-55fb1c624d84/go.mod h1:Pb6XcsXyropB9LNHhnqaknG/vEwYztLkQzVCHv8sQ3M= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= +github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= -github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo= +github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k= github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= -github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= +github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= -github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= -github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= +github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= +github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= +github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= +github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= +github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= +github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= @@ -324,401 +190,75 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.bug.st/cleanup v1.0.0 h1:XVj1HZxkBXeq3gMT7ijWUpHyIC1j8XAoNSyQ06CskgA= go.bug.st/cleanup v1.0.0/go.mod h1:EqVmTg2IBk4znLbPD28xne3abjsJftMdqqJEjhn70bk= -go.bug.st/downloader/v2 v2.1.1 h1:nyqbUizo3E2IxCCm4YFac4FtSqqFpqWP+Aae5GCMuw4= -go.bug.st/downloader/v2 v2.1.1/go.mod h1:VZW2V1iGKV8rJL2ZEGIDzzBeKowYv34AedJz13RzVII= -go.bug.st/relaxed-semver v0.11.0 h1:ngzpUlBEZ5F9hJnMZP55LIFbgX3bCztBBufMhJViAsY= -go.bug.st/relaxed-semver v0.11.0/go.mod h1:rqPEm+790OTQlAdfSJSHWwpKOg3A8UyvAWMZxYkQivc= -go.bug.st/serial v1.6.1 h1:VSSWmUxlj1T/YlRo2J104Zv3wJFrjHIl/T3NeruWAHY= -go.bug.st/serial v1.6.1/go.mod h1:UABfsluHAiaNI+La2iESysd9Vetq7VRdpxvjx7CmmOE= -go.bug.st/testifyjson v1.1.1 h1:nHotIMK151LF3vYsU/b2RaoVaWCgrf2kvQeGNoZkGaA= -go.bug.st/testifyjson v1.1.1/go.mod h1:nZyy2icFbv3OE3zW3mGVOnC/GhWgb93LRu+29n2tJlI= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.bug.st/downloader/v2 v2.2.0 h1:Y0jSuDISNhrzePkrAWqz9xUC3xol9hqZo/+tz1D4EqY= +go.bug.st/downloader/v2 v2.2.0/go.mod h1:VZW2V1iGKV8rJL2ZEGIDzzBeKowYv34AedJz13RzVII= +go.bug.st/f v0.4.0 h1:Vstqb950nMA+PhAlRxUw8QL1ntHy/gXHNyyzjkQLJ10= +go.bug.st/f v0.4.0/go.mod h1:bMo23205ll7UW63KwO1ut5RdlJ9JK8RyEEr88CmOF5Y= +go.bug.st/relaxed-semver v0.15.0 h1:w37+SYQPxF53RQO7QZZuPIMaPouOifdaP0B1ktst2nA= +go.bug.st/relaxed-semver v0.15.0/go.mod h1:bwHiCtYuD2m716tBk2OnOBjelsbXw9el5EIuyxT/ksU= +go.bug.st/serial v1.6.2 h1:kn9LRX3sdm+WxWKufMlIRndwGfPWsH1/9lCWXQCasq8= +go.bug.st/serial v1.6.2/go.mod h1:UABfsluHAiaNI+La2iESysd9Vetq7VRdpxvjx7CmmOE= +go.bug.st/testifyjson v1.3.0 h1:DiO3LpK0RIgxvm66Pf8m7FhRVLEBFRmLkg+6vRzmk0g= +go.bug.st/testifyjson v1.3.0/go.mod h1:nZyy2icFbv3OE3zW3mGVOnC/GhWgb93LRu+29n2tJlI= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= +go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= +go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= +go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= +go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= +go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= +go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= +go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo= +golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a h1:a2MQQVoTo96JC9PMGtGBymLp7+/RzpFc2yX/9WfFg1c= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a h1:51aaUVRocpvUOSQKM6Q7VuoaktNIaMCLuhZB6DKksq4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a/go.mod h1:uRxBH1mhmO8PGhU89cMcHaXKZqO+OfakD8QQO0oYwlQ= +google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM= +google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/i18n/data/de.po b/i18n/data/de.po deleted file mode 100644 index 2b5ddd0af82..00000000000 --- a/i18n/data/de.po +++ /dev/null @@ -1,3644 +0,0 @@ -# -# Translators: -# Timo, 2021 -# Dan H, 2021 -# CLI team , 2022 -# Dee Gee, 2022 -# Ettore Atalan , 2022 -# C A, 2022 -# Luc Ohles, 2023 -# Jannis Lämmle, 2023 -# -msgid "" -msgstr "" -"Last-Translator: Jannis Lämmle, 2023\n" -"Language-Team: German (https://app.transifex.com/arduino-1/teams/108174/de/)\n" -"Language: de\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: version/version.go:59 -msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" -msgstr "%[1]s %[2]s Version: %[3]s Commit: %[4]s Datum: %[5]s" - -#: arduino/builder/internal/detector/detector.go:455 -msgid "%[1]s folder is no longer supported! See %[2]s for more information" -msgstr "" -"Der Ordner %[1]s wird nicht länger unterstützt! Siehe %[2]s für weitere " -"Informationen" - -#: arduino/builder/build_options_manager.go:142 -msgid "%[1]s invalid, rebuilding all" -msgstr "%[1]s ungültig, alles wird neu gebaut" - -#: internal/cli/lib/check_deps.go:111 -msgid "%[1]s is required but %[2]s is currently installed." -msgstr "%[1]s wird benötigt, aber %[2]s ist aktuell installiert." - -#: arduino/builder/builder.go:466 -msgid "%[1]s pattern is missing" -msgstr "Muster %[1]s fehlt" - -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, Nachricht: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, port: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, Ports: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, Protokollversion: %[2]d" - -#: arduino/resources/download.go:49 -msgid "%s already downloaded" -msgstr "%s bereits heruntergeladen" - -#: commands/upload/upload.go:690 -msgid "%s and %s cannot be used together" -msgstr "%s und %s können nicht gemeinsam verwendet werden" - -#: arduino/cores/packagemanager/install_uninstall.go:368 -msgid "%s installed" -msgstr "%s installiert" - -#: internal/cli/lib/check_deps.go:108 -msgid "%s is already installed." -msgstr "%s ist bereits installiert." - -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 -msgid "%s is not a directory" -msgstr "%s ist kein Verzeichnis" - -#: arduino/cores/packagemanager/install_uninstall.go:288 -msgid "%s is not managed by package manager" -msgstr "%s wird nicht vom Paketmanager verwaltet" - -#: internal/cli/lib/check_deps.go:105 -msgid "%s must be installed." -msgstr "%s muss installiert sein." - -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 -msgid "%s pattern is missing" -msgstr "Muster %s fehlt" - -#: arduino/errors.go:819 -msgid "'%s' has an invalid signature" -msgstr "'%s' hat eine ungültige Signatur" - -#: arduino/cores/packagemanager/package_manager.go:400 -msgid "" -"'build.core' and 'build.variant' refer to different platforms: %[1]s and " -"%[2]s" -msgstr "" -"'build.core' und 'build.variant' verweisen auf andere Plattformen: %[1]s and" -" %[2]s" - -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 -msgid "(hidden)" -msgstr "(versteckt)" - -#: arduino/builder/libraries.go:302 -msgid "(legacy)" -msgstr "(veraltet)" - -#: internal/cli/lib/install.go:81 -msgid "" -"--git-url and --zip-path are disabled by default, for more information see: " -"%v" -msgstr "" -"--git-url und --zip-path sind Standardmäßig deaktiviert. Für mehr " -"Informationen sehen Sie hier nach: %v" - -#: internal/cli/lib/install.go:83 -msgid "" -"--git-url and --zip-path flags allow installing untrusted files, use it at " -"your own risk." -msgstr "" -"--git-url und --zip-path flags erlauben das Installieren von nicht " -"vertrauenswürdigen Dateien. Benutzung auf eigene Gefahr." - -#: internal/cli/lib/install.go:86 -msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" -msgstr "" -"--git-url oder --zip-path können nicht mit --install-in-builtin-dir " -"verwendet werden" - -#: commands/sketch/new.go:66 -msgid ".ino file already exists" -msgstr ".ino-Datei existiert bereits" - -#: internal/cli/updater/updater.go:71 -msgid "A new release of Arduino CLI is available:" -msgstr "Eine neue Version von Arduino CLI ist verfügbar:" - -#: arduino/errors.go:300 -msgid "A programmer is required to upload" -msgstr "Zum Hochladen ist ein Programmer benötigt" - -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 -msgid "ARCH" -msgstr "ARCH" - -#: internal/cli/generatedocs/generatedocs.go:80 -msgid "ARDUINO COMMAND LINE MANUAL" -msgstr "Arduino CLI Handbuch" - -#: internal/cli/usage.go:32 -msgid "Additional help topics:" -msgstr "Weitere Hilfethemen:" - -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 -msgid "Adds one or more values to a setting." -msgstr "Fügt einen oder mehrere Werte zu einer Einstellung hinzu." - -#: internal/cli/usage.go:27 -msgid "Aliases:" -msgstr "Decknamen:" - -#: internal/cli/core/upgrade.go:72 -msgid "All the cores are already at the latest version" -msgstr "Alle Kerne sind bereits auf der neuesten Version" - -#: commands/lib/install.go:86 -msgid "Already installed %s" -msgstr "Bereits installiert %s" - -#: arduino/builder/internal/detector/detector.go:88 -msgid "Alternatives for %[1]s: %[2]s" -msgstr "Alternativen für %[1]s: %[2]s" - -#: arduino/builder/internal/preprocessor/ctags.go:69 -msgid "An error occurred adding prototypes" -msgstr "Beim Hinzufügen von Prototypen ist ein Fehler aufgetreten" - -#: arduino/builder/internal/detector/detector.go:209 -msgid "An error occurred detecting libraries" -msgstr "Ein Fehler trat beim erkennen der Bibliotheken auf" - -#: internal/cli/daemon/daemon.go:62 -msgid "Append debug logging to the specified file" -msgstr "Debug-Protokollierung an die angegebene Datei anhängen" - -#: internal/cli/lib/search.go:164 -msgid "Architecture: %s" -msgstr "Architektur: %s" - -#: commands/sketch/archive.go:71 -msgid "Archive already exists" -msgstr "Archiv existiert bereits" - -#: arduino/builder/core.go:141 -msgid "Archiving built core (caching) in: %[1]s" -msgstr "Gebauter Kern wird archiviert (zwischengespeichert) in: %[1]s" - -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 -msgid "Arduino CLI sketch commands." -msgstr "" - -#: internal/cli/cli.go:70 -msgid "Arduino CLI." -msgstr "Arduino CLI." - -#: internal/cli/cli.go:71 -msgid "Arduino Command Line Interface (arduino-cli)." -msgstr "Arduino Befehlszeilen-Schnittstelle (arduino-cli)." - -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 -msgid "Arduino board commands." -msgstr "Arduino-Platinen-Befehle." - -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 -msgid "Arduino cache commands." -msgstr "" - -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 -msgid "Arduino commands about libraries." -msgstr "Arduino Befehle für Bibliotheken." - -#: internal/cli/config/config.go:33 -msgid "Arduino configuration commands." -msgstr "Arduino-Konfigurationsbefehle." - -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 -msgid "Arduino core operations." -msgstr "Arduino-Kern-Operationen." - -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 -msgid "Arguments error: %v" -msgstr "Argumentefehler: %v" - -#: internal/cli/board/attach.go:35 -msgid "Attaches a sketch to a board." -msgstr "" - -#: internal/cli/lib/search.go:155 -msgid "Author: %s" -msgstr "Autor: %s" - -#: arduino/libraries/librariesmanager/install.go:78 -msgid "" -"Automatic library install can't be performed in this case, please manually " -"remove all duplicates and retry." -msgstr "" -"Automatische Installation der Bibliotheken kann in diesem Fall nicht " -"durchgeführt werden, bitte lösche alle Duplikate und versuche erneut." - -#: commands/lib/uninstall.go:57 -msgid "" -"Automatic library uninstall can't be performed in this case, please manually" -" remove them." -msgstr "" -"Automatische Desinstallation der Bibliotheken kann in diesem Fall nicht " -"durchgeführt werden, bitte entferne sie manuell." - -#: internal/cli/lib/list.go:136 -msgid "Available" -msgstr "Verfügbar" - -#: internal/cli/usage.go:29 -msgid "Available Commands:" -msgstr "Verfügbare Befehle:" - -#: internal/cli/upload/upload.go:75 -msgid "Binary file to upload." -msgstr "Binärdatei zum Hochladen." - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 -msgid "Board Name" -msgstr "Platinenname" - -#: internal/cli/board/details.go:138 -msgid "Board name:" -msgstr "Platinenname:" - -#: internal/cli/board/details.go:140 -msgid "Board version:" -msgstr "Platinenversion:" - -#: arduino/builder/sketch.go:245 -msgid "Bootloader file specified but missing: %[1]s" -msgstr "Bootloader-Datei angegeben, aber nicht vorhanden: %[1]s" - -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." -msgstr "" - -#: arduino/resources/index.go:64 -msgid "Can't create data directory %s" -msgstr "Datenverzeichnis %s kann nicht erstellt werden" - -#: arduino/errors.go:512 -msgid "Can't create sketch" -msgstr "Sketch kann nicht erstellt werden" - -#: commands/lib/download.go:63 commands/lib/download.go:66 -msgid "Can't download library" -msgstr "Bibliothek kann nicht heruntergeladen werden" - -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 -msgid "Can't find dependencies for platform %s" -msgstr "Abhängigkeiten für die Plattform %s können nicht gefunden werden" - -#: arduino/errors.go:538 -msgid "Can't open sketch" -msgstr "Sketch kann nicht geöffnet werden" - -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 -msgid "Can't update sketch" -msgstr "" - -#: internal/cli/arguments/arguments.go:36 -msgid "Can't use the following flags together: %s" -msgstr "" - -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "Konfigurationsdatei kann nicht geschrieben werden: %v" - -#: internal/cli/daemon/daemon.go:91 -msgid "Can't write debug log: %s" -msgstr "" - -#: commands/compile/compile.go:160 commands/compile/compile.go:163 -msgid "Cannot create build cache directory" -msgstr "" - -#: commands/compile/compile.go:148 -msgid "Cannot create build directory" -msgstr "" - -#: internal/cli/config/init.go:94 -msgid "Cannot create config file directory: %v" -msgstr "Verzeichnis der Konfigurationsdatei kann nicht erstellt werden: %v" - -#: internal/cli/config/init.go:109 -msgid "Cannot create config file: %v" -msgstr "Konfigurationsdatei kann nicht erstellt werden: %v" - -#: arduino/errors.go:782 -msgid "Cannot create temp dir" -msgstr "Temporärer Ordner kann nicht erstellt werden" - -#: arduino/errors.go:800 -msgid "Cannot create temp file" -msgstr "Temporäre Datei kann nicht erstellt werden" - -#: internal/cli/config/delete.go:53 -msgid "Cannot delete the key %[1]s: %[2]v" -msgstr "" - -#: commands/debug/debug.go:72 -msgid "Cannot execute debug tool" -msgstr "" - -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 -msgid "Cannot find absolute path: %v" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:141 -msgid "Cannot install platform" -msgstr "Plattform kann nicht installiert werden" - -#: arduino/cores/packagemanager/install_uninstall.go:346 -msgid "Cannot install tool %s" -msgstr "Werkzeug %s kann nicht installiert werden" - -#: commands/upload/upload.go:468 -msgid "Cannot perform port reset: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" -msgstr "" - -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "Datei %[1]s kann nicht geschrieben werden: %[2]v" - -#: internal/cli/lib/search.go:163 -msgid "Category: %s" -msgstr "Kategorie: %s" - -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 -msgid "Check dependencies status for the specified library." -msgstr "" - -#: arduino/resources/checksums.go:167 -msgid "Checksum differs from checksum in package.json" -msgstr "Prüfsumme unterscheidet sich von der Prüfsumme in package.json" - -#: internal/cli/board/details.go:188 -msgid "Checksum:" -msgstr "Prüfsumme:" - -#: internal/cli/cache/cache.go:33 -msgid "Clean caches." -msgstr "" - -#: internal/cli/cli.go:126 -msgid "Comma-separated list of additional URLs for the Boards Manager." -msgstr "" - -#: internal/cli/board/list.go:54 -msgid "" -"Command keeps running and prints list of connected boards whenever there is " -"a change." -msgstr "" -"Befehl läuft weiter und gibt die Liste der verbundenen Platinen aus, sobald " -"sich eine Änderung ergibt." - -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 -msgid "Compiled sketch not found in %s" -msgstr "" - -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 -msgid "Compiles Arduino sketches." -msgstr "Kompiliert Arduino-Sketche." - -#: arduino/builder/builder.go:400 -msgid "Compiling core..." -msgstr "Kern wird kompiliert ..." - -#: arduino/builder/builder.go:379 -msgid "Compiling libraries..." -msgstr "Bibliotheken werden kompiliert ..." - -#: arduino/builder/libraries.go:133 -msgid "Compiling library \"%[1]s\"" -msgstr "Bibliothek \"%[1]s\" wird kompiliert" - -#: arduino/builder/builder.go:363 -msgid "Compiling sketch..." -msgstr "Sketch wird kompiliert ..." - -#: internal/cli/config/init.go:88 -msgid "" -"Config file already exists, use --overwrite to discard the existing one." -msgstr "" - -#: internal/cli/config/init.go:112 -msgid "Config file written to: %s" -msgstr "Konfigurationsdatei geschrieben nach: %s" - -#: internal/cli/debug/debug.go:197 -msgid "Configuration options for %s" -msgstr "Konfigurationsoptionen für %s" - -#: internal/cli/monitor/monitor.go:70 -msgid "" -"Configure communication port settings. The format is " -"=[,=]..." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:175 -msgid "Configuring platform." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:356 -msgid "Configuring tool." -msgstr "" - -#: internal/cli/board/list.go:188 -msgid "Connected" -msgstr "Verbunden" - -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "Verbunden mit %s! Zum Beenden STRG-C drücken." - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -msgid "Core" -msgstr "Kern" - -#: arduino/httpclient/httpclient.go:112 -msgid "Could not connect via HTTP" -msgstr "Konnte nicht über HTTP verbinden" - -#: commands/instances.go:503 -msgid "Could not create index directory" -msgstr "Indexverzeichnis konnte nicht erstellt werden" - -#: arduino/builder/core.go:41 -msgid "Couldn't deeply cache core build: %[1]s" -msgstr "" - -#: arduino/builder/sizer.go:153 -msgid "Couldn't determine program size" -msgstr "Programmgröße konnte nicht ermittelt werden" - -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 -msgid "Couldn't get current working directory: %v" -msgstr "" - -#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 -msgid "Create a new Sketch" -msgstr "Einen neuen Sketch erstellen" - -#: internal/cli/compile/compile.go:96 -msgid "Create and print a profile configuration from the build." -msgstr "" - -#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 -msgid "Creates a zip file containing all sketch files." -msgstr "Erstellt eine ZIP-Datei, die alle Sketch-Dateien enthält." - -#: internal/cli/config/init.go:43 -msgid "" -"Creates or updates the configuration file in the data directory or custom " -"directory with the current configuration settings." -msgstr "" - -#: internal/cli/compile/compile.go:308 -msgid "" -"Currently, Build Profiles only support libraries available through Arduino " -"Library Manager." -msgstr "" - -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "" - -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 -msgid "DEPRECATED" -msgstr "VERALTET" - -#: internal/cli/daemon/daemon.go:174 -msgid "Daemon is now listening on %s:%s" -msgstr "Daemon überwacht jetzt %s: %s" - -#: internal/cli/debug/debug.go:51 -msgid "Debug Arduino sketches." -msgstr "Arduino-Sketche debuggen" - -#: internal/cli/debug/debug.go:52 -msgid "" -"Debug Arduino sketches. (this command opens an interactive gdb session)" -msgstr "" - -#: internal/cli/debug/debug.go:61 -msgid "Debug interpreter e.g.: %s" -msgstr "Debug-Interpreter z.B.: %s" - -#: commands/debug/debug_info.go:151 -msgid "Debugging not supported for board %s" -msgstr "Debugging für Board %s nicht unterstützt" - -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "Debugging unterstützt:" - -#: internal/cli/monitor/monitor.go:232 -msgid "Default" -msgstr "Standard" - -#: internal/cli/board/attach.go:108 -msgid "Default FQBN set to" -msgstr "Standard-FQBN gesetzt auf" - -#: internal/cli/board/attach.go:107 -msgid "Default port set to" -msgstr "Standard-Port gesetzt auf" - -#: internal/cli/cache/clean.go:30 -msgid "Delete Boards/Library Manager download cache." -msgstr "" - -#: internal/cli/cache/clean.go:31 -msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." -msgstr "" - -#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 -msgid "Deletes a settings key and all its sub keys." -msgstr "" -"Löscht einen Einstellungsschlüssel und alle zugehörigen Unterschlüssel." - -#: internal/cli/lib/search.go:171 -msgid "Dependencies: %s" -msgstr "Abhängigkeiten: %s" - -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 -msgid "Description" -msgstr "Beschreibung" - -#: arduino/builder/builder.go:289 -msgid "Detecting libraries used..." -msgstr "Verwendete Bibliotheken erkennen ..." - -#: internal/cli/board/list.go:44 -msgid "" -"Detects and displays a list of boards connected to the current computer." -msgstr "" -"Erkennt und zeigt eine Liste von Platinen, die mit dem Computer verbunden " -"sind." - -#: internal/cli/debug/debug.go:62 -msgid "Directory containing binaries for debug." -msgstr "" - -#: internal/cli/upload/upload.go:74 -msgid "Directory containing binaries to upload." -msgstr "Verzeichnis, welche die Binärdateien zum Hochladen enthält." - -#: internal/cli/generatedocs/generatedocs.go:45 -msgid "" -"Directory where to save generated files. Default is './docs', the directory " -"must exist." -msgstr "" - -#: internal/cli/completion/completion.go:44 -msgid "Disable completion description for shells that support it" -msgstr "" - -#: internal/cli/board/list.go:189 -msgid "Disconnected" -msgstr "Verbindung getrennt" - -#: internal/cli/daemon/daemon.go:63 -msgid "Display only the provided gRPC calls" -msgstr "Nur die bereitgestellten gRPC-Aufrufe anzeigen" - -#: internal/cli/lib/install.go:61 -msgid "Do not install dependencies." -msgstr "Abhängigkeiten nicht installieren." - -#: internal/cli/lib/install.go:62 -msgid "Do not overwrite already installed libraries." -msgstr "Bereits installierte Bibliotheken nicht überschreiben." - -#: internal/cli/core/install.go:55 -msgid "Do not overwrite already installed platforms." -msgstr "Bereits installierte Plattformen nicht überschreiben." - -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 -msgid "Do not perform the actual upload, just log out actions" -msgstr "" -"Den eigentlichen Hochladevorgang nicht durchführen, sondern nur die " -"Abmeldeaktionen" - -#: internal/cli/daemon/daemon.go:60 -msgid "Do not terminate daemon process if the parent process dies" -msgstr "" - -#: commands/lib/download.go:60 -msgid "Downloading %s" -msgstr "%s wird heruntergeladen" - -#: arduino/resources/index.go:136 -msgid "Downloading index signature: %s" -msgstr "Indexsignatur wird heruntergeladen: %s" - -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 -msgid "Downloading index: %s" -msgstr "Index wird heruntergeladen: %s" - -#: commands/instances.go:439 -msgid "Downloading library %s" -msgstr "Bibliothek %s wird heruntergeladen" - -#: commands/instances.go:136 -msgid "Downloading missing tool %s" -msgstr "Fehlendes Werkzeug %s wird heruntergeladen" - -#: arduino/cores/packagemanager/install_uninstall.go:94 -msgid "Downloading packages" -msgstr "Pakete werden heruntergeladen" - -#: arduino/cores/packagemanager/profiles.go:98 -msgid "Downloading platform %s" -msgstr "Plattform %s wird heruntergeladen" - -#: arduino/cores/packagemanager/profiles.go:178 -msgid "Downloading tool %s" -msgstr "Werkzeug %s wird heruntergeladen" - -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 -msgid "Downloads one or more cores and corresponding tool dependencies." -msgstr "" -"Lädt einen oder mehrere Kerne und die entsprechenden Werkzeugabhängigkeiten " -"herunter." - -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 -msgid "Downloads one or more libraries without installing them." -msgstr "" -"Lädt eine oder mehrere Bibliotheken herunter, ohne sie zu installieren." - -#: internal/cli/daemon/daemon.go:61 -msgid "Enable debug logging of gRPC calls" -msgstr "Debug-Protokollierung von gRPC-Aufrufen aktivieren" - -#: internal/cli/lib/install.go:64 -msgid "Enter a path to zip file" -msgstr "Geben Sie einen Pfad zur ZIP-Datei an" - -#: internal/cli/lib/install.go:63 -msgid "Enter git url for libraries hosted on repositories" -msgstr "" - -#: commands/sketch/archive.go:107 -msgid "Error adding file to sketch archive" -msgstr "Fehler beim Hinzufügen einer Datei zum Sketch-Archiv" - -#: arduino/builder/core.go:147 -msgid "Error archiving built core (caching) in %[1]s: %[2]s" -msgstr "" - -#: internal/cli/sketch/archive.go:81 -msgid "Error archiving: %v" -msgstr "Fehler beim Archivieren: %v" - -#: commands/sketch/archive.go:95 -msgid "Error calculating relative file path" -msgstr "Fehler beim Berechnen des relativen Dateipfads" - -#: internal/cli/cache/clean.go:45 -msgid "Error cleaning caches: %v" -msgstr "" - -#: internal/cli/compile/compile.go:217 -msgid "Error converting path to absolute: %v" -msgstr "" - -#: commands/compile/compile.go:335 -msgid "Error copying output file %s" -msgstr "Fehler beim Kopieren der Ausgabedatei %s" - -#: internal/cli/instance/instance.go:43 -msgid "Error creating instance: %v" -msgstr "Fehler beim Erstellen der Instanz: %v" - -#: commands/compile/compile.go:319 -msgid "Error creating output dir" -msgstr "Fehler beim Erstellen des Ausgabeverzeichnisses" - -#: commands/sketch/archive.go:83 -msgid "Error creating sketch archive" -msgstr "Fehler beim Erstellen des Sketch-Archivs" - -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 -msgid "Error creating sketch: %v" -msgstr "Fehler beim Erstellen des Sketches: %v" - -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 -msgid "Error detecting boards: %v" -msgstr "Fehler beim Erkennen von Platinen: %v" - -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 -msgid "Error downloading %[1]s: %[2]v" -msgstr "Fehler beim Herunterladen von %[1]s: %[2]v" - -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 -msgid "Error downloading %s" -msgstr "Fehler beim Herunterladen von %s" - -#: arduino/resources/index.go:82 commands/instances.go:603 -msgid "Error downloading index '%s'" -msgstr "" - -#: arduino/resources/index.go:137 -msgid "Error downloading index signature '%s'" -msgstr "" - -#: commands/instances.go:451 -msgid "Error downloading library %s" -msgstr "Fehler beim Herunterladen der Bibliothek %s" - -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 -msgid "Error downloading platform %s" -msgstr "Fehler beim Herunterladen der Plattform %s" - -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 -msgid "Error downloading tool %s" -msgstr "Fehler beim Herunterladen des Werkzeugs %s" - -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 -msgid "Error during Debug: %v" -msgstr "" - -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "Fehler während FQBN-Bestimmung: %v" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 -msgid "Error during JSON encoding of the output: %v" -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 -msgid "Error during Upload: %v" -msgstr "Fehler während dem Hochladen: %v" - -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "Fehler während der YAML-Kodierung der Ausgabe: %v" - -#: internal/cli/compile/compile.go:354 -msgid "Error during build: %v" -msgstr "" - -#: internal/cli/core/install.go:80 -msgid "Error during install: %v" -msgstr "Fehler während dem Installieren: %v" - -#: internal/cli/core/uninstall.go:73 -msgid "Error during uninstall: %v" -msgstr "Fehler während dem Deinstallieren: %v" - -#: internal/cli/core/upgrade.go:120 -msgid "Error during upgrade: %v" -msgstr "" - -#: arduino/resources/index.go:104 arduino/resources/index.go:123 -msgid "Error extracting %s" -msgstr "Fehler beim Extrahieren von %s" - -#: commands/upload/upload.go:373 -msgid "Error finding build artifacts" -msgstr "" - -#: internal/cli/debug/debug.go:96 -msgid "Error getting Debug info: %v" -msgstr "" - -#: commands/sketch/archive.go:59 -msgid "Error getting absolute path of sketch archive" -msgstr "Fehler beim Abrufen des absoluten Pfads des Sketch-Archivs" - -#: internal/cli/board/details.go:73 -msgid "Error getting board details: %v" -msgstr "Fehler beim Abrufen von Platinendetails: %v" - -#: arduino/builder/internal/compilation/database.go:81 -msgid "Error getting current directory for compilation database: %s" -msgstr "" - -#: commands/compile/compile.go:257 commands/lib/list.go:108 -msgid "Error getting information for library %s" -msgstr "Fehler beim Abrufen von Informationen für die Bibliothek %s" - -#: internal/cli/lib/examples.go:72 -msgid "Error getting libraries info: %v" -msgstr "Fehler beim Abrufen von Bibliotheksinformationen: %v" - -#: internal/cli/arguments/fqbn.go:90 -msgid "Error getting port metadata: %v" -msgstr "Fehler beim Abrufen von Port-Metadaten: %v" - -#: internal/cli/monitor/monitor.go:98 -msgid "Error getting port settings details: %s" -msgstr "Fehler beim Abrufen von Details zu Port-Einstellungen: %s" - -#: internal/cli/upload/upload.go:169 -msgid "Error getting user input" -msgstr "" - -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 -msgid "Error initializing instance: %v" -msgstr "Fehler beim Initialisieren der Instanz: %v" - -#: internal/cli/lib/install.go:145 -msgid "Error installing %s: %v" -msgstr "Fehler beim Installieren von %s: %v" - -#: internal/cli/lib/install.go:119 -msgid "Error installing Git Library: %v" -msgstr "Fehler beim Installieren der Git-Bibliothek: %v" - -#: internal/cli/lib/install.go:98 -msgid "Error installing Zip Library: %v" -msgstr "Fehler beim Installieren der Zip-Bibliothek: %v" - -#: commands/instances.go:461 -msgid "Error installing library %s" -msgstr "Fehler beim Installieren der Bibliothek %s" - -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 -msgid "Error installing platform %s" -msgstr "Fehler beim Installieren der Plattform %s" - -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 -msgid "Error installing tool %s" -msgstr "Fehler beim Installieren des Werkzeugs %s" - -#: internal/cli/board/listall.go:63 -msgid "Error listing boards: %v" -msgstr "Fehler beim Auflisten von Platinen: %v" - -#: internal/cli/lib/list.go:89 -msgid "Error listing libraries: %v" -msgstr "" - -#: internal/cli/core/list.go:69 -msgid "Error listing platforms: %v" -msgstr "Fehler beim Auflisten von Plattformen: %v" - -#: arduino/errors.go:425 -msgid "Error loading hardware platform" -msgstr "Fehler beim Laden der Hardware-Plattform" - -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 -msgid "Error loading index %s" -msgstr "Fehler beim Laden des Index %s" - -#: arduino/resources/index.go:98 -msgid "Error opening %s" -msgstr "Fehler beim Öffnen von %s" - -#: internal/cli/daemon/daemon.go:85 -msgid "Error opening debug logging file: %s" -msgstr "Fehler beim Öffnen der Debug-Protokollierungsdatei: %s" - -#: internal/cli/compile/compile.go:190 -msgid "Error opening source code overrides data file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:203 -msgid "Error parsing --show-properties flag: %v" -msgstr "" - -#: commands/compile/compile.go:328 -msgid "Error reading build directory" -msgstr "" - -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "Fehler beim Lesen der Konfigurationsdatei: %v" - -#: commands/sketch/archive.go:77 -msgid "Error reading sketch files" -msgstr "Fehler beim Lesen von Sketch-Dateien" - -#: internal/cli/lib/check_deps.go:65 -msgid "Error resolving dependencies for %[1]s: %[2]s" -msgstr "Fehler beim Auflösen von Abhängigkeiten für %[1]s: %[2]s" - -#: internal/cli/core/upgrade.go:68 -msgid "Error retrieving core list: %v" -msgstr "Fehler beim Abrufen der Kernliste: %v" - -#: arduino/cores/packagemanager/install_uninstall.go:156 -msgid "Error rolling-back changes: %s" -msgstr "" - -#: arduino/resources/index.go:164 arduino/resources/index.go:176 -msgid "Error saving downloaded index" -msgstr "Fehler beim Speichern des heruntergeladenen Index" - -#: arduino/resources/index.go:171 arduino/resources/index.go:180 -msgid "Error saving downloaded index signature" -msgstr "Fehler beim Speichern der heruntergeladenen Indexsignatur" - -#: internal/cli/board/search.go:60 -msgid "Error searching boards: %v" -msgstr "Fehler bei der Suche nach Platinen: %v" - -#: internal/cli/lib/search.go:79 -msgid "Error searching for Libraries: %v" -msgstr "" - -#: internal/cli/core/search.go:80 -msgid "Error searching for platforms: %v" -msgstr "Fehler bei der Suche nach Plattformen: %v" - -#: arduino/builder/internal/compilation/database.go:66 -msgid "Error serializing compilation database: %s" -msgstr "Fehler bei der Serialisierung der Kompilierungsdatenbank: %s" - -#: internal/cli/board/list.go:82 -msgid "Error starting discovery: %v" -msgstr "" - -#: internal/cli/lib/uninstall.go:63 -msgid "Error uninstalling %[1]s: %[2]v" -msgstr "Fehler beim Deinstallieren von %[1]s: %[2]v" - -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 -msgid "Error updating library index: %v" -msgstr "Fehler beim Aktualisieren des Bibliotheksindex: %v" - -#: internal/cli/lib/upgrade.go:71 -msgid "Error upgrading libraries" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:151 -msgid "Error upgrading platform: %s" -msgstr "" - -#: arduino/resources/index.go:146 arduino/resources/index.go:152 -msgid "Error verifying signature" -msgstr "Fehler beim Verifizieren der Signatur" - -#: arduino/builder/internal/detector/detector.go:365 -msgid "Error while detecting libraries included by %[1]s" -msgstr "" - -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 -msgid "Error while determining sketch size: %s" -msgstr "Fehler während der Bestimmung der Sketch-Größe: %s" - -#: arduino/builder/internal/compilation/database.go:69 -msgid "Error writing compilation database: %s" -msgstr "Fehler beim Schreiben der Kompilierungsdatenbank: %s" - -#: internal/cli/completion/completion.go:56 -msgid "Error: command description is not supported by %v" -msgstr "Fehler: Befehlsbeschreibung wird nicht unterstützt von %v" - -#: internal/cli/compile/compile.go:196 -msgid "Error: invalid source code overrides data file: %v" -msgstr "" - -#: internal/cli/board/list.go:96 -msgid "Event" -msgstr "Ereignis" - -#: internal/cli/lib/examples.go:120 -msgid "Examples for library %s" -msgstr "Beispiele für Bibliothek %s" - -#: internal/cli/usage.go:28 -msgid "Examples:" -msgstr "Beispiele:" - -#: internal/cli/debug/debug.go:180 -msgid "Executable to debug" -msgstr "" - -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 -msgid "Expected compiled sketch in directory %s, but is a file instead" -msgstr "" - -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 -msgid "FQBN" -msgstr "FQBN" - -#: internal/cli/board/details.go:139 -msgid "FQBN:" -msgstr "FQBN:" - -#: commands/upload/upload.go:502 -msgid "Failed chip erase" -msgstr "" - -#: commands/upload/upload.go:509 -msgid "Failed programming" -msgstr "Fehlgeschlagene Programmierung" - -#: commands/upload/upload.go:505 -msgid "Failed to burn bootloader" -msgstr "" - -#: commands/instances.go:166 -msgid "Failed to create data directory" -msgstr "" - -#: commands/instances.go:156 -msgid "Failed to create downloads directory" -msgstr "" - -#: internal/cli/daemon/daemon.go:129 -msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." -msgstr "" -"Fehler beim Überwachen von TCP-Port: %[1]s. %[2]s ist ein ungültiger Port." - -#: internal/cli/daemon/daemon.go:124 -msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." -msgstr "" -"Fehler beim Überwachen von TCP-Port: %[1]s. %[2]s ist ein unbekannter Name." - -#: internal/cli/daemon/daemon.go:136 -msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" -msgstr "" -"Fehler beim Überwachen von TCP-Port: %[1]s. Unerwarteter Fehler: %[2]v" - -#: internal/cli/daemon/daemon.go:134 -msgid "Failed to listen on TCP port: %s. Address already in use." -msgstr "" -"Fehler beim Überwachen von TCP-Port: %s. Adresse wird bereits benutzt." - -#: commands/upload/upload.go:513 -msgid "Failed uploading" -msgstr "Fehlgeschlagenes Hochladen" - -#: internal/cli/board/details.go:186 -msgid "File:" -msgstr "Datei:" - -#: commands/compile/compile.go:131 -msgid "" -"Firmware encryption/signing requires all the following properties to be " -"defined: %s" -msgstr "" - -#: commands/daemon/debug.go:40 -msgid "First message must contain debug request, not data" -msgstr "" - -#: internal/cli/arguments/arguments.go:47 -msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" -msgstr "" - -#: internal/cli/usage.go:30 -msgid "Flags:" -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:37 -msgid "" -"Force run of post-install scripts (if the CLI is not running interactively)." -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:39 -msgid "" -"Force run of pre-uninstall scripts (if the CLI is not running " -"interactively)." -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:38 -msgid "" -"Force skip of post-install scripts (if the CLI is running interactively)." -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:40 -msgid "" -"Force skip of pre-uninstall scripts (if the CLI is running interactively)." -msgstr "" - -#: arduino/errors.go:840 -msgid "Found %d platforms matching \"%s\": %s" -msgstr "" - -#: internal/cli/arguments/fqbn.go:37 -msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" -msgstr "Vollständig qualifizierter Platinenname, z.B.: arduino:avr:uno" - -#: commands/debug/debug.go:183 -msgid "GDB server '%s' is not supported" -msgstr "GDB-Server '%s' wird nicht unterstützt" - -#: internal/cli/generatedocs/generatedocs.go:38 -#: internal/cli/generatedocs/generatedocs.go:39 -msgid "Generates bash completion and command manpages." -msgstr "" - -#: internal/cli/completion/completion.go:38 -msgid "Generates completion scripts" -msgstr "" - -#: internal/cli/completion/completion.go:39 -msgid "Generates completion scripts for various shells" -msgstr "" - -#: arduino/builder/builder.go:308 -msgid "Generating function prototypes..." -msgstr "Funktionsprototypen werden generiert ..." - -#: internal/cli/usage.go:31 -msgid "Global Flags:" -msgstr "" - -#: arduino/builder/sizer.go:163 -msgid "" -"Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " -"bytes for local variables. Maximum is %[2]s bytes." -msgstr "" -"Globale Variablen verwenden %[1]s Bytes (%[3]s%%) des dynamischen Speichers," -" %[4]s Bytes für lokale Variablen verbleiben. Das Maximum sind %[2]s Bytes." - -#: arduino/builder/sizer.go:169 -msgid "Global variables use %[1]s bytes of dynamic memory." -msgstr "Globale Variablen verwenden %[1]s Bytes des dynamischen Speichers." - -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 -msgid "ID" -msgstr "ID" - -#: internal/cli/board/details.go:110 -msgid "Id" -msgstr "Id" - -#: internal/cli/board/details.go:153 -msgid "Identification properties:" -msgstr "Identifikationseigenschaften:" - -#: internal/cli/compile/compile.go:131 -msgid "If set built binaries will be exported to the sketch folder." -msgstr "" - -#: internal/cli/core/list.go:45 -msgid "" -"If set return all installable and installed cores, including manually " -"installed." -msgstr "" - -#: internal/cli/lib/list.go:53 -msgid "Include built-in libraries (from platforms and IDE) in listing." -msgstr "" -"Eingebaute Bibliotheken (von Plattformen und IDE) in die Auflistung " -"einbeziehen." - -#: internal/cli/sketch/archive.go:49 -msgid "Includes %s directory in the archive." -msgstr "" - -#: internal/cli/lib/install.go:65 -msgid "Install libraries in the IDE-Builtin directory" -msgstr "" - -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 -msgid "Installed" -msgstr "Installiert" - -#: commands/lib/install.go:140 -msgid "Installed %s" -msgstr "%s installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 -msgid "Installing %s" -msgstr "%s wird installiert" - -#: commands/instances.go:459 -msgid "Installing library %s" -msgstr "Bibliothek %s wird installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 -msgid "Installing platform %s" -msgstr "Plattform %s wird installiert" - -#: arduino/cores/packagemanager/profiles.go:186 -msgid "Installing tool %s" -msgstr "Werkzeug %s wird installiert" - -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 -msgid "Installs one or more cores and corresponding tool dependencies." -msgstr "" -"Installiert einen oder mehrere Kerne und die entsprechenden " -"Werkzeugabhängigkeiten." - -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 -msgid "Installs one or more specified libraries into the system." -msgstr "Installiert eine oder mehrere angegebene Bibliotheken in das System." - -#: arduino/builder/internal/detector/detector.go:391 -msgid "Internal error in cache" -msgstr "" - -#: arduino/errors.go:378 -msgid "Invalid '%[1]s' property: %[2]s" -msgstr "Ungültige '%[1]s' Eigenschaft: %[2]s" - -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 -msgid "Invalid FQBN" -msgstr "Ungültiger FQBN" - -#: internal/cli/daemon/daemon.go:147 -msgid "Invalid TCP address: port is missing" -msgstr "Ungültige TCP-Adresse: Port fehlt" - -#: arduino/errors.go:80 -msgid "Invalid URL" -msgstr "Ungültige URL" - -#: commands/instances.go:274 -msgid "Invalid additional URL: %v" -msgstr "" - -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" -msgstr "Ungültiges Archiv: Datei %{1}s nicht in Archiv %{2}s gefunden" - -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 -msgid "Invalid argument passed: %v" -msgstr "Ungültiges Argument übergeben: %v" - -#: commands/compile/compile.go:205 -msgid "Invalid build properties" -msgstr "" - -#: arduino/builder/sizer.go:249 -msgid "Invalid data size regexp: %s" -msgstr "" - -#: arduino/builder/sizer.go:255 -msgid "Invalid eeprom size regexp: %s" -msgstr "" - -#: arduino/errors.go:48 -msgid "Invalid instance" -msgstr "Ungültige Instanz" - -#: internal/cli/core/upgrade.go:99 -msgid "Invalid item %s" -msgstr "Ungültiges Element %s" - -#: arduino/errors.go:98 -msgid "Invalid library" -msgstr "Ungültige Bibliothek" - -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" -msgstr "" - -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "Ungültige Option für --log-level: %s" - -#: internal/cli/cli.go:229 -msgid "Invalid output format: %s" -msgstr "Ungültiges Ausgabeformat: %s" - -#: commands/instances.go:555 -msgid "Invalid package index in %s" -msgstr "Ungültiger Paketindex in %s" - -#: internal/cli/core/uninstall.go:62 -msgid "Invalid parameter %s: version not allowed" -msgstr "Ungültiger Parameter %s: Version nicht erlaubt" - -#: commands/board/list.go:79 -msgid "Invalid pid value: '%s'" -msgstr "" - -#: arduino/errors.go:222 -msgid "Invalid profile" -msgstr "Ungültiges Profil" - -#: commands/monitor/monitor.go:145 -msgid "Invalid recipe in platform.txt" -msgstr "" - -#: arduino/builder/sizer.go:239 -msgid "Invalid size regexp: %s" -msgstr "" - -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "Ungültige Zeitbeschränkung: %s" - -#: arduino/errors.go:116 -msgid "Invalid version" -msgstr "Ungültige Version" - -#: commands/board/list.go:76 -msgid "Invalid vid value: '%s'" -msgstr "" - -#: internal/cli/compile/compile.go:126 -msgid "" -"Just produce the compilation database, without actually compiling. All build" -" commands are skipped except pre* hooks." -msgstr "" - -#: internal/cli/lib/list.go:38 -msgid "LIBNAME" -msgstr "" - -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 -msgid "LIBRARY" -msgstr "BIBLIOTHEK" - -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 -msgid "LIBRARY_NAME" -msgstr "BIBLIOTHEKSNAME" - -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 -msgid "Latest" -msgstr "Neueste" - -#: arduino/builder/libraries.go:91 -msgid "Library %[1]s has been declared precompiled:" -msgstr "Bibliothek %[1]s wurde als vorkompiliert angegeben:" - -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 -msgid "" -"Library %[1]s is already installed, but with a different version: %[2]s" -msgstr "" -"Bibliothek %[1]s ist bereits installiert, aber mit einer anderen Version: " -"%[2]s" - -#: commands/lib/upgrade.go:59 -msgid "Library %s is already at the latest version" -msgstr "Bibliothek %s ist bereits die neueste Version" - -#: commands/lib/uninstall.go:39 -msgid "Library %s is not installed" -msgstr "Bibliothek %s ist nicht installiert" - -#: commands/instances.go:445 -msgid "Library %s not found" -msgstr "Bibliothek %s nicht gefunden" - -#: arduino/errors.go:446 -msgid "Library '%s' not found" -msgstr "Bibliothek '%s' nicht gefunden" - -#: arduino/builder/internal/detector/detector.go:464 -msgid "" -"Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." -msgstr "" - -#: arduino/errors.go:575 -msgid "Library install failed" -msgstr "Installation der Bibliothek fehlgeschlagen" - -#: commands/lib/install.go:150 commands/lib/install.go:160 -msgid "Library installed" -msgstr "Bibliothek installiert" - -#: internal/cli/lib/search.go:161 -msgid "License: %s" -msgstr "Lizenz: %s" - -#: arduino/builder/builder.go:416 -msgid "Linking everything together..." -msgstr "" - -#: internal/cli/board/listall.go:39 -msgid "" -"List all boards that have the support platform installed. You can search\n" -"for a specific board if you specify the board name" -msgstr "" - -#: internal/cli/board/listall.go:38 -msgid "List all known boards and their corresponding FQBN." -msgstr "Liste alle bekannte Boards und ihre respektive FQBNs auf" - -#: internal/cli/board/list.go:43 -msgid "List connected boards." -msgstr "Verbundene Platinen auflisten." - -#: internal/cli/arguments/fqbn.go:42 -msgid "" -"List of board options separated by commas. Or can be used multiple times for" -" multiple options." -msgstr "" - -#: internal/cli/compile/compile.go:104 -msgid "" -"List of custom build properties separated by commas. Or can be used multiple" -" times for multiple properties." -msgstr "" - -#: internal/cli/lib/list.go:55 -msgid "List updatable libraries." -msgstr "Aktualisierbare Bibliotheken auflisten." - -#: internal/cli/core/list.go:44 -msgid "List updatable platforms." -msgstr "Aktualisierbare Plattformen auflisten." - -#: internal/cli/board/board.go:33 -msgid "Lists all connected boards." -msgstr "Listet alle verbundenen Platinen auf." - -#: internal/cli/outdated/outdated.go:41 -msgid "Lists cores and libraries that can be upgraded" -msgstr "" - -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 -msgid "Loading index file: %v" -msgstr "Indexdatei wird geladen: %v" - -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 -msgid "Location" -msgstr "Ort" - -#: arduino/builder/sizer.go:204 -msgid "Low memory available, stability problems may occur." -msgstr "" -"Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten." - -#: internal/cli/lib/search.go:156 -msgid "Maintainer: %s" -msgstr "" - -#: internal/cli/arguments/discovery_timeout.go:31 -msgid "Max time to wait for port discovery, e.g.: 30s, 1m" -msgstr "" - -#: internal/cli/cli.go:110 -msgid "" -"Messages with this level and above will be logged. Valid levels are: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:459 -msgid "Missing '%[1]s' from library in %[2]s" -msgstr "'%[1]s' aus der Bibliothek in %[2]s fehlt" - -#: arduino/errors.go:171 -msgid "Missing FQBN (Fully Qualified Board Name)" -msgstr "Fehlender FQBN (Fully Qualified Board Name)" - -#: arduino/errors.go:262 -msgid "Missing port" -msgstr "Fehlender Port" - -#: arduino/errors.go:238 -msgid "Missing port address" -msgstr "Fehlende Port-Adresse" - -#: arduino/errors.go:250 -msgid "Missing port protocol" -msgstr "Fehlendes Port-Protokoll" - -#: arduino/errors.go:288 -msgid "Missing programmer" -msgstr "" - -#: internal/cli/upload/upload.go:162 -msgid "Missing required upload field: %s" -msgstr "" - -#: arduino/builder/sizer.go:243 -msgid "Missing size regexp" -msgstr "" - -#: arduino/errors.go:498 -msgid "Missing sketch path" -msgstr "" - -#: arduino/errors.go:359 -msgid "Monitor '%s' not found" -msgstr "" - -#: internal/cli/monitor/monitor.go:141 -msgid "Monitor port settings:" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:153 -msgid "Multiple libraries were found for \"%[1]s\"" -msgstr "Mehrere Bibliotheken wurden für \"%[1]s\" gefunden" - -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 -msgid "Name" -msgstr "Name" - -#: internal/cli/lib/search.go:135 -msgid "Name: \"%s\"" -msgstr "" - -#: internal/cli/upload/upload.go:221 -msgid "New upload port: %[1]s (%[2]s)" -msgstr "" - -#: internal/cli/board/list.go:122 -msgid "No boards found." -msgstr "Keine Platinen gefunden." - -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "Kein Standard-Port oder Standard-FQBN konfiguriert" - -#: internal/cli/lib/examples.go:105 -msgid "No libraries found." -msgstr "Keine Bibliotheken gefunden." - -#: internal/cli/lib/list.go:128 -msgid "No libraries installed." -msgstr "Keine Bibliotheken installiert." - -#: internal/cli/lib/search.go:124 -msgid "No libraries matching your search." -msgstr "Keine Bibliotheken stimmen mit Ihrer Suche überein." - -#: internal/cli/lib/search.go:130 -msgid "" -"No libraries matching your search.\n" -"Did you mean...\n" -msgstr "" -"Keine Bibliotheken stimmen mit Ihrer Suche überein.\n" -"Meinten Sie ...\n" - -#: internal/cli/lib/list.go:126 -msgid "No libraries update is available." -msgstr "" - -#: arduino/errors.go:276 -msgid "No monitor available for the port protocol %s" -msgstr "" - -#: internal/cli/outdated/outdated.go:77 -msgid "No outdated platforms or libraries found." -msgstr "" - -#: internal/cli/core/list.go:86 -msgid "No platforms installed." -msgstr "" - -#: internal/cli/core/search.go:110 -msgid "No platforms matching your search." -msgstr "" - -#: commands/upload/upload.go:458 -msgid "No upload port found, using %s as fallback" -msgstr "" - -#: arduino/errors.go:465 -msgid "No valid dependencies solution found" -msgstr "" - -#: arduino/builder/sizer.go:194 -msgid "Not enough memory; see %[1]s for tips on reducing your footprint." -msgstr "" -"Nicht genug Arbeitsspeicher; unter %[1]s finden sich Hinweise, um die Größe " -"zu verringern." - -#: arduino/builder/internal/detector/detector.go:156 -msgid "Not used: %[1]s" -msgstr "Nicht benutzt: %[1]s" - -#: internal/cli/board/details.go:185 -msgid "OS:" -msgstr "BS:" - -#: internal/cli/board/details.go:147 -msgid "Official Arduino board:" -msgstr "Offizielles Arduino-Board:" - -#: internal/cli/lib/search.go:50 -msgid "" -"Omit library details far all versions except the latest (produce a more " -"compact JSON output)." -msgstr "" - -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 -msgid "Open a communication port with a board." -msgstr "Einen Kommunikations-Port mit einer Platine öffnen." - -#: internal/cli/board/details.go:197 -msgid "Option:" -msgstr "Option:" - -#: internal/cli/compile/compile.go:114 -msgid "" -"Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." -msgstr "" - -#: internal/cli/compile/compile.go:127 -msgid "Optional, cleanup the build folder and do not use any cached build." -msgstr "" - -#: internal/cli/compile/compile.go:124 -msgid "" -"Optional, optimize compile output for debugging, rather than for release." -msgstr "" - -#: internal/cli/compile/compile.go:116 -msgid "Optional, suppresses almost every output." -msgstr "" - -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 -msgid "Optional, turns on verbose mode." -msgstr "" - -#: internal/cli/compile/compile.go:132 -msgid "" -"Optional. Path to a .json file that contains a set of replacements of the " -"sketch source code." -msgstr "" - -#: internal/cli/compile/compile.go:106 -msgid "" -"Override a build property with a custom value. Can be used multiple times " -"for multiple properties." -msgstr "" - -#: internal/cli/config/init.go:57 -msgid "Overwrite existing config file." -msgstr "" - -#: internal/cli/sketch/archive.go:50 -msgid "Overwrites an already existing archive" -msgstr "" - -#: internal/cli/sketch/new.go:44 -msgid "Overwrites an existing .ino sketch." -msgstr "" - -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 -msgid "PACKAGER" -msgstr "PAKETIERER" - -#: internal/cli/board/details.go:163 -msgid "Package URL:" -msgstr "Paket-URL:" - -#: internal/cli/board/details.go:162 -msgid "Package maintainer:" -msgstr "" - -#: internal/cli/board/details.go:161 -msgid "Package name:" -msgstr "Paketname:" - -#: internal/cli/board/details.go:165 -msgid "Package online help:" -msgstr "" - -#: internal/cli/board/details.go:164 -msgid "Package website:" -msgstr "" - -#: internal/cli/lib/search.go:158 -msgid "Paragraph: %s" -msgstr "" - -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 -msgid "Path" -msgstr "Pfad" - -#: internal/cli/compile/compile.go:123 -msgid "" -"Path to a collection of libraries. Can be used multiple times or entries can" -" be comma separated." -msgstr "" - -#: internal/cli/compile/compile.go:121 -msgid "" -"Path to a single library’s root folder. Can be used multiple times or " -"entries can be comma separated." -msgstr "" - -#: internal/cli/cli.go:114 -msgid "Path to the file where logs will be written." -msgstr "" - -#: internal/cli/compile/compile.go:102 -msgid "" -"Path where to save compiled files. If omitted, a directory will be created " -"in the default temporary path of your OS." -msgstr "" - -#: commands/upload/upload.go:439 -msgid "Performing 1200-bps touch reset on serial port %s" -msgstr "" - -#: commands/core/install.go:54 commands/core/install.go:61 -msgid "Platform %s already installed" -msgstr "Plattform %s bereits installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:192 -msgid "Platform %s installed" -msgstr "Plattform %s installiert" - -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 -msgid "" -"Platform %s is not found in any known index\n" -"Maybe you need to add a 3rd party URL?" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:316 -msgid "Platform %s uninstalled" -msgstr "Plattform %s deinstalliert" - -#: arduino/errors.go:483 -msgid "Platform '%s' is already at the latest version" -msgstr "" - -#: arduino/errors.go:407 -msgid "Platform '%s' not found" -msgstr "Plattform '%s' nicht gefunden" - -#: internal/cli/board/search.go:82 -msgid "Platform ID" -msgstr "" - -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 -msgid "Platform ID is not correct" -msgstr "" - -#: internal/cli/board/details.go:171 -msgid "Platform URL:" -msgstr "Plattform-URL:" - -#: internal/cli/board/details.go:170 -msgid "Platform architecture:" -msgstr "Plattformarchitektur:" - -#: internal/cli/board/details.go:169 -msgid "Platform category:" -msgstr "Plattformkategorie:" - -#: internal/cli/board/details.go:176 -msgid "Platform checksum:" -msgstr "" - -#: internal/cli/board/details.go:172 -msgid "Platform file name:" -msgstr "Plattformdateiname:" - -#: internal/cli/board/details.go:168 -msgid "Platform name:" -msgstr "Plattformname:" - -#: internal/cli/board/details.go:174 -msgid "Platform size (bytes):" -msgstr "Plattformgröße (Bytes):" - -#: arduino/errors.go:155 -msgid "" -"Please specify an FQBN. Multiple possible boards detected on port %[1]s with" -" protocol %[2]s" -msgstr "" -"Bitte gib ein FQBN an. Mehrere mögliche Boards wurden an Port %[1]s mit " -"Protokoll %[2]s entdeckt" - -#: arduino/errors.go:135 -msgid "" -"Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" -" identified" -msgstr "" -"Bitte gib ein FQBN an. Das Board an Port %[1]s mit Protokoll %[2]s kann " -"nicht identifiziert werden" - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -msgid "Port" -msgstr "Port" - -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 -msgid "Port closed: %v" -msgstr "Port geschlossen: %v" - -#: arduino/errors.go:669 -msgid "Port monitor error" -msgstr "" - -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 -msgid "Precompiled library in \"%[1]s\" not found" -msgstr "Vorkompilierte Bibliothek in \"%[1]s\" nicht gefunden" - -#: internal/cli/board/details.go:41 -msgid "Print details about a board." -msgstr "" - -#: internal/cli/compile/compile.go:98 -msgid "Print preprocessed code to stdout instead of compiling." -msgstr "" - -#: internal/cli/cli.go:106 internal/cli/cli.go:108 -msgid "Print the logs on the standard output." -msgstr "" - -#: internal/cli/config/dump.go:31 -msgid "Prints the current configuration" -msgstr "" - -#: internal/cli/config/dump.go:32 -msgid "Prints the current configuration." -msgstr "" - -#: arduino/errors.go:204 -msgid "Profile '%s' not found" -msgstr "Profil '%s' nicht gefunden" - -#: arduino/errors.go:340 -msgid "Programmer '%s' not found" -msgstr "" - -#: internal/cli/board/details.go:110 -msgid "Programmer name" -msgstr "" - -#: internal/cli/arguments/programmer.go:29 -msgid "Programmer to use, e.g: atmel_ice" -msgstr "" - -#: internal/cli/board/details.go:214 -msgid "Programmers:" -msgstr "" - -#: arduino/errors.go:392 -msgid "Property '%s' is undefined" -msgstr "" - -#: internal/cli/board/list.go:132 -msgid "Protocol" -msgstr "Protokoll" - -#: internal/cli/lib/search.go:168 -msgid "Provides includes: %s" -msgstr "" - -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 -msgid "Removes one or more values from a setting." -msgstr "" - -#: commands/lib/install.go:130 -msgid "Replacing %[1]s with %[2]s" -msgstr "Ersetze %[1]s durch %[2]s " - -#: arduino/cores/packagemanager/install_uninstall.go:121 -msgid "Replacing platform %[1]s with %[2]s" -msgstr "" - -#: internal/cli/board/details.go:182 -msgid "Required tool:" -msgstr "Erforderliches Werkzeug:" - -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 -msgid "Run in silent mode, show only monitor input and output." -msgstr "" - -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "" - -#: arduino/builder/core.go:42 -msgid "Running normal build of the core..." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 -msgid "Running pre_uninstall script." -msgstr "" - -#: internal/cli/debug/debug.go:185 -msgid "SVD file path" -msgstr "" - -#: internal/cli/compile/compile.go:100 -msgid "Save build artifacts in this directory." -msgstr "" - -#: internal/cli/board/search.go:38 -msgid "Search for a board in the Boards Manager using the specified keywords." -msgstr "" - -#: internal/cli/board/search.go:37 -msgid "Search for a board in the Boards Manager." -msgstr "" - -#: internal/cli/core/search.go:47 -msgid "Search for a core in Boards Manager using the specified keywords." -msgstr "" - -#: internal/cli/core/search.go:46 -msgid "Search for a core in Boards Manager." -msgstr "" - -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "" - -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "" - -#: internal/cli/lib/search.go:157 -msgid "Sentence: %s" -msgstr "" - -#: internal/cli/debug/debug.go:193 -msgid "Server path" -msgstr "" - -#: arduino/httpclient/httpclient.go:73 -msgid "Server responded with: %s" -msgstr "" - -#: internal/cli/debug/debug.go:192 -msgid "Server type" -msgstr "" - -#: internal/cli/upload/upload.go:81 -msgid "Set a value for a field required to upload." -msgstr "" - -#: internal/cli/monitor/monitor.go:68 -msgid "Set terminal in raw mode (unbuffered)." -msgstr "" - -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 -msgid "Sets a setting value." -msgstr "" - -#: internal/cli/board/attach.go:36 -msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." -msgstr "" -"Setzt die Standardwerte für Port und FQBN. Wenn kein Port oder FQBN " -"angegeben wird, werden der Standard-Port und -FQBN angezeigt." - -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 -msgid "Sets where to save the configuration file." -msgstr "" - -#: internal/cli/monitor/monitor.go:232 -msgid "Setting" -msgstr "Einstellung" - -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "" - -#: internal/cli/core/search.go:52 -msgid "Show all available core versions." -msgstr "Zeige alle verfügbare Core-Versionen." - -#: internal/cli/monitor/monitor.go:69 -msgid "Show all the settings of the communication port." -msgstr "" - -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 -msgid "Show also boards marked as 'hidden' in the platform" -msgstr "" - -#: internal/cli/arguments/show_properties.go:59 -msgid "" -"Show build properties. The properties are expanded, use \"--show-" -"properties=unexpanded\" if you want them exactly as they are defined." -msgstr "" - -#: internal/cli/board/details.go:51 -msgid "Show full board details" -msgstr "Vollständige Platinendetails anzeigen" - -#: internal/cli/board/details.go:42 -msgid "" -"Show information about a board, in particular if the board has options to be" -" specified in the FQBN." -msgstr "" -"Zeige Informationen über ein Board, im Besonderen wenn das Board die Option " -"hat, im FQBN angegeben zu werden." - -#: internal/cli/lib/search.go:49 -msgid "Show library names only." -msgstr "Nur Namen der Bibliotheken anzeigen." - -#: internal/cli/board/details.go:52 -msgid "Show list of available programmers" -msgstr "Zeige alle verfügbare Programmer" - -#: internal/cli/debug/debug.go:63 -msgid "" -"Show metadata about the debug session instead of starting the debugger." -msgstr "" - -#: internal/cli/update/update.go:45 -msgid "Show outdated cores and libraries after index update" -msgstr "" - -#: internal/cli/lib/list.go:39 -msgid "Shows a list of installed libraries." -msgstr "Zeige die Liste mit den installierten Bibliotheken." - -#: internal/cli/lib/list.go:40 -msgid "" -"Shows a list of installed libraries.\n" -"\n" -"If the LIBNAME parameter is specified the listing is limited to that specific\n" -"library. By default the libraries provided as built-in by platforms/core are\n" -"not listed, they can be listed by adding the --all flag." -msgstr "" - -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 -msgid "Shows the list of installed platforms." -msgstr "" - -#: internal/cli/lib/examples.go:43 -msgid "Shows the list of the examples for libraries." -msgstr "" - -#: internal/cli/lib/examples.go:44 -msgid "" -"Shows the list of the examples for libraries. A name may be given as " -"argument to search a specific library." -msgstr "" - -#: internal/cli/version/version.go:39 -msgid "" -"Shows the version number of Arduino CLI which is installed on your system." -msgstr "" - -#: internal/cli/version/version.go:38 -msgid "Shows version number of Arduino CLI." -msgstr "" - -#: internal/cli/board/details.go:187 -msgid "Size (bytes):" -msgstr "Größe (Bytes):" - -#: commands/compile/compile.go:209 -msgid "" -"Sketch cannot be located in build path. Please specify a different build " -"path" -msgstr "" - -#: internal/cli/sketch/new.go:84 -msgid "Sketch created in: %s" -msgstr "Sketch erstellt in: %s" - -#: internal/cli/arguments/profiles.go:29 -msgid "Sketch profile to use" -msgstr "" - -#: arduino/builder/sizer.go:189 -msgid "Sketch too big; see %[1]s for tips on reducing it." -msgstr "" -"Der Sketch ist zu groß; unter %[1]s finden sich Hinweise, um die Größe zu " -"verringern." - -#: arduino/builder/sizer.go:157 -msgid "" -"Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" -" bytes." -msgstr "" -"Der Sketch verwendet %[1]s Bytes (%[3]s%%) des Programmspeicherplatzes. Das " -"Maximum sind %[2]s Bytes." - -#: commands/sketch/warn_deprecated.go:29 -msgid "" -"Sketches with .pde extension are deprecated, please rename the following " -"files to .ino:" -msgstr "" - -#: arduino/builder/linker.go:30 -msgid "Skip linking of final executable." -msgstr "" - -#: commands/upload/upload.go:432 -msgid "Skipping 1200-bps touch reset: no serial port selected!" -msgstr "" - -#: arduino/builder/archive_compiled_files.go:29 -msgid "Skipping archive creation of: %[1]s" -msgstr "" - -#: arduino/builder/compilation.go:177 -msgid "Skipping compile of: %[1]s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:407 -msgid "Skipping dependencies detection for precompiled library %[1]s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:188 -msgid "Skipping platform configuration." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 -msgid "Skipping pre_uninstall script." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:365 -msgid "Skipping tool configuration." -msgstr "" - -#: arduino/builder/recipe.go:48 -msgid "Skipping: %[1]s" -msgstr "Wird übersprungen: %[1]s" - -#: commands/instances.go:575 -msgid "Some indexes could not be updated." -msgstr "" - -#: internal/cli/core/upgrade.go:125 -msgid "Some upgrades failed, please check the output for details." -msgstr "" - -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "" - -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" -msgstr "TCP-Port, der vom Daemon überwacht wird" - -#: internal/cli/cli.go:125 -msgid "The custom config file (if not specified the default will be used)." -msgstr "" - -#: internal/cli/daemon/daemon.go:77 -msgid "The flag --debug-file must be used with --debug." -msgstr "Das Flag --debug-file muss mit --debug benutzt werden." - -#: internal/cli/config/add.go:93 -msgid "" -"The key '%[1]v' is not a list of items, can't add to it.\n" -"Maybe use '%[2]s'?" -msgstr "" - -#: internal/cli/config/remove.go:51 -msgid "" -"The key '%[1]v' is not a list of items, can't remove from it.\n" -"Maybe use '%[2]s'?" -msgstr "" - -#: arduino/errors.go:859 -msgid "The library %s has multiple installations:" -msgstr "" - -#: internal/cli/compile/compile.go:112 -msgid "" -"The name of the custom encryption key to use to encrypt a binary during the " -"compile process. Used only by the platforms that support it." -msgstr "" - -#: internal/cli/compile/compile.go:110 -msgid "" -"The name of the custom signing key to use to sign a binary during the " -"compile process. Used only by the platforms that support it." -msgstr "" - -#: internal/cli/cli.go:116 internal/cli/cli.go:121 -msgid "The output format for the logs, can be: %s" -msgstr "" - -#: internal/cli/compile/compile.go:108 -msgid "" -"The path of the dir to search for the custom keys to sign and encrypt a " -"binary. Used only by the platforms that support it." -msgstr "" - -#: arduino/builder/libraries.go:151 -msgid "The platform does not support '%[1]s' for precompiled libraries." -msgstr "" - -#: internal/cli/lib/upgrade.go:35 -msgid "" -"This command upgrades an installed library to the latest available version. " -"Multiple libraries can be passed separated by a space. If no arguments are " -"provided, the command will upgrade all the installed libraries where an " -"update is available." -msgstr "" - -#: internal/cli/outdated/outdated.go:42 -msgid "" -"This commands shows a list of installed cores and/or libraries\n" -"that can be upgraded. If nothing needs to be updated the output is empty." -msgstr "" - -#: internal/cli/monitor/monitor.go:72 -msgid "Timestamp each incoming line." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 -msgid "Tool %s already installed" -msgstr "Werkzeug %s bereits installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:429 -msgid "Tool %s uninstalled" -msgstr "Werkzeug %s deinstalliert" - -#: commands/debug/debug.go:139 -msgid "Toolchain '%s' is not supported" -msgstr "" - -#: internal/cli/debug/debug.go:182 -msgid "Toolchain path" -msgstr "" - -#: internal/cli/debug/debug.go:183 -msgid "Toolchain prefix" -msgstr "" - -#: internal/cli/debug/debug.go:181 -msgid "Toolchain type" -msgstr "" - -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 -msgid "Try running %s" -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:57 -msgid "Turns on verbose mode." -msgstr "" - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -msgid "Type" -msgstr "Typ" - -#: internal/cli/lib/search.go:165 -msgid "Types: %s" -msgstr "Typen: %s" - -#: internal/cli/board/details.go:189 -msgid "URL:" -msgstr "URL:" - -#: arduino/builder/core.go:143 -msgid "" -"Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" -msgstr "" - -#: configuration/configuration.go:122 -msgid "Unable to get Documents Folder: %v" -msgstr "" - -#: configuration/configuration.go:97 -msgid "Unable to get Local App Data Folder: %v" -msgstr "" - -#: configuration/configuration.go:85 configuration/configuration.go:110 -msgid "Unable to get user home dir: %v" -msgstr "" - -#: internal/cli/cli.go:204 -msgid "Unable to open file for logging: %s" -msgstr "" - -#: commands/instances.go:542 -msgid "Unable to parse URL" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 -msgid "Uninstalling %s" -msgstr "%s wird deinstalliert" - -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 -msgid "Uninstalling %s, tool is no more required" -msgstr "" - -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 -msgid "" -"Uninstalls one or more cores and corresponding tool dependencies if no " -"longer used." -msgstr "" - -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 -msgid "Uninstalls one or more libraries." -msgstr "" - -#: internal/cli/board/list.go:164 -msgid "Unknown" -msgstr "Unbekannt" - -#: arduino/errors.go:185 -msgid "Unknown FQBN" -msgstr "Unbekannter FQBN" - -#: internal/cli/update/update.go:37 -msgid "Updates the index of cores and libraries" -msgstr "" - -#: internal/cli/update/update.go:38 -msgid "Updates the index of cores and libraries to the latest versions." -msgstr "" - -#: internal/cli/core/update_index.go:34 -msgid "Updates the index of cores to the latest version." -msgstr "" - -#: internal/cli/core/update_index.go:33 -msgid "Updates the index of cores." -msgstr "Aktualisiert den Index der Kerne." - -#: internal/cli/lib/update_index.go:34 -msgid "Updates the libraries index to the latest version." -msgstr "Aktualisiert den Bibliotheksindex auf die neueste Version." - -#: internal/cli/lib/update_index.go:33 -msgid "Updates the libraries index." -msgstr "Aktualisiert den Bibliotheksindex." - -#: arduino/cores/packagemanager/install_uninstall.go:44 -msgid "Upgrade doesn't accept parameters with version" -msgstr "" - -#: internal/cli/upgrade/upgrade.go:38 -msgid "Upgrades installed cores and libraries to latest version." -msgstr "" - -#: internal/cli/upgrade/upgrade.go:37 -msgid "Upgrades installed cores and libraries." -msgstr "" - -#: internal/cli/lib/upgrade.go:34 -msgid "Upgrades installed libraries." -msgstr "" - -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 -msgid "Upgrades one or all installed platforms to the latest version." -msgstr "" - -#: internal/cli/upload/upload.go:57 -msgid "Upload Arduino sketches." -msgstr "" - -#: internal/cli/upload/upload.go:58 -msgid "" -"Upload Arduino sketches. This does NOT compile the sketch prior to upload." -msgstr "" - -#: internal/cli/arguments/port.go:42 -msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" -msgstr "" - -#: commands/upload/upload.go:456 -msgid "Upload port found on %s" -msgstr "" - -#: internal/cli/arguments/port.go:46 -msgid "Upload port protocol, e.g: serial" -msgstr "" - -#: internal/cli/compile/compile.go:117 -msgid "Upload the binary after the compilation." -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:47 -msgid "Upload the bootloader on the board using an external programmer." -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:46 -msgid "Upload the bootloader." -msgstr "" - -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 -msgid "" -"Uploading to specified board using %s protocol requires the following info:" -msgstr "" - -#: internal/cli/config/init.go:103 -msgid "" -"Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" -"%s" -msgstr "" - -#: internal/cli/usage.go:26 -msgid "Usage:" -msgstr "" - -#: internal/cli/usage.go:33 -msgid "Use %s for more information about a command." -msgstr "Benutze %s für mehr Informationen über einen Befehl." - -#: internal/cli/compile/compile.go:425 -msgid "Used library" -msgstr "Benutzte Bibliothek" - -#: internal/cli/compile/compile.go:440 -msgid "Used platform" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:154 -msgid "Used: %[1]s" -msgstr "Benutzt: %[1]s" - -#: commands/compile/compile.go:280 -msgid "Using board '%[1]s' from platform in folder: %[2]s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:347 -msgid "Using cached library dependencies for file: %[1]s" -msgstr "" - -#: commands/compile/compile.go:281 -msgid "Using core '%[1]s' from platform in folder: %[2]s" -msgstr "" - -#: arduino/builder/libraries.go:312 -msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" -msgstr "" -"Bibliothek %[1]s in Version %[2]s im Ordner: %[3]s %[4]s wird verwendet" - -#: arduino/builder/libraries.go:306 -msgid "Using library %[1]s in folder: %[2]s %[3]s" -msgstr "Bibliothek %[1]s im Ordner: %[2]s %[3]s wird verwendet" - -#: arduino/builder/core.go:116 -msgid "Using precompiled core: %[1]s" -msgstr "" - -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 -msgid "Using precompiled library in %[1]s" -msgstr "Benutze vorkompilierte Bibliothek in %[1]s" - -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 -msgid "Using previously compiled file: %[1]s" -msgstr "Zuvor kompilierte Datei wird verwendet: %[1]s" - -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -msgid "VERSION" -msgstr "VERSION" - -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 -msgid "VERSION_NUMBER" -msgstr "VERSION_NUMMER" - -#: internal/cli/monitor/monitor.go:232 -msgid "Values" -msgstr "Werte" - -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 -msgid "Verify uploaded binary after the upload." -msgstr "" - -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 -msgid "Version" -msgstr "Version" - -#: internal/cli/lib/search.go:166 -msgid "Versions: %s" -msgstr "Versionen: %s" - -#: arduino/cores/packagemanager/install_uninstall.go:183 -msgid "WARNING cannot configure platform: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:361 -msgid "WARNING cannot configure tool: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 -msgid "WARNING cannot run pre_uninstall script: %s" -msgstr "" - -#: internal/cli/compile/compile.go:307 -msgid "WARNING: The sketch is compiled using one or more custom libraries." -msgstr "" - -#: arduino/builder/libraries.go:283 -msgid "" -"WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " -"incompatible with your current board which runs on %[3]s architecture(s)." -msgstr "" -"WARNUNG: Bibliothek %[1]s behauptet auf %[2]s Architektur(en) ausgeführt " -"werden zu können und ist möglicherweise inkompatibel mit Ihrer derzeitigen " -"Platine, welche auf %[3]s Architektur(en) ausgeführt wird." - -#: commands/upload/upload.go:445 -msgid "Waiting for upload port..." -msgstr "Warten auf Upload-Port ..." - -#: commands/compile/compile.go:286 -msgid "" -"Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" -msgstr "" -"Warnung: Board %[1]s definiert keine %[2]s Präferenz. Automatisch gesetzt " -"auf: %[3]s" - -#: internal/cli/lib/search.go:159 -msgid "Website: %s" -msgstr "Webseite: %s" - -#: internal/cli/config/init.go:42 -msgid "Writes current configuration to a configuration file." -msgstr "" - -#: internal/cli/config/init.go:45 -msgid "" -"Writes current configuration to the configuration file in the data " -"directory." -msgstr "" - -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "Konfigurationsdatei wird geschrieben: %v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 -msgid "You cannot use the %s flag while compiling with a profile." -msgstr "" - -#: arduino/resources/checksums.go:79 -msgid "archive hash differs from hash in index" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:192 -msgid "archive is not valid: multiple files found in zip file top level" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:195 -msgid "archive is not valid: no files found in zip file top level" -msgstr "" - -#: internal/cli/sketch/archive.go:36 -msgid "archivePath" -msgstr "" - -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 -msgid "arduino-preprocessor pattern is missing" -msgstr "" - -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "" - -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" -msgstr "" - -#: commands/upload/upload.go:700 -msgid "binary file not found in %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:305 -msgid "board %s not found" -msgstr "Platine %s nicht gefunden" - -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 -msgid "boardname" -msgstr "Platinenname" - -#: arduino/libraries/librariesmanager/librariesmanager.go:161 -msgid "built-in libraries directory not set" -msgstr "" - -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 -msgid "can't find latest release of %s" -msgstr "" - -#: commands/instances.go:360 -msgid "can't find latest release of tool %s" -msgstr "" - -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 -msgid "can't find pattern for discovery with id %s" -msgstr "" - -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 -msgid "candidates" -msgstr "Kandidaten" - -#: commands/upload/upload.go:657 commands/upload/upload.go:664 -msgid "cannot execute upload tool: %s" -msgstr "" - -#: arduino/resources/install.go:39 -msgid "checking local archive integrity" -msgstr "" - -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 -msgid "cleaning build path" -msgstr "" - -#: internal/cli/cli.go:72 -msgid "command" -msgstr "Befehl" - -#: arduino/monitor/monitor.go:150 -msgid "command '%[1]s' failed: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 -msgid "communication out of sync, expected '%[1]s', received '%[2]s'" -msgstr "" - -#: arduino/resources/checksums.go:75 -msgid "computing hash: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:145 -msgid "copying library to destination directory:" -msgstr "kopiere Bibliothek in Zielordner:" - -#: commands/upload/upload.go:772 -msgid "could not find a valid build artifact" -msgstr "" - -#: commands/core/install.go:62 -msgid "could not overwrite" -msgstr "" - -#: commands/lib/install.go:133 -msgid "could not remove old library" -msgstr "konnte alte Bibliothek nicht entfernen" - -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 -msgid "could not update sketch project file" -msgstr "" - -#: arduino/builder/core.go:95 -msgid "creating core cache folder: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:217 -msgid "creating installed.json in %[1]s: %[2]s" -msgstr "" - -#: arduino/resources/install.go:44 arduino/resources/install.go:48 -msgid "creating temp dir for extraction: %s" -msgstr "" - -#: arduino/builder/sizer.go:195 -msgid "data section exceeds available space in board" -msgstr "Datenbereich überschreitet den verfügbaren Platz auf der Platine" - -#: commands/lib/resolve_deps.go:56 -msgid "dependency '%s' is not available" -msgstr "" - -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "Zielordner existiert bereits" - -#: arduino/libraries/librariesmanager/install.go:93 -msgid "destination dir %s already exists, cannot install" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:142 -msgid "destination directory already exists" -msgstr "Zielordner existiert bereits" - -#: arduino/libraries/librariesmanager/install.go:282 -msgid "directory doesn't exist: %s" -msgstr "Verzeichnis existiert nicht: %s" - -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:756 -msgid "discovery %s not found" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:760 -msgid "discovery %s not installed" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:698 -msgid "discovery release not found: %s" -msgstr "" - -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 -msgid "download a specific version (in this case 1.6.9)." -msgstr "eine bestimmte Version herunterladen (in diesem Fall 1.6.9)." - -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 -msgid "download the latest version of Arduino SAMD core." -msgstr "" - -#: internal/cli/feedback/rpc_progress.go:73 -msgid "downloaded" -msgstr "heruntergeladen" - -#: commands/instances.go:138 -msgid "downloading %[1]s tool: %[2]s" -msgstr "Werkzeug %[1]s wird heruntergeladen: %[2]s" - -#: arduino/cores/fqbn.go:48 -msgid "empty board identifier" -msgstr "leerer Platinenidentifikator" - -#: arduino/sketch/sketch.go:92 -msgid "error loading sketch project file:" -msgstr "Fehler beim Laden der Sketch-Projektdatei:" - -#: arduino/cores/packagemanager/loader.go:650 -msgid "error opening %s" -msgstr "Fehler beim Öffnen von %s" - -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 -msgid "error parsing version constraints" -msgstr "" - -#: commands/board/list.go:116 -msgid "error processing response from server" -msgstr "" - -#: commands/board/list.go:96 -msgid "error querying Arduino Cloud Api" -msgstr "" - -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" -msgstr "Archiv wird extrahiert: %s" - -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "Archiv wird extrahiert: %w" - -#: arduino/resources/checksums.go:144 -msgid "failed to compute hash of file \"%s\"" -msgstr "" - -#: commands/board/list.go:91 -msgid "failed to initialize http client" -msgstr "" - -#: arduino/resources/checksums.go:96 -msgid "fetched archive size differs from size specified in index" -msgstr "" - -#: arduino/resources/install.go:128 -msgid "files in archive must be placed in a subdirectory" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:61 -msgid "finding absolute path of %s" -msgstr "" - -#: internal/cli/cli.go:72 -msgid "flags" -msgstr "Flags" - -#: arduino/cores/packagemanager/loader.go:100 -msgid "following symlink %s" -msgstr "" - -#: internal/cli/lib/download.go:39 -msgid "for a specific version." -msgstr "für eine bestimmte Version." - -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 -msgid "for the latest version." -msgstr "für die neueste Version." - -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 -msgid "for the specific version." -msgstr "für die jeweilige Version." - -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "" - -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "" - -#: arduino/resources/download.go:53 -msgid "getting archive file info: %s" -msgstr "" - -#: arduino/resources/checksums.go:93 -msgid "getting archive info: %s" -msgstr "" - -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 -msgid "getting archive path: %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:311 -msgid "getting build properties for board %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:106 -msgid "getting discovery dependencies for platform %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:114 -msgid "getting monitor dependencies for platform %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 -msgid "getting tool dependencies for platform %[1]s: %[2]s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:153 -msgid "install directory not set" -msgstr "Installationsverzeichnis nicht festgelegt" - -#: commands/instances.go:142 -msgid "installing %[1]s tool: %[2]s" -msgstr "Werkzeug %[1]s wird installiert: %[2]s" - -#: arduino/cores/packagemanager/install_uninstall.go:209 -msgid "installing platform %[1]s: %[2]s" -msgstr "Plattform %[1]s wird installiert: %[2]s" - -#: internal/cli/feedback/terminal.go:36 -msgid "interactive terminal not supported for the '%s' output format" -msgstr "" - -#: arduino/sketch/profiles.go:191 -msgid "invalid '%s' directive" -msgstr "" - -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 -msgid "invalid checksum format: %s" -msgstr "" - -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 -msgid "invalid config option: %s" -msgstr "ungültige Konfigurationsoption: %s" - -#: internal/cli/arguments/reference.go:90 -msgid "invalid empty core architecture '%s'" -msgstr "" - -#: internal/cli/arguments/reference.go:67 -msgid "invalid empty core argument" -msgstr "" - -#: internal/cli/arguments/reference.go:86 -msgid "invalid empty core name '%s'" -msgstr "" - -#: internal/cli/arguments/reference.go:71 -msgid "invalid empty core reference '%s'" -msgstr "" - -#: internal/cli/arguments/reference.go:76 -msgid "invalid empty core version: '%s'" -msgstr "" - -#: internal/cli/lib/args.go:49 -msgid "invalid empty library name" -msgstr "ungültiger, leerer Bibliotheksname" - -#: internal/cli/lib/args.go:54 -msgid "invalid empty library version: %s" -msgstr "ungültige, leere Bibliotheksversion: %s" - -#: arduino/cores/board.go:142 -msgid "invalid empty option found" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:272 -msgid "invalid git url" -msgstr "Ungültige Git-URL" - -#: arduino/resources/checksums.go:48 -msgid "invalid hash '%[1]s': %[2]s" -msgstr "" - -#: internal/cli/arguments/reference.go:83 -msgid "invalid item %s" -msgstr "ungültiges Element %s" - -#: arduino/sketch/profiles.go:225 -msgid "invalid library directive:" -msgstr "" - -#: arduino/libraries/libraries_layout.go:65 -msgid "invalid library layout: %s" -msgstr "" - -#: arduino/libraries/libraries_location.go:88 -msgid "invalid library location: %s" -msgstr "Ungültiger Ort für Bibliothek: %s" - -#: arduino/libraries/loader.go:139 -msgid "invalid library: no header files found" -msgstr "ungültige Bibliothek: keine Header-Dateien gefunden" - -#: arduino/cores/board.go:145 -msgid "invalid option '%s'" -msgstr "Ungültige Option '%s'" - -#: internal/cli/arguments/show_properties.go:51 -msgid "invalid option '%s'." -msgstr "Ungültige Option '%s'." - -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "" - -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" -msgstr "ungültige Plattformarchivgröße: %s" - -#: arduino/sketch/profiles.go:195 -msgid "invalid platform identifier" -msgstr "ungültiger Plattformidentifikator" - -#: arduino/sketch/profiles.go:205 -msgid "invalid platform index URL:" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:363 -msgid "invalid pluggable monitor reference: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:126 -msgid "invalid port configuration value for %s: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" -msgstr "ungültige Port-Konfiguration: %s" - -#: commands/upload/upload.go:644 -msgid "invalid recipe '%[1]s': %[2]s" -msgstr "" - -#: commands/sketch/new.go:86 -msgid "" -"invalid sketch name \"%[1]s\": the first character must be alphanumeric or " -"\"_\", the following ones can also contain \"-\" and \".\". The last one " -"cannot be \".\"." -msgstr "" - -#: arduino/cores/board.go:149 -msgid "invalid value '%[1]s' for option '%[2]s'" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:273 -msgid "invalid version directory %s" -msgstr "" - -#: arduino/sketch/profiles.go:227 -msgid "invalid version:" -msgstr "ungültige Version:" - -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "Schlüssel in Einstellungen nicht gefunden" - -#: internal/cli/core/search.go:45 -msgid "keywords" -msgstr "Schlüsselwörter" - -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" -msgstr "Bibliothek %s bereits installiert" - -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" -msgstr "Bibliothek nicht gültig" - -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "Bibliothekspfad existiert nicht: %s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" -msgstr "lade %[1]s: %[2]s" - -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" -msgstr "Platinen werden geladen: %s" - -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 -msgid "loading json index file %[1]s: %[2]s" -msgstr "" - -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 -msgid "loading library from %[1]s: %[2]s" -msgstr "lade Bibliothek von %[1]s: %[2]s" - -#: arduino/libraries/loader.go:54 -msgid "loading library.properties: %s" -msgstr "lade library.porperties: %s" - -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 -msgid "loading platform release %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:197 -msgid "loading platform.txt" -msgstr "lade platform.txt" - -#: arduino/cores/packagemanager/profiles.go:44 -msgid "loading required platform %s" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:60 -msgid "loading required tool %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:625 -msgid "loading tool release in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:190 -msgid "looking for boards.txt in %s" -msgstr "suche nach boards.txt in %s" - -#: arduino/sketch/sketch.go:76 -msgid "main file missing from sketch: %s" -msgstr "" - -#: arduino/sketch/profiles.go:189 -msgid "missing '%s' directive" -msgstr "" - -#: arduino/resources/checksums.go:40 -msgid "missing checksum for: %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:413 -msgid "missing package %[1]s referenced by board %[2]s" -msgstr "" - -#: internal/cli/core/upgrade.go:86 -msgid "missing package index for %s, future updates cannot be guaranteed" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:418 -msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:423 -msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" -msgstr "" - -#: arduino/resources/index.go:152 -msgid "missing signature" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:709 -msgid "monitor release not found: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 -msgid "moving extracted archive to destination dir: %s" -msgstr "" - -#: commands/upload/upload.go:767 -msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" -msgstr "" - -#: arduino/sketch/sketch.go:68 -msgid "multiple main sketch files found (%[1]v, %[2]v)" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:335 -msgid "" -"no compatible version of %[1]s tools found for the current os, try " -"contacting %[2]s" -msgstr "" - -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 -msgid "no instance specified" -msgstr "" - -#: commands/upload/upload.go:722 -msgid "no sketch or build directory/file specified" -msgstr "" - -#: arduino/sketch/sketch.go:55 -msgid "no such file or directory" -msgstr "" - -#: arduino/resources/install.go:131 -msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" -msgstr "" - -#: commands/upload/upload.go:639 -msgid "no upload port provided" -msgstr "" - -#: arduino/sketch/sketch.go:278 -msgid "no valid sketch found in %[1]s: missing %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:128 -msgid "no versions available for the current OS, try contacting %s" -msgstr "" - -#: internal/cli/feedback/terminal.go:39 -msgid "not running in a terminal" -msgstr "" - -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 -msgid "opening archive file: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:266 -msgid "opening boards.txt" -msgstr "boards.txt wird geöffnet" - -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 -msgid "opening signature file: %s" -msgstr "" - -#: arduino/security/signatures.go:78 -msgid "opening target file: %s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 -msgid "package %s not found" -msgstr "Paket %s nicht gefunden" - -#: arduino/cores/packagemanager/package_manager.go:481 -msgid "package '%s' not found" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 -msgid "parsing fqbn: %s" -msgstr "parse FQBN: %s" - -#: arduino/libraries/librariesindex/json.go:72 -msgid "parsing library_index.json: %s" -msgstr "parse library_index.json: %s" - -#: arduino/cores/packagemanager/loader.go:181 -msgid "path is not a platform directory: %s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:80 -msgid "platform %[1]s not found in package %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" -msgstr "Plattform %s ist nicht installiert" - -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 -msgid "platform not installed" -msgstr "Plattform nicht installiert" - -#: internal/cli/compile/compile.go:138 -msgid "please use --build-property instead." -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:126 -msgid "pluggable discovery already added: %s" -msgstr "" - -#: internal/cli/board/attach.go:34 -msgid "port" -msgstr "Port" - -#: internal/cli/arguments/port.go:125 -msgid "port not found: %[1]s %[2]s" -msgstr "Port nicht gefunden: %[1]s %[2]s" - -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "%[1]s wird gelesen: %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 -msgid "reading dir %[1]s: %[2]s" -msgstr "Verzeichnis %[1]s wird gelesen: %[2]s" - -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 -msgid "reading directory %s" -msgstr "Verzeichnis %s wird gelesen" - -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "" - -#: arduino/builder/sketch.go:83 -msgid "reading file %[1]s: %[2]s" -msgstr "Datei %[1]s wird gelesen: %[2]s" - -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "Dateien werden gelesen: %v" - -#: arduino/libraries/librariesresolver/cpp.go:104 -msgid "reading lib headers: %s" -msgstr "" - -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "" - -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "" - -#: arduino/libraries/librariesindex/json.go:66 -msgid "reading library_index.json: %s" -msgstr "lese library_index.json: %s" - -#: arduino/resources/install.go:121 -msgid "reading package root dir: %s" -msgstr "" - -#: commands/upload/upload.go:633 -msgid "recipe not found '%s'" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:557 -msgid "release %[1]s not found for tool %[2]s" -msgstr "" - -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 -msgid "release cannot be nil" -msgstr "" - -#: arduino/resources/download.go:44 -msgid "removing corrupted archive file: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:156 -msgid "removing library directory: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:308 -msgid "removing platform files: %s" -msgstr "Plattformdateien werden entfernt: %s" - -#: arduino/cores/packagemanager/download.go:87 -msgid "required version %[1]s not found for platform %[2]s" -msgstr "" - -#: arduino/security/signatures.go:74 -msgid "retrieving Arduino public keys: %s" -msgstr "" - -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "" - -#: arduino/resources/install.go:73 -msgid "searching package root dir: %s" -msgstr "" - -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 -msgid "sketch name cannot be empty" -msgstr "" - -#: commands/sketch/new.go:91 -msgid "sketch name cannot be the reserved name \"%[1]s\"" -msgstr "" - -#: commands/sketch/new.go:81 -msgid "" -"sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" -msgstr "" - -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 -msgid "sketch path is not valid" -msgstr "" - -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 -msgid "sketchPath" -msgstr "" - -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "Quelle ist kein Verzeichnis" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 -msgid "starting discovery %s" -msgstr "" - -#: arduino/resources/checksums.go:118 -msgid "testing archive checksum: %s" -msgstr "" - -#: arduino/resources/checksums.go:111 -msgid "testing archive size: %s" -msgstr "Archivgröße wird getestet: %s" - -#: arduino/resources/checksums.go:105 -msgid "testing if archive is cached: %s" -msgstr "" - -#: arduino/resources/install.go:37 -msgid "testing local archive integrity: %s" -msgstr "" - -#: arduino/builder/sizer.go:190 -msgid "text section exceeds available space in board" -msgstr "Textbereich überschreitet den verfügbaren Platz auf der Platine" - -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 -msgid "the compilation database may be incomplete or inaccurate" -msgstr "" - -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 -msgid "the server responded with status %s" -msgstr "" - -#: arduino/monitor/monitor.go:140 -msgid "timeout waiting for message" -msgstr "" - -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 -msgid "tool %s is not managed by package manager" -msgstr "" - -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 -msgid "tool %s not found" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:507 -msgid "tool '%[1]s' not found in package '%[2]s'" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:396 -msgid "tool not installed" -msgstr "Werkzeug nicht installiert" - -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 -msgid "tool release not found: %s" -msgstr "" - -#: arduino/cores/status.go:105 -msgid "tool version %s not found" -msgstr "Werkzeugversion %s nicht gefunden" - -#: commands/lib/install.go:61 -msgid "" -"two different versions of the library %[1]s are required: %[2]s and %[3]s" -msgstr "" -"zwei verschiedene Versionen der Bibliothek %[1]s sind erforderlich: %[2]s " -"und %[3]s" - -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 -msgid "unable to compute relative path to the sketch for the item" -msgstr "" - -#: arduino/builder/sketch.go:45 -msgid "unable to create a folder to save the sketch" -msgstr "" - -#: arduino/builder/sketch.go:126 -msgid "unable to create the folder containing the item" -msgstr "" - -#: internal/cli/config/dump.go:59 -msgid "unable to marshal config to YAML: %v" -msgstr "" - -#: arduino/builder/sketch.go:164 -msgid "unable to read contents of the destination item" -msgstr "" - -#: arduino/builder/sketch.go:137 -msgid "unable to read contents of the source item" -msgstr "" - -#: arduino/builder/sketch.go:147 -msgid "unable to write to destination file" -msgstr "Schreiben in Zieldatei unmöglich" - -#: arduino/cores/packagemanager/package_manager.go:286 -msgid "unknown package %s" -msgstr "unbekanntes Paket %s" - -#: arduino/cores/packagemanager/package_manager.go:293 -msgid "unknown platform %s:%s" -msgstr "unbekannte Plattform %s:%s" - -#: arduino/sketch/sketch.go:147 -msgid "unknown sketch file extension '%s'" -msgstr "" - -#: arduino/resources/checksums.go:61 -msgid "unsupported hash algorithm: %s" -msgstr "" - -#: internal/cli/core/upgrade.go:43 -msgid "upgrade arduino:samd to the latest version" -msgstr "" - -#: internal/cli/core/upgrade.go:41 -msgid "upgrade everything to the latest version" -msgstr "" - -#: commands/upload/upload.go:668 -msgid "uploading error: %s" -msgstr "Hochladefehler: %s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:159 -msgid "user directory not set" -msgstr "" - -#: internal/cli/feedback/terminal.go:73 -msgid "user input not supported for the '%s' output format" -msgstr "" - -#: internal/cli/feedback/terminal.go:76 -msgid "user input not supported in non interactive mode" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:176 -msgid "version %s not available for this operating system" -msgstr "Version %s ist für dieses Betriebssystem nicht verfügbar" - -#: arduino/cores/packagemanager/profiles.go:155 -msgid "version %s not found" -msgstr "Version %s nicht gefunden" - -#: commands/board/list.go:121 -msgid "wrong format in server response" -msgstr "falsches Format in der Serverantwort" diff --git a/i18n/data/ru.po b/i18n/data/ru.po deleted file mode 100644 index aa7290d171c..00000000000 --- a/i18n/data/ru.po +++ /dev/null @@ -1,3585 +0,0 @@ -# -# Translators: -# Дмитрий Кат, 2022 -# CLI team , 2022 -# Bakdaulet Kadyr , 2022 -# -msgid "" -msgstr "" -"Last-Translator: Bakdaulet Kadyr , 2022\n" -"Language-Team: Russian (https://app.transifex.com/arduino-1/teams/108174/ru/)\n" -"Language: ru\n" -"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" - -#: version/version.go:59 -msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" -msgstr "%[1]s%[2]s Версия: %[3]s Фиксация: %[4]s Дата: %[5]s" - -#: arduino/builder/internal/detector/detector.go:455 -msgid "%[1]s folder is no longer supported! See %[2]s for more information" -msgstr "Папка %[1]s более не поддерживается! Более подробно в %[2]s" - -#: arduino/builder/build_options_manager.go:142 -msgid "%[1]s invalid, rebuilding all" -msgstr "" - -#: internal/cli/lib/check_deps.go:111 -msgid "%[1]s is required but %[2]s is currently installed." -msgstr "Требуется %[1]s, но в данный момент устанавливается %[2]s" - -#: arduino/builder/builder.go:466 -msgid "%[1]s pattern is missing" -msgstr "%[1]s не найден шаблон" - -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, сообщение: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, порт: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, порты: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, версия протокола: %[2]d" - -#: arduino/resources/download.go:49 -msgid "%s already downloaded" -msgstr "%s уже скачана" - -#: commands/upload/upload.go:690 -msgid "%s and %s cannot be used together" -msgstr "%s не может быть использована вместе с %s" - -#: arduino/cores/packagemanager/install_uninstall.go:368 -msgid "%s installed" -msgstr "%s установлен" - -#: internal/cli/lib/check_deps.go:108 -msgid "%s is already installed." -msgstr "%s уже установлено." - -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 -msgid "%s is not a directory" -msgstr "%s не является директорией" - -#: arduino/cores/packagemanager/install_uninstall.go:288 -msgid "%s is not managed by package manager" -msgstr "" - -#: internal/cli/lib/check_deps.go:105 -msgid "%s must be installed." -msgstr "%s должен быть установлен." - -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 -msgid "%s pattern is missing" -msgstr "" - -#: arduino/errors.go:819 -msgid "'%s' has an invalid signature" -msgstr "'%s' имеет неправильную сигнатуру " - -#: arduino/cores/packagemanager/package_manager.go:400 -msgid "" -"'build.core' and 'build.variant' refer to different platforms: %[1]s and " -"%[2]s" -msgstr "" - -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 -msgid "(hidden)" -msgstr "(скрытый)" - -#: arduino/builder/libraries.go:302 -msgid "(legacy)" -msgstr "(устаревшее)" - -#: internal/cli/lib/install.go:81 -msgid "" -"--git-url and --zip-path are disabled by default, for more information see: " -"%v" -msgstr "" -"--git-url и --zip-path отключены по умолчанию, для подробностей смотрите: %v" - -#: internal/cli/lib/install.go:83 -msgid "" -"--git-url and --zip-path flags allow installing untrusted files, use it at " -"your own risk." -msgstr "" - -#: internal/cli/lib/install.go:86 -msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" -msgstr "" - -#: commands/sketch/new.go:66 -msgid ".ino file already exists" -msgstr "" - -#: internal/cli/updater/updater.go:71 -msgid "A new release of Arduino CLI is available:" -msgstr "Доступен новый релиз Arduino CLI:" - -#: arduino/errors.go:300 -msgid "A programmer is required to upload" -msgstr "" - -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 -msgid "ARCH" -msgstr "" - -#: internal/cli/generatedocs/generatedocs.go:80 -msgid "ARDUINO COMMAND LINE MANUAL" -msgstr "ИНСТРУКЦИЯ КОМАНДНОЙ СТРОКИ ARDUINO" - -#: internal/cli/usage.go:32 -msgid "Additional help topics:" -msgstr "" - -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 -msgid "Adds one or more values to a setting." -msgstr "" - -#: internal/cli/usage.go:27 -msgid "Aliases:" -msgstr "" - -#: internal/cli/core/upgrade.go:72 -msgid "All the cores are already at the latest version" -msgstr "" - -#: commands/lib/install.go:86 -msgid "Already installed %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:88 -msgid "Alternatives for %[1]s: %[2]s" -msgstr "" - -#: arduino/builder/internal/preprocessor/ctags.go:69 -msgid "An error occurred adding prototypes" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:209 -msgid "An error occurred detecting libraries" -msgstr "" - -#: internal/cli/daemon/daemon.go:62 -msgid "Append debug logging to the specified file" -msgstr "" - -#: internal/cli/lib/search.go:164 -msgid "Architecture: %s" -msgstr "" - -#: commands/sketch/archive.go:71 -msgid "Archive already exists" -msgstr "" - -#: arduino/builder/core.go:141 -msgid "Archiving built core (caching) in: %[1]s" -msgstr "Архивирование откомпилированного ядра (кэширование) в: %[1]s" - -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 -msgid "Arduino CLI sketch commands." -msgstr "" - -#: internal/cli/cli.go:70 -msgid "Arduino CLI." -msgstr "" - -#: internal/cli/cli.go:71 -msgid "Arduino Command Line Interface (arduino-cli)." -msgstr "" - -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 -msgid "Arduino board commands." -msgstr "" - -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 -msgid "Arduino cache commands." -msgstr "" - -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 -msgid "Arduino commands about libraries." -msgstr "" - -#: internal/cli/config/config.go:33 -msgid "Arduino configuration commands." -msgstr "" - -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 -msgid "Arduino core operations." -msgstr "" - -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 -msgid "Arguments error: %v" -msgstr "" - -#: internal/cli/board/attach.go:35 -msgid "Attaches a sketch to a board." -msgstr "" - -#: internal/cli/lib/search.go:155 -msgid "Author: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:78 -msgid "" -"Automatic library install can't be performed in this case, please manually " -"remove all duplicates and retry." -msgstr "" - -#: commands/lib/uninstall.go:57 -msgid "" -"Automatic library uninstall can't be performed in this case, please manually" -" remove them." -msgstr "" - -#: internal/cli/lib/list.go:136 -msgid "Available" -msgstr "" - -#: internal/cli/usage.go:29 -msgid "Available Commands:" -msgstr "" - -#: internal/cli/upload/upload.go:75 -msgid "Binary file to upload." -msgstr "" - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 -msgid "Board Name" -msgstr "" - -#: internal/cli/board/details.go:138 -msgid "Board name:" -msgstr "" - -#: internal/cli/board/details.go:140 -msgid "Board version:" -msgstr "" - -#: arduino/builder/sketch.go:245 -msgid "Bootloader file specified but missing: %[1]s" -msgstr "Файл загрузчика указан но не существует: %[1]s" - -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." -msgstr "" - -#: arduino/resources/index.go:64 -msgid "Can't create data directory %s" -msgstr "" - -#: arduino/errors.go:512 -msgid "Can't create sketch" -msgstr "" - -#: commands/lib/download.go:63 commands/lib/download.go:66 -msgid "Can't download library" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 -msgid "Can't find dependencies for platform %s" -msgstr "" - -#: arduino/errors.go:538 -msgid "Can't open sketch" -msgstr "" - -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 -msgid "Can't update sketch" -msgstr "" - -#: internal/cli/arguments/arguments.go:36 -msgid "Can't use the following flags together: %s" -msgstr "" - -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 -msgid "Can't write debug log: %s" -msgstr "" - -#: commands/compile/compile.go:160 commands/compile/compile.go:163 -msgid "Cannot create build cache directory" -msgstr "" - -#: commands/compile/compile.go:148 -msgid "Cannot create build directory" -msgstr "" - -#: internal/cli/config/init.go:94 -msgid "Cannot create config file directory: %v" -msgstr "" - -#: internal/cli/config/init.go:109 -msgid "Cannot create config file: %v" -msgstr "" - -#: arduino/errors.go:782 -msgid "Cannot create temp dir" -msgstr "" - -#: arduino/errors.go:800 -msgid "Cannot create temp file" -msgstr "" - -#: internal/cli/config/delete.go:53 -msgid "Cannot delete the key %[1]s: %[2]v" -msgstr "" - -#: commands/debug/debug.go:72 -msgid "Cannot execute debug tool" -msgstr "" - -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 -msgid "Cannot find absolute path: %v" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:141 -msgid "Cannot install platform" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:346 -msgid "Cannot install tool %s" -msgstr "" - -#: commands/upload/upload.go:468 -msgid "Cannot perform port reset: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" -msgstr "" - -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "" - -#: internal/cli/lib/search.go:163 -msgid "Category: %s" -msgstr "" - -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 -msgid "Check dependencies status for the specified library." -msgstr "" - -#: arduino/resources/checksums.go:167 -msgid "Checksum differs from checksum in package.json" -msgstr "" - -#: internal/cli/board/details.go:188 -msgid "Checksum:" -msgstr "" - -#: internal/cli/cache/cache.go:33 -msgid "Clean caches." -msgstr "" - -#: internal/cli/cli.go:126 -msgid "Comma-separated list of additional URLs for the Boards Manager." -msgstr "" - -#: internal/cli/board/list.go:54 -msgid "" -"Command keeps running and prints list of connected boards whenever there is " -"a change." -msgstr "" - -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 -msgid "Compiled sketch not found in %s" -msgstr "" - -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 -msgid "Compiles Arduino sketches." -msgstr "" - -#: arduino/builder/builder.go:400 -msgid "Compiling core..." -msgstr "" - -#: arduino/builder/builder.go:379 -msgid "Compiling libraries..." -msgstr "" - -#: arduino/builder/libraries.go:133 -msgid "Compiling library \"%[1]s\"" -msgstr "" - -#: arduino/builder/builder.go:363 -msgid "Compiling sketch..." -msgstr "Компиляция скетча..." - -#: internal/cli/config/init.go:88 -msgid "" -"Config file already exists, use --overwrite to discard the existing one." -msgstr "" - -#: internal/cli/config/init.go:112 -msgid "Config file written to: %s" -msgstr "" - -#: internal/cli/debug/debug.go:197 -msgid "Configuration options for %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:70 -msgid "" -"Configure communication port settings. The format is " -"=[,=]..." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:175 -msgid "Configuring platform." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:356 -msgid "Configuring tool." -msgstr "" - -#: internal/cli/board/list.go:188 -msgid "Connected" -msgstr "" - -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "" - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -msgid "Core" -msgstr "" - -#: arduino/httpclient/httpclient.go:112 -msgid "Could not connect via HTTP" -msgstr "" - -#: commands/instances.go:503 -msgid "Could not create index directory" -msgstr "" - -#: arduino/builder/core.go:41 -msgid "Couldn't deeply cache core build: %[1]s" -msgstr "" - -#: arduino/builder/sizer.go:153 -msgid "Couldn't determine program size" -msgstr "" - -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 -msgid "Couldn't get current working directory: %v" -msgstr "" - -#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 -msgid "Create a new Sketch" -msgstr "" - -#: internal/cli/compile/compile.go:96 -msgid "Create and print a profile configuration from the build." -msgstr "" - -#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 -msgid "Creates a zip file containing all sketch files." -msgstr "" - -#: internal/cli/config/init.go:43 -msgid "" -"Creates or updates the configuration file in the data directory or custom " -"directory with the current configuration settings." -msgstr "" - -#: internal/cli/compile/compile.go:308 -msgid "" -"Currently, Build Profiles only support libraries available through Arduino " -"Library Manager." -msgstr "" - -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "" - -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 -msgid "DEPRECATED" -msgstr "" - -#: internal/cli/daemon/daemon.go:174 -msgid "Daemon is now listening on %s:%s" -msgstr "" - -#: internal/cli/debug/debug.go:51 -msgid "Debug Arduino sketches." -msgstr "" - -#: internal/cli/debug/debug.go:52 -msgid "" -"Debug Arduino sketches. (this command opens an interactive gdb session)" -msgstr "" - -#: internal/cli/debug/debug.go:61 -msgid "Debug interpreter e.g.: %s" -msgstr "" - -#: commands/debug/debug_info.go:151 -msgid "Debugging not supported for board %s" -msgstr "" - -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 -msgid "Default" -msgstr "По умолчанию" - -#: internal/cli/board/attach.go:108 -msgid "Default FQBN set to" -msgstr "" - -#: internal/cli/board/attach.go:107 -msgid "Default port set to" -msgstr "" - -#: internal/cli/cache/clean.go:30 -msgid "Delete Boards/Library Manager download cache." -msgstr "" - -#: internal/cli/cache/clean.go:31 -msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." -msgstr "" - -#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 -msgid "Deletes a settings key and all its sub keys." -msgstr "" - -#: internal/cli/lib/search.go:171 -msgid "Dependencies: %s" -msgstr "" - -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 -msgid "Description" -msgstr "" - -#: arduino/builder/builder.go:289 -msgid "Detecting libraries used..." -msgstr "" - -#: internal/cli/board/list.go:44 -msgid "" -"Detects and displays a list of boards connected to the current computer." -msgstr "" - -#: internal/cli/debug/debug.go:62 -msgid "Directory containing binaries for debug." -msgstr "" - -#: internal/cli/upload/upload.go:74 -msgid "Directory containing binaries to upload." -msgstr "" - -#: internal/cli/generatedocs/generatedocs.go:45 -msgid "" -"Directory where to save generated files. Default is './docs', the directory " -"must exist." -msgstr "" - -#: internal/cli/completion/completion.go:44 -msgid "Disable completion description for shells that support it" -msgstr "" - -#: internal/cli/board/list.go:189 -msgid "Disconnected" -msgstr "" - -#: internal/cli/daemon/daemon.go:63 -msgid "Display only the provided gRPC calls" -msgstr "" - -#: internal/cli/lib/install.go:61 -msgid "Do not install dependencies." -msgstr "" - -#: internal/cli/lib/install.go:62 -msgid "Do not overwrite already installed libraries." -msgstr "" - -#: internal/cli/core/install.go:55 -msgid "Do not overwrite already installed platforms." -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 -msgid "Do not perform the actual upload, just log out actions" -msgstr "" - -#: internal/cli/daemon/daemon.go:60 -msgid "Do not terminate daemon process if the parent process dies" -msgstr "" - -#: commands/lib/download.go:60 -msgid "Downloading %s" -msgstr "" - -#: arduino/resources/index.go:136 -msgid "Downloading index signature: %s" -msgstr "" - -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 -msgid "Downloading index: %s" -msgstr "" - -#: commands/instances.go:439 -msgid "Downloading library %s" -msgstr "" - -#: commands/instances.go:136 -msgid "Downloading missing tool %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:94 -msgid "Downloading packages" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:98 -msgid "Downloading platform %s" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:178 -msgid "Downloading tool %s" -msgstr "" - -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 -msgid "Downloads one or more cores and corresponding tool dependencies." -msgstr "" - -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 -msgid "Downloads one or more libraries without installing them." -msgstr "" - -#: internal/cli/daemon/daemon.go:61 -msgid "Enable debug logging of gRPC calls" -msgstr "" - -#: internal/cli/lib/install.go:64 -msgid "Enter a path to zip file" -msgstr "" - -#: internal/cli/lib/install.go:63 -msgid "Enter git url for libraries hosted on repositories" -msgstr "" - -#: commands/sketch/archive.go:107 -msgid "Error adding file to sketch archive" -msgstr "" - -#: arduino/builder/core.go:147 -msgid "Error archiving built core (caching) in %[1]s: %[2]s" -msgstr "" - -#: internal/cli/sketch/archive.go:81 -msgid "Error archiving: %v" -msgstr "" - -#: commands/sketch/archive.go:95 -msgid "Error calculating relative file path" -msgstr "" - -#: internal/cli/cache/clean.go:45 -msgid "Error cleaning caches: %v" -msgstr "" - -#: internal/cli/compile/compile.go:217 -msgid "Error converting path to absolute: %v" -msgstr "" - -#: commands/compile/compile.go:335 -msgid "Error copying output file %s" -msgstr "" - -#: internal/cli/instance/instance.go:43 -msgid "Error creating instance: %v" -msgstr "" - -#: commands/compile/compile.go:319 -msgid "Error creating output dir" -msgstr "" - -#: commands/sketch/archive.go:83 -msgid "Error creating sketch archive" -msgstr "" - -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 -msgid "Error creating sketch: %v" -msgstr "" - -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 -msgid "Error detecting boards: %v" -msgstr "" - -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 -msgid "Error downloading %[1]s: %[2]v" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 -msgid "Error downloading %s" -msgstr "" - -#: arduino/resources/index.go:82 commands/instances.go:603 -msgid "Error downloading index '%s'" -msgstr "" - -#: arduino/resources/index.go:137 -msgid "Error downloading index signature '%s'" -msgstr "" - -#: commands/instances.go:451 -msgid "Error downloading library %s" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 -msgid "Error downloading platform %s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 -msgid "Error downloading tool %s" -msgstr "" - -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 -msgid "Error during Debug: %v" -msgstr "" - -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 -msgid "Error during JSON encoding of the output: %v" -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 -msgid "Error during Upload: %v" -msgstr "" - -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 -msgid "Error during build: %v" -msgstr "" - -#: internal/cli/core/install.go:80 -msgid "Error during install: %v" -msgstr "" - -#: internal/cli/core/uninstall.go:73 -msgid "Error during uninstall: %v" -msgstr "" - -#: internal/cli/core/upgrade.go:120 -msgid "Error during upgrade: %v" -msgstr "" - -#: arduino/resources/index.go:104 arduino/resources/index.go:123 -msgid "Error extracting %s" -msgstr "" - -#: commands/upload/upload.go:373 -msgid "Error finding build artifacts" -msgstr "" - -#: internal/cli/debug/debug.go:96 -msgid "Error getting Debug info: %v" -msgstr "" - -#: commands/sketch/archive.go:59 -msgid "Error getting absolute path of sketch archive" -msgstr "" - -#: internal/cli/board/details.go:73 -msgid "Error getting board details: %v" -msgstr "" - -#: arduino/builder/internal/compilation/database.go:81 -msgid "Error getting current directory for compilation database: %s" -msgstr "" - -#: commands/compile/compile.go:257 commands/lib/list.go:108 -msgid "Error getting information for library %s" -msgstr "" - -#: internal/cli/lib/examples.go:72 -msgid "Error getting libraries info: %v" -msgstr "" - -#: internal/cli/arguments/fqbn.go:90 -msgid "Error getting port metadata: %v" -msgstr "" - -#: internal/cli/monitor/monitor.go:98 -msgid "Error getting port settings details: %s" -msgstr "" - -#: internal/cli/upload/upload.go:169 -msgid "Error getting user input" -msgstr "" - -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 -msgid "Error initializing instance: %v" -msgstr "" - -#: internal/cli/lib/install.go:145 -msgid "Error installing %s: %v" -msgstr "" - -#: internal/cli/lib/install.go:119 -msgid "Error installing Git Library: %v" -msgstr "" - -#: internal/cli/lib/install.go:98 -msgid "Error installing Zip Library: %v" -msgstr "" - -#: commands/instances.go:461 -msgid "Error installing library %s" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 -msgid "Error installing platform %s" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 -msgid "Error installing tool %s" -msgstr "" - -#: internal/cli/board/listall.go:63 -msgid "Error listing boards: %v" -msgstr "" - -#: internal/cli/lib/list.go:89 -msgid "Error listing libraries: %v" -msgstr "" - -#: internal/cli/core/list.go:69 -msgid "Error listing platforms: %v" -msgstr "" - -#: arduino/errors.go:425 -msgid "Error loading hardware platform" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 -msgid "Error loading index %s" -msgstr "" - -#: arduino/resources/index.go:98 -msgid "Error opening %s" -msgstr "" - -#: internal/cli/daemon/daemon.go:85 -msgid "Error opening debug logging file: %s" -msgstr "" - -#: internal/cli/compile/compile.go:190 -msgid "Error opening source code overrides data file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:203 -msgid "Error parsing --show-properties flag: %v" -msgstr "" - -#: commands/compile/compile.go:328 -msgid "Error reading build directory" -msgstr "" - -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 -msgid "Error reading sketch files" -msgstr "" - -#: internal/cli/lib/check_deps.go:65 -msgid "Error resolving dependencies for %[1]s: %[2]s" -msgstr "" - -#: internal/cli/core/upgrade.go:68 -msgid "Error retrieving core list: %v" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:156 -msgid "Error rolling-back changes: %s" -msgstr "" - -#: arduino/resources/index.go:164 arduino/resources/index.go:176 -msgid "Error saving downloaded index" -msgstr "" - -#: arduino/resources/index.go:171 arduino/resources/index.go:180 -msgid "Error saving downloaded index signature" -msgstr "" - -#: internal/cli/board/search.go:60 -msgid "Error searching boards: %v" -msgstr "" - -#: internal/cli/lib/search.go:79 -msgid "Error searching for Libraries: %v" -msgstr "" - -#: internal/cli/core/search.go:80 -msgid "Error searching for platforms: %v" -msgstr "" - -#: arduino/builder/internal/compilation/database.go:66 -msgid "Error serializing compilation database: %s" -msgstr "" - -#: internal/cli/board/list.go:82 -msgid "Error starting discovery: %v" -msgstr "" - -#: internal/cli/lib/uninstall.go:63 -msgid "Error uninstalling %[1]s: %[2]v" -msgstr "" - -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 -msgid "Error updating library index: %v" -msgstr "" - -#: internal/cli/lib/upgrade.go:71 -msgid "Error upgrading libraries" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:151 -msgid "Error upgrading platform: %s" -msgstr "" - -#: arduino/resources/index.go:146 arduino/resources/index.go:152 -msgid "Error verifying signature" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:365 -msgid "Error while detecting libraries included by %[1]s" -msgstr "" - -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 -msgid "Error while determining sketch size: %s" -msgstr "" - -#: arduino/builder/internal/compilation/database.go:69 -msgid "Error writing compilation database: %s" -msgstr "" - -#: internal/cli/completion/completion.go:56 -msgid "Error: command description is not supported by %v" -msgstr "" - -#: internal/cli/compile/compile.go:196 -msgid "Error: invalid source code overrides data file: %v" -msgstr "" - -#: internal/cli/board/list.go:96 -msgid "Event" -msgstr "" - -#: internal/cli/lib/examples.go:120 -msgid "Examples for library %s" -msgstr "" - -#: internal/cli/usage.go:28 -msgid "Examples:" -msgstr "" - -#: internal/cli/debug/debug.go:180 -msgid "Executable to debug" -msgstr "" - -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 -msgid "Expected compiled sketch in directory %s, but is a file instead" -msgstr "" - -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 -msgid "FQBN" -msgstr "" - -#: internal/cli/board/details.go:139 -msgid "FQBN:" -msgstr "" - -#: commands/upload/upload.go:502 -msgid "Failed chip erase" -msgstr "" - -#: commands/upload/upload.go:509 -msgid "Failed programming" -msgstr "" - -#: commands/upload/upload.go:505 -msgid "Failed to burn bootloader" -msgstr "" - -#: commands/instances.go:166 -msgid "Failed to create data directory" -msgstr "" - -#: commands/instances.go:156 -msgid "Failed to create downloads directory" -msgstr "" - -#: internal/cli/daemon/daemon.go:129 -msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." -msgstr "" - -#: internal/cli/daemon/daemon.go:124 -msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." -msgstr "" - -#: internal/cli/daemon/daemon.go:136 -msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" -msgstr "" - -#: internal/cli/daemon/daemon.go:134 -msgid "Failed to listen on TCP port: %s. Address already in use." -msgstr "" - -#: commands/upload/upload.go:513 -msgid "Failed uploading" -msgstr "" - -#: internal/cli/board/details.go:186 -msgid "File:" -msgstr "" - -#: commands/compile/compile.go:131 -msgid "" -"Firmware encryption/signing requires all the following properties to be " -"defined: %s" -msgstr "" - -#: commands/daemon/debug.go:40 -msgid "First message must contain debug request, not data" -msgstr "" - -#: internal/cli/arguments/arguments.go:47 -msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" -msgstr "" - -#: internal/cli/usage.go:30 -msgid "Flags:" -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:37 -msgid "" -"Force run of post-install scripts (if the CLI is not running interactively)." -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:39 -msgid "" -"Force run of pre-uninstall scripts (if the CLI is not running " -"interactively)." -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:38 -msgid "" -"Force skip of post-install scripts (if the CLI is running interactively)." -msgstr "" - -#: internal/cli/arguments/pre_post_script.go:40 -msgid "" -"Force skip of pre-uninstall scripts (if the CLI is running interactively)." -msgstr "" - -#: arduino/errors.go:840 -msgid "Found %d platforms matching \"%s\": %s" -msgstr "" - -#: internal/cli/arguments/fqbn.go:37 -msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" -msgstr "" - -#: commands/debug/debug.go:183 -msgid "GDB server '%s' is not supported" -msgstr "" - -#: internal/cli/generatedocs/generatedocs.go:38 -#: internal/cli/generatedocs/generatedocs.go:39 -msgid "Generates bash completion and command manpages." -msgstr "" - -#: internal/cli/completion/completion.go:38 -msgid "Generates completion scripts" -msgstr "" - -#: internal/cli/completion/completion.go:39 -msgid "Generates completion scripts for various shells" -msgstr "" - -#: arduino/builder/builder.go:308 -msgid "Generating function prototypes..." -msgstr "" - -#: internal/cli/usage.go:31 -msgid "Global Flags:" -msgstr "" - -#: arduino/builder/sizer.go:163 -msgid "" -"Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " -"bytes for local variables. Maximum is %[2]s bytes." -msgstr "" -"Глобальные переменные используют %[1]s байт (%[3]s%%) динамической памяти, " -"оставляя %[4]s байт для локальных переменных. Максимум: %[2]s байт." - -#: arduino/builder/sizer.go:169 -msgid "Global variables use %[1]s bytes of dynamic memory." -msgstr "Глобальные переменные используют %[1]s байт динамической памяти." - -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 -msgid "ID" -msgstr "" - -#: internal/cli/board/details.go:110 -msgid "Id" -msgstr "" - -#: internal/cli/board/details.go:153 -msgid "Identification properties:" -msgstr "" - -#: internal/cli/compile/compile.go:131 -msgid "If set built binaries will be exported to the sketch folder." -msgstr "" - -#: internal/cli/core/list.go:45 -msgid "" -"If set return all installable and installed cores, including manually " -"installed." -msgstr "" - -#: internal/cli/lib/list.go:53 -msgid "Include built-in libraries (from platforms and IDE) in listing." -msgstr "" - -#: internal/cli/sketch/archive.go:49 -msgid "Includes %s directory in the archive." -msgstr "" - -#: internal/cli/lib/install.go:65 -msgid "Install libraries in the IDE-Builtin directory" -msgstr "" - -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 -msgid "Installed" -msgstr "Установлено" - -#: commands/lib/install.go:140 -msgid "Installed %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 -msgid "Installing %s" -msgstr "" - -#: commands/instances.go:459 -msgid "Installing library %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 -msgid "Installing platform %s" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:186 -msgid "Installing tool %s" -msgstr "" - -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 -msgid "Installs one or more cores and corresponding tool dependencies." -msgstr "" - -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 -msgid "Installs one or more specified libraries into the system." -msgstr "" - -#: arduino/builder/internal/detector/detector.go:391 -msgid "Internal error in cache" -msgstr "" - -#: arduino/errors.go:378 -msgid "Invalid '%[1]s' property: %[2]s" -msgstr "" - -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 -msgid "Invalid FQBN" -msgstr "" - -#: internal/cli/daemon/daemon.go:147 -msgid "Invalid TCP address: port is missing" -msgstr "" - -#: arduino/errors.go:80 -msgid "Invalid URL" -msgstr "" - -#: commands/instances.go:274 -msgid "Invalid additional URL: %v" -msgstr "" - -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" -msgstr "" - -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 -msgid "Invalid argument passed: %v" -msgstr "" - -#: commands/compile/compile.go:205 -msgid "Invalid build properties" -msgstr "" - -#: arduino/builder/sizer.go:249 -msgid "Invalid data size regexp: %s" -msgstr "" - -#: arduino/builder/sizer.go:255 -msgid "Invalid eeprom size regexp: %s" -msgstr "" - -#: arduino/errors.go:48 -msgid "Invalid instance" -msgstr "" - -#: internal/cli/core/upgrade.go:99 -msgid "Invalid item %s" -msgstr "" - -#: arduino/errors.go:98 -msgid "Invalid library" -msgstr "" - -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" -msgstr "" - -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "" - -#: internal/cli/cli.go:229 -msgid "Invalid output format: %s" -msgstr "" - -#: commands/instances.go:555 -msgid "Invalid package index in %s" -msgstr "" - -#: internal/cli/core/uninstall.go:62 -msgid "Invalid parameter %s: version not allowed" -msgstr "" - -#: commands/board/list.go:79 -msgid "Invalid pid value: '%s'" -msgstr "" - -#: arduino/errors.go:222 -msgid "Invalid profile" -msgstr "" - -#: commands/monitor/monitor.go:145 -msgid "Invalid recipe in platform.txt" -msgstr "" - -#: arduino/builder/sizer.go:239 -msgid "Invalid size regexp: %s" -msgstr "" - -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 -msgid "Invalid version" -msgstr "" - -#: commands/board/list.go:76 -msgid "Invalid vid value: '%s'" -msgstr "" - -#: internal/cli/compile/compile.go:126 -msgid "" -"Just produce the compilation database, without actually compiling. All build" -" commands are skipped except pre* hooks." -msgstr "" - -#: internal/cli/lib/list.go:38 -msgid "LIBNAME" -msgstr "" - -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 -msgid "LIBRARY" -msgstr "" - -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 -msgid "LIBRARY_NAME" -msgstr "" - -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 -msgid "Latest" -msgstr "" - -#: arduino/builder/libraries.go:91 -msgid "Library %[1]s has been declared precompiled:" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 -msgid "" -"Library %[1]s is already installed, but with a different version: %[2]s" -msgstr "" - -#: commands/lib/upgrade.go:59 -msgid "Library %s is already at the latest version" -msgstr "" - -#: commands/lib/uninstall.go:39 -msgid "Library %s is not installed" -msgstr "" - -#: commands/instances.go:445 -msgid "Library %s not found" -msgstr "" - -#: arduino/errors.go:446 -msgid "Library '%s' not found" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:464 -msgid "" -"Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." -msgstr "" - -#: arduino/errors.go:575 -msgid "Library install failed" -msgstr "" - -#: commands/lib/install.go:150 commands/lib/install.go:160 -msgid "Library installed" -msgstr "" - -#: internal/cli/lib/search.go:161 -msgid "License: %s" -msgstr "" - -#: arduino/builder/builder.go:416 -msgid "Linking everything together..." -msgstr "" - -#: internal/cli/board/listall.go:39 -msgid "" -"List all boards that have the support platform installed. You can search\n" -"for a specific board if you specify the board name" -msgstr "" - -#: internal/cli/board/listall.go:38 -msgid "List all known boards and their corresponding FQBN." -msgstr "" - -#: internal/cli/board/list.go:43 -msgid "List connected boards." -msgstr "" - -#: internal/cli/arguments/fqbn.go:42 -msgid "" -"List of board options separated by commas. Or can be used multiple times for" -" multiple options." -msgstr "" - -#: internal/cli/compile/compile.go:104 -msgid "" -"List of custom build properties separated by commas. Or can be used multiple" -" times for multiple properties." -msgstr "" - -#: internal/cli/lib/list.go:55 -msgid "List updatable libraries." -msgstr "" - -#: internal/cli/core/list.go:44 -msgid "List updatable platforms." -msgstr "" - -#: internal/cli/board/board.go:33 -msgid "Lists all connected boards." -msgstr "" - -#: internal/cli/outdated/outdated.go:41 -msgid "Lists cores and libraries that can be upgraded" -msgstr "" - -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 -msgid "Loading index file: %v" -msgstr "" - -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 -msgid "Location" -msgstr "" - -#: arduino/builder/sizer.go:204 -msgid "Low memory available, stability problems may occur." -msgstr "Недостаточно памяти, программа может работать нестабильно." - -#: internal/cli/lib/search.go:156 -msgid "Maintainer: %s" -msgstr "" - -#: internal/cli/arguments/discovery_timeout.go:31 -msgid "Max time to wait for port discovery, e.g.: 30s, 1m" -msgstr "" - -#: internal/cli/cli.go:110 -msgid "" -"Messages with this level and above will be logged. Valid levels are: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:459 -msgid "Missing '%[1]s' from library in %[2]s" -msgstr "Пропущен '%[1]s' из библиотеки в %[2]s" - -#: arduino/errors.go:171 -msgid "Missing FQBN (Fully Qualified Board Name)" -msgstr "" - -#: arduino/errors.go:262 -msgid "Missing port" -msgstr "" - -#: arduino/errors.go:238 -msgid "Missing port address" -msgstr "" - -#: arduino/errors.go:250 -msgid "Missing port protocol" -msgstr "" - -#: arduino/errors.go:288 -msgid "Missing programmer" -msgstr "" - -#: internal/cli/upload/upload.go:162 -msgid "Missing required upload field: %s" -msgstr "" - -#: arduino/builder/sizer.go:243 -msgid "Missing size regexp" -msgstr "" - -#: arduino/errors.go:498 -msgid "Missing sketch path" -msgstr "" - -#: arduino/errors.go:359 -msgid "Monitor '%s' not found" -msgstr "" - -#: internal/cli/monitor/monitor.go:141 -msgid "Monitor port settings:" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:153 -msgid "Multiple libraries were found for \"%[1]s\"" -msgstr "Несколько библиотек найдено для \"%[1]s\"" - -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 -msgid "Name" -msgstr "" - -#: internal/cli/lib/search.go:135 -msgid "Name: \"%s\"" -msgstr "" - -#: internal/cli/upload/upload.go:221 -msgid "New upload port: %[1]s (%[2]s)" -msgstr "" - -#: internal/cli/board/list.go:122 -msgid "No boards found." -msgstr "" - -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "" - -#: internal/cli/lib/examples.go:105 -msgid "No libraries found." -msgstr "" - -#: internal/cli/lib/list.go:128 -msgid "No libraries installed." -msgstr "" - -#: internal/cli/lib/search.go:124 -msgid "No libraries matching your search." -msgstr "" - -#: internal/cli/lib/search.go:130 -msgid "" -"No libraries matching your search.\n" -"Did you mean...\n" -msgstr "" - -#: internal/cli/lib/list.go:126 -msgid "No libraries update is available." -msgstr "" - -#: arduino/errors.go:276 -msgid "No monitor available for the port protocol %s" -msgstr "" - -#: internal/cli/outdated/outdated.go:77 -msgid "No outdated platforms or libraries found." -msgstr "" - -#: internal/cli/core/list.go:86 -msgid "No platforms installed." -msgstr "" - -#: internal/cli/core/search.go:110 -msgid "No platforms matching your search." -msgstr "" - -#: commands/upload/upload.go:458 -msgid "No upload port found, using %s as fallback" -msgstr "" - -#: arduino/errors.go:465 -msgid "No valid dependencies solution found" -msgstr "" - -#: arduino/builder/sizer.go:194 -msgid "Not enough memory; see %[1]s for tips on reducing your footprint." -msgstr "Недостаточно памяти; прочитайте %[1]s" - -#: arduino/builder/internal/detector/detector.go:156 -msgid "Not used: %[1]s" -msgstr "Не используется: %[1]s" - -#: internal/cli/board/details.go:185 -msgid "OS:" -msgstr "" - -#: internal/cli/board/details.go:147 -msgid "Official Arduino board:" -msgstr "" - -#: internal/cli/lib/search.go:50 -msgid "" -"Omit library details far all versions except the latest (produce a more " -"compact JSON output)." -msgstr "" - -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 -msgid "Open a communication port with a board." -msgstr "" - -#: internal/cli/board/details.go:197 -msgid "Option:" -msgstr "" - -#: internal/cli/compile/compile.go:114 -msgid "" -"Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." -msgstr "" - -#: internal/cli/compile/compile.go:127 -msgid "Optional, cleanup the build folder and do not use any cached build." -msgstr "" - -#: internal/cli/compile/compile.go:124 -msgid "" -"Optional, optimize compile output for debugging, rather than for release." -msgstr "" - -#: internal/cli/compile/compile.go:116 -msgid "Optional, suppresses almost every output." -msgstr "" - -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 -msgid "Optional, turns on verbose mode." -msgstr "" - -#: internal/cli/compile/compile.go:132 -msgid "" -"Optional. Path to a .json file that contains a set of replacements of the " -"sketch source code." -msgstr "" - -#: internal/cli/compile/compile.go:106 -msgid "" -"Override a build property with a custom value. Can be used multiple times " -"for multiple properties." -msgstr "" - -#: internal/cli/config/init.go:57 -msgid "Overwrite existing config file." -msgstr "" - -#: internal/cli/sketch/archive.go:50 -msgid "Overwrites an already existing archive" -msgstr "" - -#: internal/cli/sketch/new.go:44 -msgid "Overwrites an existing .ino sketch." -msgstr "" - -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 -msgid "PACKAGER" -msgstr "" - -#: internal/cli/board/details.go:163 -msgid "Package URL:" -msgstr "" - -#: internal/cli/board/details.go:162 -msgid "Package maintainer:" -msgstr "" - -#: internal/cli/board/details.go:161 -msgid "Package name:" -msgstr "" - -#: internal/cli/board/details.go:165 -msgid "Package online help:" -msgstr "" - -#: internal/cli/board/details.go:164 -msgid "Package website:" -msgstr "" - -#: internal/cli/lib/search.go:158 -msgid "Paragraph: %s" -msgstr "" - -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 -msgid "Path" -msgstr "" - -#: internal/cli/compile/compile.go:123 -msgid "" -"Path to a collection of libraries. Can be used multiple times or entries can" -" be comma separated." -msgstr "" - -#: internal/cli/compile/compile.go:121 -msgid "" -"Path to a single library’s root folder. Can be used multiple times or " -"entries can be comma separated." -msgstr "" - -#: internal/cli/cli.go:114 -msgid "Path to the file where logs will be written." -msgstr "" - -#: internal/cli/compile/compile.go:102 -msgid "" -"Path where to save compiled files. If omitted, a directory will be created " -"in the default temporary path of your OS." -msgstr "" - -#: commands/upload/upload.go:439 -msgid "Performing 1200-bps touch reset on serial port %s" -msgstr "" - -#: commands/core/install.go:54 commands/core/install.go:61 -msgid "Platform %s already installed" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:192 -msgid "Platform %s installed" -msgstr "" - -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 -msgid "" -"Platform %s is not found in any known index\n" -"Maybe you need to add a 3rd party URL?" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:316 -msgid "Platform %s uninstalled" -msgstr "" - -#: arduino/errors.go:483 -msgid "Platform '%s' is already at the latest version" -msgstr "" - -#: arduino/errors.go:407 -msgid "Platform '%s' not found" -msgstr "" - -#: internal/cli/board/search.go:82 -msgid "Platform ID" -msgstr "" - -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 -msgid "Platform ID is not correct" -msgstr "" - -#: internal/cli/board/details.go:171 -msgid "Platform URL:" -msgstr "" - -#: internal/cli/board/details.go:170 -msgid "Platform architecture:" -msgstr "" - -#: internal/cli/board/details.go:169 -msgid "Platform category:" -msgstr "" - -#: internal/cli/board/details.go:176 -msgid "Platform checksum:" -msgstr "" - -#: internal/cli/board/details.go:172 -msgid "Platform file name:" -msgstr "" - -#: internal/cli/board/details.go:168 -msgid "Platform name:" -msgstr "" - -#: internal/cli/board/details.go:174 -msgid "Platform size (bytes):" -msgstr "" - -#: arduino/errors.go:155 -msgid "" -"Please specify an FQBN. Multiple possible boards detected on port %[1]s with" -" protocol %[2]s" -msgstr "" - -#: arduino/errors.go:135 -msgid "" -"Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" -" identified" -msgstr "" - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -msgid "Port" -msgstr "Порт" - -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 -msgid "Port closed: %v" -msgstr "" - -#: arduino/errors.go:669 -msgid "Port monitor error" -msgstr "" - -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 -msgid "Precompiled library in \"%[1]s\" not found" -msgstr "" - -#: internal/cli/board/details.go:41 -msgid "Print details about a board." -msgstr "" - -#: internal/cli/compile/compile.go:98 -msgid "Print preprocessed code to stdout instead of compiling." -msgstr "" - -#: internal/cli/cli.go:106 internal/cli/cli.go:108 -msgid "Print the logs on the standard output." -msgstr "" - -#: internal/cli/config/dump.go:31 -msgid "Prints the current configuration" -msgstr "" - -#: internal/cli/config/dump.go:32 -msgid "Prints the current configuration." -msgstr "" - -#: arduino/errors.go:204 -msgid "Profile '%s' not found" -msgstr "" - -#: arduino/errors.go:340 -msgid "Programmer '%s' not found" -msgstr "" - -#: internal/cli/board/details.go:110 -msgid "Programmer name" -msgstr "" - -#: internal/cli/arguments/programmer.go:29 -msgid "Programmer to use, e.g: atmel_ice" -msgstr "" - -#: internal/cli/board/details.go:214 -msgid "Programmers:" -msgstr "" - -#: arduino/errors.go:392 -msgid "Property '%s' is undefined" -msgstr "" - -#: internal/cli/board/list.go:132 -msgid "Protocol" -msgstr "" - -#: internal/cli/lib/search.go:168 -msgid "Provides includes: %s" -msgstr "" - -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 -msgid "Removes one or more values from a setting." -msgstr "" - -#: commands/lib/install.go:130 -msgid "Replacing %[1]s with %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:121 -msgid "Replacing platform %[1]s with %[2]s" -msgstr "" - -#: internal/cli/board/details.go:182 -msgid "Required tool:" -msgstr "" - -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 -msgid "Run in silent mode, show only monitor input and output." -msgstr "" - -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "" - -#: arduino/builder/core.go:42 -msgid "Running normal build of the core..." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 -msgid "Running pre_uninstall script." -msgstr "" - -#: internal/cli/debug/debug.go:185 -msgid "SVD file path" -msgstr "" - -#: internal/cli/compile/compile.go:100 -msgid "Save build artifacts in this directory." -msgstr "" - -#: internal/cli/board/search.go:38 -msgid "Search for a board in the Boards Manager using the specified keywords." -msgstr "" - -#: internal/cli/board/search.go:37 -msgid "Search for a board in the Boards Manager." -msgstr "" - -#: internal/cli/core/search.go:47 -msgid "Search for a core in Boards Manager using the specified keywords." -msgstr "" - -#: internal/cli/core/search.go:46 -msgid "Search for a core in Boards Manager." -msgstr "" - -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "" - -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "" - -#: internal/cli/lib/search.go:157 -msgid "Sentence: %s" -msgstr "" - -#: internal/cli/debug/debug.go:193 -msgid "Server path" -msgstr "" - -#: arduino/httpclient/httpclient.go:73 -msgid "Server responded with: %s" -msgstr "" - -#: internal/cli/debug/debug.go:192 -msgid "Server type" -msgstr "" - -#: internal/cli/upload/upload.go:81 -msgid "Set a value for a field required to upload." -msgstr "" - -#: internal/cli/monitor/monitor.go:68 -msgid "Set terminal in raw mode (unbuffered)." -msgstr "" - -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 -msgid "Sets a setting value." -msgstr "" - -#: internal/cli/board/attach.go:36 -msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." -msgstr "" - -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 -msgid "Sets where to save the configuration file." -msgstr "" - -#: internal/cli/monitor/monitor.go:232 -msgid "Setting" -msgstr "" - -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "" - -#: internal/cli/core/search.go:52 -msgid "Show all available core versions." -msgstr "" - -#: internal/cli/monitor/monitor.go:69 -msgid "Show all the settings of the communication port." -msgstr "" - -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 -msgid "Show also boards marked as 'hidden' in the platform" -msgstr "" - -#: internal/cli/arguments/show_properties.go:59 -msgid "" -"Show build properties. The properties are expanded, use \"--show-" -"properties=unexpanded\" if you want them exactly as they are defined." -msgstr "" - -#: internal/cli/board/details.go:51 -msgid "Show full board details" -msgstr "" - -#: internal/cli/board/details.go:42 -msgid "" -"Show information about a board, in particular if the board has options to be" -" specified in the FQBN." -msgstr "" - -#: internal/cli/lib/search.go:49 -msgid "Show library names only." -msgstr "" - -#: internal/cli/board/details.go:52 -msgid "Show list of available programmers" -msgstr "" - -#: internal/cli/debug/debug.go:63 -msgid "" -"Show metadata about the debug session instead of starting the debugger." -msgstr "" - -#: internal/cli/update/update.go:45 -msgid "Show outdated cores and libraries after index update" -msgstr "" - -#: internal/cli/lib/list.go:39 -msgid "Shows a list of installed libraries." -msgstr "" - -#: internal/cli/lib/list.go:40 -msgid "" -"Shows a list of installed libraries.\n" -"\n" -"If the LIBNAME parameter is specified the listing is limited to that specific\n" -"library. By default the libraries provided as built-in by platforms/core are\n" -"not listed, they can be listed by adding the --all flag." -msgstr "" - -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 -msgid "Shows the list of installed platforms." -msgstr "" - -#: internal/cli/lib/examples.go:43 -msgid "Shows the list of the examples for libraries." -msgstr "" - -#: internal/cli/lib/examples.go:44 -msgid "" -"Shows the list of the examples for libraries. A name may be given as " -"argument to search a specific library." -msgstr "" - -#: internal/cli/version/version.go:39 -msgid "" -"Shows the version number of Arduino CLI which is installed on your system." -msgstr "" - -#: internal/cli/version/version.go:38 -msgid "Shows version number of Arduino CLI." -msgstr "" - -#: internal/cli/board/details.go:187 -msgid "Size (bytes):" -msgstr "" - -#: commands/compile/compile.go:209 -msgid "" -"Sketch cannot be located in build path. Please specify a different build " -"path" -msgstr "" - -#: internal/cli/sketch/new.go:84 -msgid "Sketch created in: %s" -msgstr "" - -#: internal/cli/arguments/profiles.go:29 -msgid "Sketch profile to use" -msgstr "" - -#: arduino/builder/sizer.go:189 -msgid "Sketch too big; see %[1]s for tips on reducing it." -msgstr "Скетч слишком большой; прочитайте %[1]s" - -#: arduino/builder/sizer.go:157 -msgid "" -"Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" -" bytes." -msgstr "" -"Скетч использует %[1]s байт (%[3]s%%) памяти устройства. Всего доступно " -"%[2]s байт." - -#: commands/sketch/warn_deprecated.go:29 -msgid "" -"Sketches with .pde extension are deprecated, please rename the following " -"files to .ino:" -msgstr "" - -#: arduino/builder/linker.go:30 -msgid "Skip linking of final executable." -msgstr "" - -#: commands/upload/upload.go:432 -msgid "Skipping 1200-bps touch reset: no serial port selected!" -msgstr "" - -#: arduino/builder/archive_compiled_files.go:29 -msgid "Skipping archive creation of: %[1]s" -msgstr "" - -#: arduino/builder/compilation.go:177 -msgid "Skipping compile of: %[1]s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:407 -msgid "Skipping dependencies detection for precompiled library %[1]s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:188 -msgid "Skipping platform configuration." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 -msgid "Skipping pre_uninstall script." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:365 -msgid "Skipping tool configuration." -msgstr "" - -#: arduino/builder/recipe.go:48 -msgid "Skipping: %[1]s" -msgstr "" - -#: commands/instances.go:575 -msgid "Some indexes could not be updated." -msgstr "" - -#: internal/cli/core/upgrade.go:125 -msgid "Some upgrades failed, please check the output for details." -msgstr "" - -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "" - -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" -msgstr "" - -#: internal/cli/cli.go:125 -msgid "The custom config file (if not specified the default will be used)." -msgstr "" - -#: internal/cli/daemon/daemon.go:77 -msgid "The flag --debug-file must be used with --debug." -msgstr "" - -#: internal/cli/config/add.go:93 -msgid "" -"The key '%[1]v' is not a list of items, can't add to it.\n" -"Maybe use '%[2]s'?" -msgstr "" - -#: internal/cli/config/remove.go:51 -msgid "" -"The key '%[1]v' is not a list of items, can't remove from it.\n" -"Maybe use '%[2]s'?" -msgstr "" - -#: arduino/errors.go:859 -msgid "The library %s has multiple installations:" -msgstr "" - -#: internal/cli/compile/compile.go:112 -msgid "" -"The name of the custom encryption key to use to encrypt a binary during the " -"compile process. Used only by the platforms that support it." -msgstr "" - -#: internal/cli/compile/compile.go:110 -msgid "" -"The name of the custom signing key to use to sign a binary during the " -"compile process. Used only by the platforms that support it." -msgstr "" - -#: internal/cli/cli.go:116 internal/cli/cli.go:121 -msgid "The output format for the logs, can be: %s" -msgstr "" - -#: internal/cli/compile/compile.go:108 -msgid "" -"The path of the dir to search for the custom keys to sign and encrypt a " -"binary. Used only by the platforms that support it." -msgstr "" - -#: arduino/builder/libraries.go:151 -msgid "The platform does not support '%[1]s' for precompiled libraries." -msgstr "" - -#: internal/cli/lib/upgrade.go:35 -msgid "" -"This command upgrades an installed library to the latest available version. " -"Multiple libraries can be passed separated by a space. If no arguments are " -"provided, the command will upgrade all the installed libraries where an " -"update is available." -msgstr "" - -#: internal/cli/outdated/outdated.go:42 -msgid "" -"This commands shows a list of installed cores and/or libraries\n" -"that can be upgraded. If nothing needs to be updated the output is empty." -msgstr "" - -#: internal/cli/monitor/monitor.go:72 -msgid "Timestamp each incoming line." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 -msgid "Tool %s already installed" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:429 -msgid "Tool %s uninstalled" -msgstr "" - -#: commands/debug/debug.go:139 -msgid "Toolchain '%s' is not supported" -msgstr "" - -#: internal/cli/debug/debug.go:182 -msgid "Toolchain path" -msgstr "" - -#: internal/cli/debug/debug.go:183 -msgid "Toolchain prefix" -msgstr "" - -#: internal/cli/debug/debug.go:181 -msgid "Toolchain type" -msgstr "" - -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 -msgid "Try running %s" -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:57 -msgid "Turns on verbose mode." -msgstr "" - -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -msgid "Type" -msgstr "Тип" - -#: internal/cli/lib/search.go:165 -msgid "Types: %s" -msgstr "" - -#: internal/cli/board/details.go:189 -msgid "URL:" -msgstr "" - -#: arduino/builder/core.go:143 -msgid "" -"Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" -msgstr "" - -#: configuration/configuration.go:122 -msgid "Unable to get Documents Folder: %v" -msgstr "" - -#: configuration/configuration.go:97 -msgid "Unable to get Local App Data Folder: %v" -msgstr "" - -#: configuration/configuration.go:85 configuration/configuration.go:110 -msgid "Unable to get user home dir: %v" -msgstr "" - -#: internal/cli/cli.go:204 -msgid "Unable to open file for logging: %s" -msgstr "" - -#: commands/instances.go:542 -msgid "Unable to parse URL" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 -msgid "Uninstalling %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 -msgid "Uninstalling %s, tool is no more required" -msgstr "" - -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 -msgid "" -"Uninstalls one or more cores and corresponding tool dependencies if no " -"longer used." -msgstr "" - -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 -msgid "Uninstalls one or more libraries." -msgstr "" - -#: internal/cli/board/list.go:164 -msgid "Unknown" -msgstr "" - -#: arduino/errors.go:185 -msgid "Unknown FQBN" -msgstr "" - -#: internal/cli/update/update.go:37 -msgid "Updates the index of cores and libraries" -msgstr "" - -#: internal/cli/update/update.go:38 -msgid "Updates the index of cores and libraries to the latest versions." -msgstr "" - -#: internal/cli/core/update_index.go:34 -msgid "Updates the index of cores to the latest version." -msgstr "" - -#: internal/cli/core/update_index.go:33 -msgid "Updates the index of cores." -msgstr "" - -#: internal/cli/lib/update_index.go:34 -msgid "Updates the libraries index to the latest version." -msgstr "" - -#: internal/cli/lib/update_index.go:33 -msgid "Updates the libraries index." -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:44 -msgid "Upgrade doesn't accept parameters with version" -msgstr "" - -#: internal/cli/upgrade/upgrade.go:38 -msgid "Upgrades installed cores and libraries to latest version." -msgstr "" - -#: internal/cli/upgrade/upgrade.go:37 -msgid "Upgrades installed cores and libraries." -msgstr "" - -#: internal/cli/lib/upgrade.go:34 -msgid "Upgrades installed libraries." -msgstr "" - -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 -msgid "Upgrades one or all installed platforms to the latest version." -msgstr "" - -#: internal/cli/upload/upload.go:57 -msgid "Upload Arduino sketches." -msgstr "" - -#: internal/cli/upload/upload.go:58 -msgid "" -"Upload Arduino sketches. This does NOT compile the sketch prior to upload." -msgstr "" - -#: internal/cli/arguments/port.go:42 -msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" -msgstr "" - -#: commands/upload/upload.go:456 -msgid "Upload port found on %s" -msgstr "" - -#: internal/cli/arguments/port.go:46 -msgid "Upload port protocol, e.g: serial" -msgstr "" - -#: internal/cli/compile/compile.go:117 -msgid "Upload the binary after the compilation." -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:47 -msgid "Upload the bootloader on the board using an external programmer." -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:46 -msgid "Upload the bootloader." -msgstr "" - -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 -msgid "" -"Uploading to specified board using %s protocol requires the following info:" -msgstr "" - -#: internal/cli/config/init.go:103 -msgid "" -"Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" -"%s" -msgstr "" - -#: internal/cli/usage.go:26 -msgid "Usage:" -msgstr "" - -#: internal/cli/usage.go:33 -msgid "Use %s for more information about a command." -msgstr "" - -#: internal/cli/compile/compile.go:425 -msgid "Used library" -msgstr "" - -#: internal/cli/compile/compile.go:440 -msgid "Used platform" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:154 -msgid "Used: %[1]s" -msgstr "Используется: %[1]s" - -#: commands/compile/compile.go:280 -msgid "Using board '%[1]s' from platform in folder: %[2]s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:347 -msgid "Using cached library dependencies for file: %[1]s" -msgstr "" - -#: commands/compile/compile.go:281 -msgid "Using core '%[1]s' from platform in folder: %[2]s" -msgstr "" - -#: arduino/builder/libraries.go:312 -msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" -msgstr "Используем библиотеку %[1]s версии %[2]s из папки: %[3]s %[4]s" - -#: arduino/builder/libraries.go:306 -msgid "Using library %[1]s in folder: %[2]s %[3]s" -msgstr "Используем библиотеку %[1]s в папке: %[2]s %[3]s" - -#: arduino/builder/core.go:116 -msgid "Using precompiled core: %[1]s" -msgstr "" - -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 -msgid "Using precompiled library in %[1]s" -msgstr "" - -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 -msgid "Using previously compiled file: %[1]s" -msgstr "Используем предварительно скомпилированный файл: %[1]s" - -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -msgid "VERSION" -msgstr "" - -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 -msgid "VERSION_NUMBER" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 -msgid "Values" -msgstr "" - -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 -msgid "Verify uploaded binary after the upload." -msgstr "" - -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 -msgid "Version" -msgstr "" - -#: internal/cli/lib/search.go:166 -msgid "Versions: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:183 -msgid "WARNING cannot configure platform: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:361 -msgid "WARNING cannot configure tool: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 -msgid "WARNING cannot run pre_uninstall script: %s" -msgstr "" - -#: internal/cli/compile/compile.go:307 -msgid "WARNING: The sketch is compiled using one or more custom libraries." -msgstr "" - -#: arduino/builder/libraries.go:283 -msgid "" -"WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " -"incompatible with your current board which runs on %[3]s architecture(s)." -msgstr "" -"ПРЕДУПРЕЖДЕНИЕ: библиотека %[1]s должна запускаться на архитектурах %[2]s и " -"может быть несовместима с вашей платой на архитектуре %[3]s." - -#: commands/upload/upload.go:445 -msgid "Waiting for upload port..." -msgstr "" - -#: commands/compile/compile.go:286 -msgid "" -"Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" -msgstr "" - -#: internal/cli/lib/search.go:159 -msgid "Website: %s" -msgstr "" - -#: internal/cli/config/init.go:42 -msgid "Writes current configuration to a configuration file." -msgstr "" - -#: internal/cli/config/init.go:45 -msgid "" -"Writes current configuration to the configuration file in the data " -"directory." -msgstr "" - -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 -msgid "You cannot use the %s flag while compiling with a profile." -msgstr "" - -#: arduino/resources/checksums.go:79 -msgid "archive hash differs from hash in index" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:192 -msgid "archive is not valid: multiple files found in zip file top level" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:195 -msgid "archive is not valid: no files found in zip file top level" -msgstr "" - -#: internal/cli/sketch/archive.go:36 -msgid "archivePath" -msgstr "" - -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 -msgid "arduino-preprocessor pattern is missing" -msgstr "" - -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "" - -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" -msgstr "" - -#: commands/upload/upload.go:700 -msgid "binary file not found in %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:305 -msgid "board %s not found" -msgstr "" - -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 -msgid "boardname" -msgstr "" - -#: arduino/libraries/librariesmanager/librariesmanager.go:161 -msgid "built-in libraries directory not set" -msgstr "" - -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 -msgid "can't find latest release of %s" -msgstr "" - -#: commands/instances.go:360 -msgid "can't find latest release of tool %s" -msgstr "" - -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 -msgid "can't find pattern for discovery with id %s" -msgstr "" - -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 -msgid "candidates" -msgstr "" - -#: commands/upload/upload.go:657 commands/upload/upload.go:664 -msgid "cannot execute upload tool: %s" -msgstr "" - -#: arduino/resources/install.go:39 -msgid "checking local archive integrity" -msgstr "" - -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 -msgid "cleaning build path" -msgstr "" - -#: internal/cli/cli.go:72 -msgid "command" -msgstr "" - -#: arduino/monitor/monitor.go:150 -msgid "command '%[1]s' failed: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 -msgid "communication out of sync, expected '%[1]s', received '%[2]s'" -msgstr "" - -#: arduino/resources/checksums.go:75 -msgid "computing hash: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:145 -msgid "copying library to destination directory:" -msgstr "" - -#: commands/upload/upload.go:772 -msgid "could not find a valid build artifact" -msgstr "" - -#: commands/core/install.go:62 -msgid "could not overwrite" -msgstr "" - -#: commands/lib/install.go:133 -msgid "could not remove old library" -msgstr "" - -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 -msgid "could not update sketch project file" -msgstr "" - -#: arduino/builder/core.go:95 -msgid "creating core cache folder: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:217 -msgid "creating installed.json in %[1]s: %[2]s" -msgstr "" - -#: arduino/resources/install.go:44 arduino/resources/install.go:48 -msgid "creating temp dir for extraction: %s" -msgstr "" - -#: arduino/builder/sizer.go:195 -msgid "data section exceeds available space in board" -msgstr "" - -#: commands/lib/resolve_deps.go:56 -msgid "dependency '%s' is not available" -msgstr "" - -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 -msgid "destination dir %s already exists, cannot install" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:142 -msgid "destination directory already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:282 -msgid "directory doesn't exist: %s" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:756 -msgid "discovery %s not found" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:760 -msgid "discovery %s not installed" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:698 -msgid "discovery release not found: %s" -msgstr "" - -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 -msgid "download a specific version (in this case 1.6.9)." -msgstr "" - -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 -msgid "download the latest version of Arduino SAMD core." -msgstr "" - -#: internal/cli/feedback/rpc_progress.go:73 -msgid "downloaded" -msgstr "" - -#: commands/instances.go:138 -msgid "downloading %[1]s tool: %[2]s" -msgstr "" - -#: arduino/cores/fqbn.go:48 -msgid "empty board identifier" -msgstr "" - -#: arduino/sketch/sketch.go:92 -msgid "error loading sketch project file:" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:650 -msgid "error opening %s" -msgstr "" - -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 -msgid "error parsing version constraints" -msgstr "" - -#: commands/board/list.go:116 -msgid "error processing response from server" -msgstr "" - -#: commands/board/list.go:96 -msgid "error querying Arduino Cloud Api" -msgstr "" - -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "" - -#: arduino/resources/checksums.go:144 -msgid "failed to compute hash of file \"%s\"" -msgstr "" - -#: commands/board/list.go:91 -msgid "failed to initialize http client" -msgstr "" - -#: arduino/resources/checksums.go:96 -msgid "fetched archive size differs from size specified in index" -msgstr "" - -#: arduino/resources/install.go:128 -msgid "files in archive must be placed in a subdirectory" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:61 -msgid "finding absolute path of %s" -msgstr "" - -#: internal/cli/cli.go:72 -msgid "flags" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:100 -msgid "following symlink %s" -msgstr "" - -#: internal/cli/lib/download.go:39 -msgid "for a specific version." -msgstr "" - -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 -msgid "for the latest version." -msgstr "" - -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 -msgid "for the specific version." -msgstr "" - -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "" - -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "" - -#: arduino/resources/download.go:53 -msgid "getting archive file info: %s" -msgstr "" - -#: arduino/resources/checksums.go:93 -msgid "getting archive info: %s" -msgstr "" - -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 -msgid "getting archive path: %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:311 -msgid "getting build properties for board %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:106 -msgid "getting discovery dependencies for platform %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:114 -msgid "getting monitor dependencies for platform %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 -msgid "getting tool dependencies for platform %[1]s: %[2]s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:153 -msgid "install directory not set" -msgstr "" - -#: commands/instances.go:142 -msgid "installing %[1]s tool: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:209 -msgid "installing platform %[1]s: %[2]s" -msgstr "" - -#: internal/cli/feedback/terminal.go:36 -msgid "interactive terminal not supported for the '%s' output format" -msgstr "" - -#: arduino/sketch/profiles.go:191 -msgid "invalid '%s' directive" -msgstr "" - -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 -msgid "invalid checksum format: %s" -msgstr "" - -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 -msgid "invalid config option: %s" -msgstr "" - -#: internal/cli/arguments/reference.go:90 -msgid "invalid empty core architecture '%s'" -msgstr "" - -#: internal/cli/arguments/reference.go:67 -msgid "invalid empty core argument" -msgstr "" - -#: internal/cli/arguments/reference.go:86 -msgid "invalid empty core name '%s'" -msgstr "" - -#: internal/cli/arguments/reference.go:71 -msgid "invalid empty core reference '%s'" -msgstr "" - -#: internal/cli/arguments/reference.go:76 -msgid "invalid empty core version: '%s'" -msgstr "" - -#: internal/cli/lib/args.go:49 -msgid "invalid empty library name" -msgstr "" - -#: internal/cli/lib/args.go:54 -msgid "invalid empty library version: %s" -msgstr "" - -#: arduino/cores/board.go:142 -msgid "invalid empty option found" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:272 -msgid "invalid git url" -msgstr "" - -#: arduino/resources/checksums.go:48 -msgid "invalid hash '%[1]s': %[2]s" -msgstr "" - -#: internal/cli/arguments/reference.go:83 -msgid "invalid item %s" -msgstr "" - -#: arduino/sketch/profiles.go:225 -msgid "invalid library directive:" -msgstr "" - -#: arduino/libraries/libraries_layout.go:65 -msgid "invalid library layout: %s" -msgstr "" - -#: arduino/libraries/libraries_location.go:88 -msgid "invalid library location: %s" -msgstr "" - -#: arduino/libraries/loader.go:139 -msgid "invalid library: no header files found" -msgstr "" - -#: arduino/cores/board.go:145 -msgid "invalid option '%s'" -msgstr "" - -#: internal/cli/arguments/show_properties.go:51 -msgid "invalid option '%s'." -msgstr "" - -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "" - -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" -msgstr "" - -#: arduino/sketch/profiles.go:195 -msgid "invalid platform identifier" -msgstr "" - -#: arduino/sketch/profiles.go:205 -msgid "invalid platform index URL:" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:363 -msgid "invalid pluggable monitor reference: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:126 -msgid "invalid port configuration value for %s: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" -msgstr "" - -#: commands/upload/upload.go:644 -msgid "invalid recipe '%[1]s': %[2]s" -msgstr "" - -#: commands/sketch/new.go:86 -msgid "" -"invalid sketch name \"%[1]s\": the first character must be alphanumeric or " -"\"_\", the following ones can also contain \"-\" and \".\". The last one " -"cannot be \".\"." -msgstr "" - -#: arduino/cores/board.go:149 -msgid "invalid value '%[1]s' for option '%[2]s'" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:273 -msgid "invalid version directory %s" -msgstr "" - -#: arduino/sketch/profiles.go:227 -msgid "invalid version:" -msgstr "" - -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "" - -#: internal/cli/core/search.go:45 -msgid "keywords" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" -msgstr "" - -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 -msgid "loading json index file %[1]s: %[2]s" -msgstr "" - -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 -msgid "loading library from %[1]s: %[2]s" -msgstr "" - -#: arduino/libraries/loader.go:54 -msgid "loading library.properties: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 -msgid "loading platform release %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:197 -msgid "loading platform.txt" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:44 -msgid "loading required platform %s" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:60 -msgid "loading required tool %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:625 -msgid "loading tool release in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:190 -msgid "looking for boards.txt in %s" -msgstr "" - -#: arduino/sketch/sketch.go:76 -msgid "main file missing from sketch: %s" -msgstr "" - -#: arduino/sketch/profiles.go:189 -msgid "missing '%s' directive" -msgstr "" - -#: arduino/resources/checksums.go:40 -msgid "missing checksum for: %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:413 -msgid "missing package %[1]s referenced by board %[2]s" -msgstr "" - -#: internal/cli/core/upgrade.go:86 -msgid "missing package index for %s, future updates cannot be guaranteed" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:418 -msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:423 -msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" -msgstr "" - -#: arduino/resources/index.go:152 -msgid "missing signature" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:709 -msgid "monitor release not found: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 -msgid "moving extracted archive to destination dir: %s" -msgstr "" - -#: commands/upload/upload.go:767 -msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" -msgstr "" - -#: arduino/sketch/sketch.go:68 -msgid "multiple main sketch files found (%[1]v, %[2]v)" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:335 -msgid "" -"no compatible version of %[1]s tools found for the current os, try " -"contacting %[2]s" -msgstr "" - -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 -msgid "no instance specified" -msgstr "" - -#: commands/upload/upload.go:722 -msgid "no sketch or build directory/file specified" -msgstr "" - -#: arduino/sketch/sketch.go:55 -msgid "no such file or directory" -msgstr "" - -#: arduino/resources/install.go:131 -msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" -msgstr "" - -#: commands/upload/upload.go:639 -msgid "no upload port provided" -msgstr "" - -#: arduino/sketch/sketch.go:278 -msgid "no valid sketch found in %[1]s: missing %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:128 -msgid "no versions available for the current OS, try contacting %s" -msgstr "" - -#: internal/cli/feedback/terminal.go:39 -msgid "not running in a terminal" -msgstr "" - -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 -msgid "opening archive file: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:266 -msgid "opening boards.txt" -msgstr "" - -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 -msgid "opening signature file: %s" -msgstr "" - -#: arduino/security/signatures.go:78 -msgid "opening target file: %s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 -msgid "package %s not found" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:481 -msgid "package '%s' not found" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 -msgid "parsing fqbn: %s" -msgstr "" - -#: arduino/libraries/librariesindex/json.go:72 -msgid "parsing library_index.json: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:181 -msgid "path is not a platform directory: %s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:80 -msgid "platform %[1]s not found in package %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 -msgid "platform not installed" -msgstr "" - -#: internal/cli/compile/compile.go:138 -msgid "please use --build-property instead." -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:126 -msgid "pluggable discovery already added: %s" -msgstr "" - -#: internal/cli/board/attach.go:34 -msgid "port" -msgstr "" - -#: internal/cli/arguments/port.go:125 -msgid "port not found: %[1]s %[2]s" -msgstr "" - -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 -msgid "reading dir %[1]s: %[2]s" -msgstr "" - -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 -msgid "reading directory %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "" - -#: arduino/builder/sketch.go:83 -msgid "reading file %[1]s: %[2]s" -msgstr "" - -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "" - -#: arduino/libraries/librariesresolver/cpp.go:104 -msgid "reading lib headers: %s" -msgstr "" - -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "" - -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "" - -#: arduino/libraries/librariesindex/json.go:66 -msgid "reading library_index.json: %s" -msgstr "" - -#: arduino/resources/install.go:121 -msgid "reading package root dir: %s" -msgstr "" - -#: commands/upload/upload.go:633 -msgid "recipe not found '%s'" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:557 -msgid "release %[1]s not found for tool %[2]s" -msgstr "" - -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 -msgid "release cannot be nil" -msgstr "" - -#: arduino/resources/download.go:44 -msgid "removing corrupted archive file: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:156 -msgid "removing library directory: %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:308 -msgid "removing platform files: %s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:87 -msgid "required version %[1]s not found for platform %[2]s" -msgstr "" - -#: arduino/security/signatures.go:74 -msgid "retrieving Arduino public keys: %s" -msgstr "" - -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "" - -#: arduino/resources/install.go:73 -msgid "searching package root dir: %s" -msgstr "" - -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 -msgid "sketch name cannot be empty" -msgstr "" - -#: commands/sketch/new.go:91 -msgid "sketch name cannot be the reserved name \"%[1]s\"" -msgstr "" - -#: commands/sketch/new.go:81 -msgid "" -"sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" -msgstr "" - -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 -msgid "sketch path is not valid" -msgstr "" - -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 -msgid "sketchPath" -msgstr "" - -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 -msgid "starting discovery %s" -msgstr "" - -#: arduino/resources/checksums.go:118 -msgid "testing archive checksum: %s" -msgstr "" - -#: arduino/resources/checksums.go:111 -msgid "testing archive size: %s" -msgstr "" - -#: arduino/resources/checksums.go:105 -msgid "testing if archive is cached: %s" -msgstr "" - -#: arduino/resources/install.go:37 -msgid "testing local archive integrity: %s" -msgstr "" - -#: arduino/builder/sizer.go:190 -msgid "text section exceeds available space in board" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 -msgid "the compilation database may be incomplete or inaccurate" -msgstr "" - -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 -msgid "the server responded with status %s" -msgstr "" - -#: arduino/monitor/monitor.go:140 -msgid "timeout waiting for message" -msgstr "" - -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 -msgid "tool %s is not managed by package manager" -msgstr "" - -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 -msgid "tool %s not found" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:507 -msgid "tool '%[1]s' not found in package '%[2]s'" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:396 -msgid "tool not installed" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 -msgid "tool release not found: %s" -msgstr "" - -#: arduino/cores/status.go:105 -msgid "tool version %s not found" -msgstr "" - -#: commands/lib/install.go:61 -msgid "" -"two different versions of the library %[1]s are required: %[2]s and %[3]s" -msgstr "" - -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 -msgid "unable to compute relative path to the sketch for the item" -msgstr "" - -#: arduino/builder/sketch.go:45 -msgid "unable to create a folder to save the sketch" -msgstr "" - -#: arduino/builder/sketch.go:126 -msgid "unable to create the folder containing the item" -msgstr "" - -#: internal/cli/config/dump.go:59 -msgid "unable to marshal config to YAML: %v" -msgstr "" - -#: arduino/builder/sketch.go:164 -msgid "unable to read contents of the destination item" -msgstr "" - -#: arduino/builder/sketch.go:137 -msgid "unable to read contents of the source item" -msgstr "" - -#: arduino/builder/sketch.go:147 -msgid "unable to write to destination file" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:286 -msgid "unknown package %s" -msgstr "" - -#: arduino/cores/packagemanager/package_manager.go:293 -msgid "unknown platform %s:%s" -msgstr "" - -#: arduino/sketch/sketch.go:147 -msgid "unknown sketch file extension '%s'" -msgstr "" - -#: arduino/resources/checksums.go:61 -msgid "unsupported hash algorithm: %s" -msgstr "" - -#: internal/cli/core/upgrade.go:43 -msgid "upgrade arduino:samd to the latest version" -msgstr "" - -#: internal/cli/core/upgrade.go:41 -msgid "upgrade everything to the latest version" -msgstr "" - -#: commands/upload/upload.go:668 -msgid "uploading error: %s" -msgstr "" - -#: arduino/libraries/librariesmanager/librariesmanager.go:159 -msgid "user directory not set" -msgstr "" - -#: internal/cli/feedback/terminal.go:73 -msgid "user input not supported for the '%s' output format" -msgstr "" - -#: internal/cli/feedback/terminal.go:76 -msgid "user input not supported in non interactive mode" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:176 -msgid "version %s not available for this operating system" -msgstr "" - -#: arduino/cores/packagemanager/profiles.go:155 -msgid "version %s not found" -msgstr "" - -#: commands/board/list.go:121 -msgid "wrong format in server response" -msgstr "" diff --git a/install.sh b/install.sh index d248dffdfb5..1adb4245a1d 100755 --- a/install.sh +++ b/install.sh @@ -10,6 +10,7 @@ PROJECT_NAME="arduino-cli" # BINDIR represents the local bin location, defaults to ./bin. EFFECTIVE_BINDIR="" DEFAULT_BINDIR="$PWD/bin" +TEMPDIR="${TMPDIR:-${TEMP:-${TMP:-/tmp}}}" fail() { echo "$1" @@ -84,7 +85,7 @@ initDownloadTool() { checkLatestVersion() { # Use the GitHub releases webpage to find the latest version for this project # so we don't get rate-limited. - CHECKLATESTVERSION_REGEX="v?[0-9][A-Za-z0-9\.-]*" + CHECKLATESTVERSION_REGEX="v\?[0-9][A-Za-z0-9\.-]*" CHECKLATESTVERSION_LATEST_URL="https://github.com/${PROJECT_OWNER}/${PROJECT_NAME}/releases/latest" if [ "$DOWNLOAD_TOOL" = "curl" ]; then CHECKLATESTVERSION_TAG=$(curl -SsL $CHECKLATESTVERSION_LATEST_URL | grep -o "Release $CHECKLATESTVERSION_REGEX · ${PROJECT_OWNER}/${PROJECT_NAME}" | grep -o "$CHECKLATESTVERSION_REGEX") @@ -101,10 +102,12 @@ getFile() { GETFILE_URL="$1" GETFILE_FILE_PATH="$2" if [ "$DOWNLOAD_TOOL" = "curl" ]; then - GETFILE_HTTP_STATUS_CODE=$(curl -s -w '%{http_code}' -L "$GETFILE_URL" -o "$GETFILE_FILE_PATH") + GETFILE_HTTP_STATUS_CODE=$(curl --silent --show-error --write-out '%{http_code}' --location "$GETFILE_URL" -o "$GETFILE_FILE_PATH") elif [ "$DOWNLOAD_TOOL" = "wget" ]; then - wget --server-response --content-on-error -q -O "$GETFILE_FILE_PATH" "$GETFILE_URL" + TMP_FILE=$(mktemp) + wget --server-response --content-on-error -q -O "$GETFILE_FILE_PATH" "$GETFILE_URL" 2>"$TMP_FILE" GETFILE_HTTP_STATUS_CODE=$(awk '/^ HTTP/{print $2}' "$TMP_FILE") + rm -f "$TMP_FILE" fi echo "$GETFILE_HTTP_STATUS_CODE" } @@ -117,7 +120,7 @@ downloadFile() { TAG=$1 fi # arduino-lint_0.4.0-rc1_Linux_64bit.[tar.gz, zip] - APPLICATION_DIST_PREFIX="${PROJECT_NAME}_${TAG}_" + APPLICATION_DIST_PREFIX="${PROJECT_NAME}_${TAG#"v"}_" if [ "$OS" = "Windows" ]; then APPLICATION_DIST_EXTENSION=".zip" else @@ -136,7 +139,7 @@ downloadFile() { esac DOWNLOAD_URL="${DOWNLOAD_URL_PREFIX}${APPLICATION_DIST}" - INSTALLATION_TMP_FILE="/tmp/$APPLICATION_DIST" + INSTALLATION_TMP_FILE="${TEMPDIR}/$APPLICATION_DIST" echo "Downloading $DOWNLOAD_URL" httpStatusCode=$(getFile "$DOWNLOAD_URL" "$INSTALLATION_TMP_FILE") if [ "$httpStatusCode" -ne 200 ]; then @@ -153,15 +156,10 @@ downloadFile() { echo "Trying to find a release using the GitHub API." LATEST_RELEASE_URL="https://api.github.com/repos/${PROJECT_OWNER}/$PROJECT_NAME/releases/tags/$TAG" - if [ "$DOWNLOAD_TOOL" = "curl" ]; then - HTTP_RESPONSE=$(curl -sL --write-out 'HTTPSTATUS:%{http_code}' "$LATEST_RELEASE_URL") - HTTP_STATUS_CODE=$(echo "$HTTP_RESPONSE" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') - BODY=$(echo "$HTTP_RESPONSE" | sed -e 's/HTTPSTATUS\:.*//g') - elif [ "$DOWNLOAD_TOOL" = "wget" ]; then - TMP_FILE=$(mktemp) - BODY=$(wget --server-response --content-on-error -q -O - "$LATEST_RELEASE_URL" 2>"$TMP_FILE" || true) - HTTP_STATUS_CODE=$(awk '/^ HTTP/{print $2}' "$TMP_FILE") - fi + TMP_BODY_FILE=$(mktemp) + HTTP_STATUS_CODE=$(getFile "$LATEST_RELEASE_URL" "$TMP_BODY_FILE") + BODY=$(cat "$TMP_BODY_FILE") + rm -f "$TMP_BODY_FILE" if [ "$HTTP_STATUS_CODE" != 200 ]; then echo "Request failed with HTTP status code $HTTP_STATUS_CODE" fail "Body: $BODY" @@ -185,7 +183,7 @@ downloadFile() { } installFile() { - INSTALLATION_TMP_DIR="/tmp/$PROJECT_NAME" + INSTALLATION_TMP_DIR="${TEMPDIR}/$PROJECT_NAME" mkdir -p "$INSTALLATION_TMP_DIR" if [ "$OS" = "Windows" ]; then unzip -d "$INSTALLATION_TMP_DIR" "$INSTALLATION_TMP_FILE" @@ -220,7 +218,7 @@ testVersion() { else # $PATH is intentionally a literal in this message. # shellcheck disable=SC2016 - echo "$PROJECT_NAME not found. You might want to add \"$EFFECTIVE_BINDIR\" to your "'$PATH' + echo "install.sh: $PROJECT_NAME not found. You might want to add \"$EFFECTIVE_BINDIR\" to your "'$PATH' fi set -e diff --git a/internal/algorithms/slices.go b/internal/algorithms/slices.go deleted file mode 100644 index ab904a97f94..00000000000 --- a/internal/algorithms/slices.go +++ /dev/null @@ -1,73 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package f - -// Matcher is a function that tests if a given value match a certain criteria. -type Matcher[T any] func(T) bool - -// Reducer is a function that combines two values of the same type and return -// the combined value. -type Reducer[T any] func(T, T) T - -// Mapper is a function that converts a value of one type to another type. -type Mapper[T, U any] func(T) U - -// Filter takes a slice of type []T and a Matcher[T]. It returns a newly -// allocated slice containing only those elements of the input slice that -// satisfy the matcher. -func Filter[T any](values []T, matcher Matcher[T]) []T { - res := []T{} - for _, x := range values { - if matcher(x) { - res = append(res, x) - } - } - return res -} - -// Map applies the Mapper function to each element of the slice and returns -// a new slice with the results in the same order. -func Map[T, U any](values []T, mapper Mapper[T, U]) []U { - res := []U{} - for _, x := range values { - res = append(res, mapper(x)) - } - return res -} - -// Reduce applies the Reducer function to all elements of the input values -// and returns the result. -func Reduce[T any](values []T, reducer Reducer[T]) T { - var result T - for _, v := range values { - result = reducer(result, v) - } - return result -} - -// Equals return a Matcher that matches the given value -func Equals[T comparable](value T) Matcher[T] { - return func(x T) bool { - return x == value - } -} - -// NotEquals return a Matcher that does not match the given value -func NotEquals[T comparable](value T) Matcher[T] { - return func(x T) bool { - return x != value - } -} diff --git a/internal/algorithms/slices_test.go b/internal/algorithms/slices_test.go deleted file mode 100644 index 8ef58c660a9..00000000000 --- a/internal/algorithms/slices_test.go +++ /dev/null @@ -1,53 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package f_test - -import ( - "strings" - "testing" - - f "github.com/arduino/arduino-cli/internal/algorithms" - "github.com/stretchr/testify/require" -) - -func TestFilter(t *testing.T) { - a := []string{"aaa", "bbb", "ccc"} - require.Equal(t, []string{"bbb", "ccc"}, f.Filter(a, func(x string) bool { return x > "b" })) - b := []int{5, 9, 15, 2, 4, -2} - require.Equal(t, []int{5, 9, 15}, f.Filter(b, func(x int) bool { return x > 4 })) -} - -func TestIsEmpty(t *testing.T) { - require.True(t, f.Equals(int(0))(0)) - require.False(t, f.Equals(int(1))(0)) - require.True(t, f.Equals("")("")) - require.False(t, f.Equals("abc")("")) - require.False(t, f.NotEquals(int(0))(0)) - require.True(t, f.NotEquals(int(1))(0)) - require.False(t, f.NotEquals("")("")) - require.True(t, f.NotEquals("abc")("")) -} - -func TestMap(t *testing.T) { - value := "hello, world , how are,you? " - parts := f.Map(strings.Split(value, ","), strings.TrimSpace) - - require.Equal(t, 4, len(parts)) - require.Equal(t, "hello", parts[0]) - require.Equal(t, "world", parts[1]) - require.Equal(t, "how are", parts[2]) - require.Equal(t, "you?", parts[3]) -} diff --git a/arduino/builder/archive_compiled_files.go b/internal/arduino/builder/archive_compiled_files.go similarity index 76% rename from arduino/builder/archive_compiled_files.go rename to internal/arduino/builder/archive_compiled_files.go index b640e3e256e..32208a59092 100644 --- a/arduino/builder/archive_compiled_files.go +++ b/internal/arduino/builder/archive_compiled_files.go @@ -16,17 +16,16 @@ package builder import ( + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" ) // ArchiveCompiledFiles fixdoc -func (b *Builder) archiveCompiledFiles(buildPath *paths.Path, archiveFile *paths.Path, objectFilesToArchive paths.PathList) (*paths.Path, error) { - archiveFilePath := buildPath.JoinPath(archiveFile) - +func (b *Builder) archiveCompiledFiles(archiveFilePath *paths.Path, objectFilesToArchive paths.PathList) (*paths.Path, error) { if b.onlyUpdateCompilationDatabase { - if b.logger.Verbose() { - b.logger.Info(tr("Skipping archive creation of: %[1]s", archiveFilePath)) + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { + b.logger.Info(i18n.Tr("Skipping archive creation of: %[1]s", archiveFilePath)) } return archiveFilePath, nil } @@ -45,11 +44,11 @@ func (b *Builder) archiveCompiledFiles(buildPath *paths.Path, archiveFile *paths // something changed, rebuild the core archive if rebuildArchive { if err := archiveFilePath.Remove(); err != nil { - return nil, errors.WithStack(err) + return nil, err } } else { - if b.logger.Verbose() { - b.logger.Info(tr("Using previously compiled file: %[1]s", archiveFilePath)) + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { + b.logger.Info(i18n.Tr("Using previously compiled file: %[1]s", archiveFilePath)) } return archiveFilePath, nil } @@ -63,11 +62,11 @@ func (b *Builder) archiveCompiledFiles(buildPath *paths.Path, archiveFile *paths command, err := b.prepareCommandForRecipe(properties, "recipe.ar.pattern", false) if err != nil { - return nil, errors.WithStack(err) + return nil, err } if err := b.execCommand(command); err != nil { - return nil, errors.WithStack(err) + return nil, err } } diff --git a/arduino/builder/build_options_manager.go b/internal/arduino/builder/build_options_manager.go similarity index 87% rename from arduino/builder/build_options_manager.go rename to internal/arduino/builder/build_options_manager.go index 0ff35611934..ebaf97bda28 100644 --- a/arduino/builder/build_options_manager.go +++ b/internal/arduino/builder/build_options_manager.go @@ -17,15 +17,16 @@ package builder import ( "encoding/json" + "fmt" "path/filepath" "strings" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) // buildOptions fixdoc @@ -33,7 +34,6 @@ type buildOptions struct { currentOptions *properties.Map hardwareDirs paths.PathList - builtInToolsDirs paths.PathList otherLibrariesDirs paths.PathList builtInLibrariesDirs *paths.Path buildPath *paths.Path @@ -47,11 +47,11 @@ type buildOptions struct { // newBuildOptions fixdoc func newBuildOptions( - hardwareDirs, builtInToolsDirs, otherLibrariesDirs paths.PathList, + hardwareDirs, otherLibrariesDirs paths.PathList, builtInLibrariesDirs, buildPath *paths.Path, sketch *sketch.Sketch, customBuildProperties []string, - fqbn *cores.FQBN, + fqbn *fqbn.FQBN, clean bool, compilerOptimizationFlags string, runtimePlatformPath, buildCorePath *paths.Path, @@ -59,7 +59,6 @@ func newBuildOptions( opts := properties.NewMap() opts.Set("hardwareFolders", strings.Join(hardwareDirs.AsStrings(), ",")) - opts.Set("builtInToolsFolders", strings.Join(builtInToolsDirs.AsStrings(), ",")) opts.Set("otherLibrariesFolders", strings.Join(otherLibrariesDirs.AsStrings(), ",")) opts.SetPath("sketchLocation", sketch.FullPath) opts.Set("fqbn", fqbn.String()) @@ -84,7 +83,6 @@ func newBuildOptions( return &buildOptions{ currentOptions: opts, hardwareDirs: hardwareDirs, - builtInToolsDirs: builtInToolsDirs, otherLibrariesDirs: otherLibrariesDirs, builtInLibrariesDirs: builtInLibrariesDirs, buildPath: buildPath, @@ -100,7 +98,7 @@ func newBuildOptions( func (b *Builder) createBuildOptionsJSON() error { buildOptionsJSON, err := json.MarshalIndent(b.buildOptions.currentOptions, "", " ") if err != nil { - return errors.WithStack(err) + return err } return b.buildOptions.buildPath.Join("build.options.json").WriteFile(buildOptionsJSON) } @@ -110,10 +108,10 @@ func (b *Builder) wipeBuildPath() error { // control when this should be printed. // logger.Println(constants.LOG_LEVEL_INFO, constants.MSG_BUILD_OPTIONS_CHANGED + constants.MSG_REBUILD_ALL) if err := b.buildOptions.buildPath.RemoveAll(); err != nil { - return errors.WithMessage(err, tr("cleaning build path")) + return fmt.Errorf("%s: %w", i18n.Tr("cleaning build path"), err) } if err := b.buildOptions.buildPath.MkdirAll(); err != nil { - return errors.WithMessage(err, tr("cleaning build path")) + return fmt.Errorf("%s: %w", i18n.Tr("cleaning build path"), err) } return nil } @@ -125,11 +123,11 @@ func (b *Builder) wipeBuildPathIfBuildOptionsChanged() error { // Load previous build options map var buildOptionsJSONPrevious []byte - var _err error if buildOptionsFile := b.buildOptions.buildPath.Join("build.options.json"); buildOptionsFile.Exist() { - buildOptionsJSONPrevious, _err = buildOptionsFile.ReadFile() - if _err != nil { - return errors.WithStack(_err) + var err error + buildOptionsJSONPrevious, err = buildOptionsFile.ReadFile() + if err != nil { + return err } } @@ -139,7 +137,7 @@ func (b *Builder) wipeBuildPathIfBuildOptionsChanged() error { var prevOpts *properties.Map if err := json.Unmarshal(buildOptionsJSONPrevious, &prevOpts); err != nil || prevOpts == nil { - b.logger.Info(tr("%[1]s invalid, rebuilding all", "build.options.json")) + b.logger.Info(i18n.Tr("%[1]s invalid, rebuilding all", "build.options.json")) return b.wipeBuildPath() } diff --git a/arduino/builder/builder.go b/internal/arduino/builder/builder.go similarity index 82% rename from arduino/builder/builder.go rename to internal/arduino/builder/builder.go index 51646bdcf48..0c711273a5d 100644 --- a/arduino/builder/builder.go +++ b/internal/arduino/builder/builder.go @@ -16,6 +16,7 @@ package builder import ( + "context" "errors" "fmt" "io" @@ -23,16 +24,18 @@ import ( "path/filepath" "strings" - "github.com/arduino/arduino-cli/arduino/builder/internal/compilation" - "github.com/arduino/arduino-cli/arduino/builder/internal/detector" - "github.com/arduino/arduino-cli/arduino/builder/internal/logger" - "github.com/arduino/arduino-cli/arduino/builder/internal/progress" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/executils" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/compilation" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/detector" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/diagnostics" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/progress" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" @@ -43,6 +46,8 @@ var ErrSketchCannotBeLocatedInBuildPath = errors.New("sketch cannot be located i // Builder is a Sketch builder. type Builder struct { + ctx context.Context + sketch *sketch.Sketch buildProperties *properties.Map @@ -58,7 +63,8 @@ type Builder struct { customBuildProperties []string // core related - coreBuildCachePath *paths.Path + coreBuildCachePath *paths.Path + extraCoreBuildCachePaths paths.PathList logger *logger.BuilderLogger clean bool @@ -90,6 +96,10 @@ type Builder struct { buildOptions *buildOptions libsDetector *detector.SketchLibrariesDetector + + toolEnv []string + + diagnosticStore *diagnostics.Store } // buildArtifacts contains the result of various build @@ -107,16 +117,18 @@ type buildArtifacts struct { // NewBuilder creates a sketch Builder. func NewBuilder( + ctx context.Context, sk *sketch.Sketch, boardBuildProperties *properties.Map, buildPath *paths.Path, optimizeForDebug bool, coreBuildCachePath *paths.Path, + extraCoreBuildCachePaths paths.PathList, jobs int, requestBuildProperties []string, - hardwareDirs, builtInToolsDirs, otherLibrariesDirs paths.PathList, + hardwareDirs, otherLibrariesDirs paths.PathList, builtInLibrariesDirs *paths.Path, - fqbn *cores.FQBN, + fqbn *fqbn.FQBN, clean bool, sourceOverrides map[string]string, onlyUpdateCompilationDatabase bool, @@ -124,8 +136,9 @@ func NewBuilder( useCachedLibrariesResolution bool, librariesManager *librariesmanager.LibrariesManager, libraryDirs paths.PathList, - stdout, stderr io.Writer, verbose bool, warningsLevel string, + stdout, stderr io.Writer, verbosity logger.Verbosity, warningsLevel string, progresCB rpc.TaskProgressCB, + toolEnv []string, ) (*Builder, error) { buildProperties := properties.NewMap() if boardBuildProperties != nil { @@ -176,7 +189,7 @@ func NewBuilder( return nil, ErrSketchCannotBeLocatedInBuildPath } - logger := logger.New(stdout, stderr, verbose, warningsLevel) + log := logger.New(stdout, stderr, verbosity, warningsLevel) libsManager, libsResolver, verboseOut, err := detector.LibrariesLoader( useCachedLibrariesResolution, librariesManager, builtInLibrariesDirs, libraryDirs, otherLibrariesDirs, @@ -185,11 +198,13 @@ func NewBuilder( if err != nil { return nil, err } - if logger.Verbose() { - logger.Warn(string(verboseOut)) + if log.VerbosityLevel() == logger.VerbosityVerbose { + log.Warn(string(verboseOut)) } - return &Builder{ + diagnosticStore := diagnostics.NewStore() + b := &Builder{ + ctx: ctx, sketch: sk, buildProperties: buildProperties, buildPath: buildPath, @@ -199,7 +214,8 @@ func NewBuilder( jobs: jobs, customBuildProperties: customBuildPropertiesArgs, coreBuildCachePath: coreBuildCachePath, - logger: logger, + extraCoreBuildCachePaths: extraCoreBuildCachePaths, + logger: log, clean: clean, sourceOverrides: sourceOverrides, onlyUpdateCompilationDatabase: onlyUpdateCompilationDatabase, @@ -209,14 +225,9 @@ func NewBuilder( buildArtifacts: &buildArtifacts{}, targetPlatform: targetPlatform, actualPlatform: actualPlatform, - libsDetector: detector.NewSketchLibrariesDetector( - libsManager, libsResolver, - useCachedLibrariesResolution, - onlyUpdateCompilationDatabase, - logger, - ), + toolEnv: toolEnv, buildOptions: newBuildOptions( - hardwareDirs, builtInToolsDirs, otherLibrariesDirs, + hardwareDirs, otherLibrariesDirs, builtInLibrariesDirs, buildPath, sk, customBuildPropertiesArgs, @@ -226,7 +237,16 @@ func NewBuilder( buildProperties.GetPath("runtime.platform.path"), buildProperties.GetPath("build.core.path"), // TODO can we buildCorePath ? ), - }, nil + diagnosticStore: diagnosticStore, + libsDetector: detector.NewSketchLibrariesDetector( + libsManager, libsResolver, + useCachedLibrariesResolution, + onlyUpdateCompilationDatabase, + log, + diagnosticStore, + ), + } + return b, nil } // GetBuildProperties returns the build properties for running this build @@ -249,6 +269,11 @@ func (b *Builder) ImportedLibraries() libraries.List { return b.libsDetector.ImportedLibraries() } +// CompilerDiagnostics returns the parsed compiler diagnostics +func (b *Builder) CompilerDiagnostics() diagnostics.Diagnostics { + return b.diagnosticStore.Diagnostics() +} + // Preprocess fixdoc func (b *Builder) Preprocess() ([]byte, error) { b.Progress.AddSubSteps(6) @@ -286,8 +311,9 @@ func (b *Builder) preprocess() error { } b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Detecting libraries used...")) + b.logIfVerbose(false, i18n.Tr("Detecting libraries used...")) err := b.libsDetector.FindIncludes( + b.ctx, b.buildPath, b.buildProperties.GetPath("build.core.path"), b.buildProperties.GetPath("build.variant.path"), @@ -305,7 +331,7 @@ func (b *Builder) preprocess() error { b.warnAboutArchIncompatibleLibraries(b.libsDetector.ImportedLibraries()) b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Generating function prototypes...")) + b.logIfVerbose(false, i18n.Tr("Generating function prototypes...")) if err := b.preprocessSketch(b.libsDetector.IncludeFolders()); err != nil { return err } @@ -315,7 +341,7 @@ func (b *Builder) preprocess() error { } func (b *Builder) logIfVerbose(warn bool, msg string) { - if !b.logger.Verbose() { + if b.logger.VerbosityLevel() != logger.VerbosityVerbose { return } if warn { @@ -327,7 +353,10 @@ func (b *Builder) logIfVerbose(warn bool, msg string) { // Build fixdoc func (b *Builder) Build() error { - b.Progress.AddSubSteps(6 /** preprocess **/ + 21 /** build **/) + b.Progress.AddSubSteps(6 + // preprocess + 18 + // build + 1, // size + ) defer b.Progress.RemoveSubSteps() if err := b.preprocess(); err != nil { @@ -337,18 +366,10 @@ func (b *Builder) Build() error { buildErr := b.build() b.libsDetector.PrintUsedAndNotUsedLibraries(buildErr != nil) - b.Progress.CompleteStep() - b.printUsedLibraries(b.libsDetector.ImportedLibraries()) - b.Progress.CompleteStep() - if buildErr != nil { return buildErr } - if err := b.exportProjectCMake(b.libsDetector.ImportedLibraries(), b.libsDetector.IncludeFolders()); err != nil { - return err - } - b.Progress.CompleteStep() if err := b.size(); err != nil { return err @@ -360,7 +381,7 @@ func (b *Builder) Build() error { // Build fixdoc func (b *Builder) build() error { - b.logIfVerbose(false, tr("Compiling sketch...")) + b.logIfVerbose(false, i18n.Tr("Compiling sketch...")) if err := b.RunRecipe("recipe.hooks.sketch.prebuild", ".pattern", false); err != nil { return err } @@ -376,7 +397,7 @@ func (b *Builder) build() error { } b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Compiling libraries...")) + b.logIfVerbose(false, i18n.Tr("Compiling libraries...")) if err := b.RunRecipe("recipe.hooks.libraries.prebuild", ".pattern", false); err != nil { return err } @@ -397,7 +418,7 @@ func (b *Builder) build() error { } b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Compiling core...")) + b.logIfVerbose(false, i18n.Tr("Compiling core...")) if err := b.RunRecipe("recipe.hooks.core.prebuild", ".pattern", false); err != nil { return err } @@ -413,7 +434,7 @@ func (b *Builder) build() error { } b.Progress.CompleteStep() - b.logIfVerbose(false, tr("Linking everything together...")) + b.logIfVerbose(false, i18n.Tr("Linking everything together...")) if err := b.RunRecipe("recipe.hooks.linking.prelink", ".pattern", false); err != nil { return err } @@ -460,10 +481,10 @@ func (b *Builder) build() error { return nil } -func (b *Builder) prepareCommandForRecipe(buildProperties *properties.Map, recipe string, removeUnsetProperties bool) (*executils.Process, error) { +func (b *Builder) prepareCommandForRecipe(buildProperties *properties.Map, recipe string, removeUnsetProperties bool) (*paths.Process, error) { pattern := buildProperties.Get(recipe) if pattern == "" { - return nil, fmt.Errorf(tr("%[1]s pattern is missing"), recipe) + return nil, errors.New(i18n.Tr("%[1]s pattern is missing", recipe)) } commandLine := buildProperties.ExpandPropsInString(pattern) @@ -493,7 +514,7 @@ func (b *Builder) prepareCommandForRecipe(buildProperties *properties.Map, recip } } - command, err := executils.NewProcess(nil, parts...) + command, err := paths.NewProcess(b.toolEnv, parts...) if err != nil { return nil, err } @@ -504,8 +525,8 @@ func (b *Builder) prepareCommandForRecipe(buildProperties *properties.Map, recip return command, nil } -func (b *Builder) execCommand(command *executils.Process) error { - if b.logger.Verbose() { +func (b *Builder) execCommand(command *paths.Process) error { + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { b.logger.Info(utils.PrintableCommand(command.GetArgs())) command.RedirectStdoutTo(b.logger.Stdout()) } diff --git a/arduino/builder/compilation.go b/internal/arduino/builder/compilation.go similarity index 82% rename from arduino/builder/compilation.go rename to internal/arduino/builder/compilation.go index e3c70900bf6..c739a2e37de 100644 --- a/arduino/builder/compilation.go +++ b/internal/arduino/builder/compilation.go @@ -22,10 +22,11 @@ import ( "strings" "sync" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" ) func (b *Builder) compileFiles( @@ -104,7 +105,7 @@ func (b *Builder) compileFiles( wg.Wait() if len(errorsList) > 0 { // output the first error - return nil, errors.WithStack(errorsList[0]) + return nil, errorsList[0] } objectFiles.Sort() return objectFiles, nil @@ -124,7 +125,7 @@ func (b *Builder) compileFileWithRecipe( properties.SetPath("source_file", source) relativeSource, err := sourcePath.RelTo(source) if err != nil { - return nil, errors.WithStack(err) + return nil, err } depsFile := buildPath.Join(relativeSource.String() + ".d") objectFile := buildPath.Join(relativeSource.String() + ".o") @@ -132,17 +133,17 @@ func (b *Builder) compileFileWithRecipe( properties.SetPath("object_file", objectFile) err = objectFile.Parent().MkdirAll() if err != nil { - return nil, errors.WithStack(err) + return nil, err } objIsUpToDate, err := utils.ObjFileIsUpToDate(source, objectFile, depsFile) if err != nil { - return nil, errors.WithStack(err) + return nil, err } command, err := b.prepareCommandForRecipe(properties, recipe, false) if err != nil { - return nil, errors.WithStack(err) + return nil, err } if b.compilationDatabase != nil { b.compilationDatabase.Add(source, command) @@ -152,7 +153,7 @@ func (b *Builder) compileFileWithRecipe( command.RedirectStdoutTo(commandStdout) command.RedirectStderrTo(commandStderr) - if b.logger.Verbose() { + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { b.logger.Info(utils.PrintableCommand(command.GetArgs())) } // Since this compile could be multithreaded, we first capture the command output @@ -161,20 +162,26 @@ func (b *Builder) compileFileWithRecipe( } err := command.Wait() // and transfer all at once at the end... - if b.logger.Verbose() { + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { b.logger.WriteStdout(commandStdout.Bytes()) } b.logger.WriteStderr(commandStderr.Bytes()) + // Parse the output of the compiler to gather errors and warnings... + if b.diagnosticStore != nil { + b.diagnosticStore.Parse(command.GetArgs(), commandStdout.Bytes()) + b.diagnosticStore.Parse(command.GetArgs(), commandStderr.Bytes()) + } + // ...and then return the error if err != nil { - return nil, errors.WithStack(err) + return nil, err } - } else if b.logger.Verbose() { + } else if b.logger.VerbosityLevel() == logger.VerbosityVerbose { if objIsUpToDate { - b.logger.Info(tr("Using previously compiled file: %[1]s", objectFile)) + b.logger.Info(i18n.Tr("Using previously compiled file: %[1]s", objectFile)) } else { - b.logger.Info(tr("Skipping compile of: %[1]s", objectFile)) + b.logger.Info(i18n.Tr("Skipping compile of: %[1]s", objectFile)) } } diff --git a/arduino/builder/core.go b/internal/arduino/builder/core.go similarity index 59% rename from arduino/builder/core.go rename to internal/arduino/builder/core.go index 7d61d962f18..c6d87ec7d66 100644 --- a/arduino/builder/core.go +++ b/internal/arduino/builder/core.go @@ -18,39 +18,40 @@ package builder import ( "crypto/md5" "encoding/hex" - "fmt" + "errors" "os" "strings" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/buildcache" - f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/buildcache" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" + "go.bug.st/f" ) // buildCore fixdoc func (b *Builder) buildCore() error { if err := b.coreBuildPath.MkdirAll(); err != nil { - return errors.WithStack(err) + return err } if b.coreBuildCachePath != nil { if _, err := b.coreBuildCachePath.RelTo(b.buildPath); err != nil { - b.logger.Info(tr("Couldn't deeply cache core build: %[1]s", err)) - b.logger.Info(tr("Running normal build of the core...")) + b.logger.Info(i18n.Tr("Couldn't deeply cache core build: %[1]s", err)) + b.logger.Info(i18n.Tr("Running normal build of the core...")) // TODO decide if we want to override this or not. (It's only used by the // compileCore function). b.coreBuildCachePath = nil } else if err := b.coreBuildCachePath.MkdirAll(); err != nil { - return errors.WithStack(err) + return err } } archiveFile, objectFiles, err := b.compileCore() if err != nil { - return errors.WithStack(err) + return err } b.buildArtifacts.coreObjectsFiles = objectFiles b.buildArtifacts.coreArchiveFilePath = archiveFile @@ -77,7 +78,7 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) { includes, ) if err != nil { - return nil, nil, errors.WithStack(err) + return nil, nil, err } } @@ -89,34 +90,56 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) { b.buildProperties.Get("compiler.optimization_flags"), realCoreFolder, ) - targetArchivedCore = b.coreBuildCachePath.Join(archivedCoreName, "core.a") - - if _, err := buildcache.New(b.coreBuildCachePath).GetOrCreate(archivedCoreName); errors.Is(err, buildcache.CreateDirErr) { - return nil, nil, fmt.Errorf(tr("creating core cache folder: %s", err)) - } - var canUseArchivedCore bool - if b.onlyUpdateCompilationDatabase || b.clean { - canUseArchivedCore = false - } else if isOlder, err := utils.DirContentIsOlderThan(realCoreFolder, targetArchivedCore); err != nil || !isOlder { - // Recreate the archive if ANY of the core files (including platform.txt) has changed - canUseArchivedCore = false - } else if targetCoreFolder == nil || realCoreFolder.EquivalentTo(targetCoreFolder) { - canUseArchivedCore = true - } else if isOlder, err := utils.DirContentIsOlderThan(targetCoreFolder, targetArchivedCore); err != nil || !isOlder { - // Recreate the archive if ANY of the build core files (including platform.txt) has changed - canUseArchivedCore = false - } else { - canUseArchivedCore = true + canUseArchivedCore := func(archivedCore *paths.Path) bool { + if b.onlyUpdateCompilationDatabase || b.clean { + return false + } + if isOlder, err := utils.DirContentIsOlderThan(realCoreFolder, archivedCore); err != nil || !isOlder { + // Recreate the archive if ANY of the core files (including platform.txt) has changed + return false + } + if targetCoreFolder == nil || realCoreFolder.EquivalentTo(targetCoreFolder) { + return true + } + if isOlder, err := utils.DirContentIsOlderThan(targetCoreFolder, archivedCore); err != nil || !isOlder { + // Recreate the archive if ANY of the build core files (including platform.txt) has changed + return false + } + return true } - if canUseArchivedCore { + // If there is an archived core in the current build cache, use it + targetArchivedCore = b.coreBuildCachePath.Join(archivedCoreName, "core.a") + if canUseArchivedCore(targetArchivedCore) { + // Extend the build cache expiration time + if _, err := buildcache.New(b.coreBuildCachePath).GetOrCreate(archivedCoreName); errors.Is(err, buildcache.CreateDirErr) { + return nil, nil, errors.New(i18n.Tr("creating core cache folder: %s", err)) + } // use archived core - if b.logger.Verbose() { - b.logger.Info(tr("Using precompiled core: %[1]s", targetArchivedCore)) + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { + b.logger.Info(i18n.Tr("Using precompiled core: %[1]s", targetArchivedCore)) } return targetArchivedCore, variantObjectFiles, nil } + + // Otherwise try the extra build cache paths to see if there is a precompiled core + // that can be used + for _, extraCoreBuildCachePath := range b.extraCoreBuildCachePaths { + extraTargetArchivedCore := extraCoreBuildCachePath.Join(archivedCoreName, "core.a") + if canUseArchivedCore(extraTargetArchivedCore) { + // use archived core + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { + b.logger.Info(i18n.Tr("Using precompiled core: %[1]s", extraTargetArchivedCore)) + } + return extraTargetArchivedCore, variantObjectFiles, nil + } + } + + // Create the build cache folder for the core + if _, err := buildcache.New(b.coreBuildCachePath).GetOrCreate(archivedCoreName); errors.Is(err, buildcache.CreateDirErr) { + return nil, nil, errors.New(i18n.Tr("creating core cache folder: %s", err)) + } } coreObjectFiles, err := b.compileFiles( @@ -125,26 +148,26 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) { includes, ) if err != nil { - return nil, nil, errors.WithStack(err) + return nil, nil, err } - archiveFile, err := b.archiveCompiledFiles(b.coreBuildPath, paths.New("core.a"), coreObjectFiles) + archiveFile, err := b.archiveCompiledFiles(b.coreBuildPath.Join("core.a"), coreObjectFiles) if err != nil { - return nil, nil, errors.WithStack(err) + return nil, nil, err } // archive core.a if targetArchivedCore != nil && !b.onlyUpdateCompilationDatabase { err := archiveFile.CopyTo(targetArchivedCore) - if b.logger.Verbose() { + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { if err == nil { - b.logger.Info(tr("Archiving built core (caching) in: %[1]s", targetArchivedCore)) + b.logger.Info(i18n.Tr("Archiving built core (caching) in: %[1]s", targetArchivedCore)) } else if os.IsNotExist(err) { - b.logger.Info(tr("Unable to cache built core, please tell %[1]s maintainers to follow %[2]s", + b.logger.Info(i18n.Tr("Unable to cache built core, please tell %[1]s maintainers to follow %[2]s", b.actualPlatform, "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-build-the-corea-archive-file")) } else { - b.logger.Info(tr("Error archiving built core (caching) in %[1]s: %[2]s", targetArchivedCore, err)) + b.logger.Info(i18n.Tr("Error archiving built core (caching) in %[1]s: %[2]s", targetArchivedCore, err)) } } } diff --git a/arduino/builder/cpp/cpp.go b/internal/arduino/builder/cpp/cpp.go similarity index 100% rename from arduino/builder/cpp/cpp.go rename to internal/arduino/builder/cpp/cpp.go diff --git a/arduino/builder/cpp/cpp_test.go b/internal/arduino/builder/cpp/cpp_test.go similarity index 97% rename from arduino/builder/cpp/cpp_test.go rename to internal/arduino/builder/cpp/cpp_test.go index b6ae543f558..400e3d1f02e 100644 --- a/arduino/builder/cpp/cpp_test.go +++ b/internal/arduino/builder/cpp/cpp_test.go @@ -18,7 +18,7 @@ package cpp_test import ( "testing" - "github.com/arduino/arduino-cli/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" "github.com/stretchr/testify/require" ) diff --git a/arduino/builder/internal/compilation/database.go b/internal/arduino/builder/internal/compilation/database.go similarity index 73% rename from arduino/builder/internal/compilation/database.go rename to internal/arduino/builder/internal/compilation/database.go index f6a6b1ab5f0..3d20d277fab 100644 --- a/arduino/builder/internal/compilation/database.go +++ b/internal/arduino/builder/internal/compilation/database.go @@ -19,18 +19,17 @@ import ( "encoding/json" "fmt" "os" + "sync" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" ) -var tr = i18n.Tr - // Database keeps track of all the compile commands run by the builder type Database struct { - Contents []Command - File *paths.Path + lock sync.Mutex + contents []Command + file *paths.Path } // Command keeps track of a single run of a compile command @@ -44,8 +43,8 @@ type Command struct { // NewDatabase creates an empty CompilationDatabase func NewDatabase(filename *paths.Path) *Database { return &Database{ - File: filename, - Contents: []Command{}, + file: filename, + contents: []Command{}, } } @@ -56,29 +55,31 @@ func LoadDatabase(file *paths.Path) (*Database, error) { return nil, err } res := NewDatabase(file) - return res, json.Unmarshal(f, &res.Contents) + return res, json.Unmarshal(f, &res.contents) } // SaveToFile save the CompilationDatabase to file as a clangd-compatible compile_commands.json, // see https://clang.llvm.org/docs/JSONCompilationDatabase.html func (db *Database) SaveToFile() { - if jsonContents, err := json.MarshalIndent(db.Contents, "", " "); err != nil { - fmt.Println(tr("Error serializing compilation database: %s", err)) + db.lock.Lock() + defer db.lock.Unlock() + if jsonContents, err := json.MarshalIndent(db.contents, "", " "); err != nil { + fmt.Println(i18n.Tr("Error serializing compilation database: %s", err)) return - } else if err := db.File.WriteFile(jsonContents); err != nil { - fmt.Println(tr("Error writing compilation database: %s", err)) + } else if err := db.file.WriteFile(jsonContents); err != nil { + fmt.Println(i18n.Tr("Error writing compilation database: %s", err)) } } // Add adds a new CompilationDatabase entry -func (db *Database) Add(target *paths.Path, command *executils.Process) { +func (db *Database) Add(target *paths.Path, command *paths.Process) { commandDir := command.GetDir() if commandDir == "" { // This mimics what Cmd.Run also does: Use Dir if specified, // current directory otherwise dir, err := os.Getwd() if err != nil { - fmt.Println(tr("Error getting current directory for compilation database: %s", err)) + fmt.Println(i18n.Tr("Error getting current directory for compilation database: %s", err)) } commandDir = dir } @@ -89,5 +90,7 @@ func (db *Database) Add(target *paths.Path, command *executils.Process) { File: target.String(), } - db.Contents = append(db.Contents, entry) + db.lock.Lock() + db.contents = append(db.contents, entry) + db.lock.Unlock() } diff --git a/arduino/builder/internal/compilation/database_test.go b/internal/arduino/builder/internal/compilation/database_test.go similarity index 77% rename from arduino/builder/internal/compilation/database_test.go rename to internal/arduino/builder/internal/compilation/database_test.go index 26badfc6cb2..dde90738d91 100644 --- a/arduino/builder/internal/compilation/database_test.go +++ b/internal/arduino/builder/internal/compilation/database_test.go @@ -18,7 +18,6 @@ package compilation import ( "testing" - "github.com/arduino/arduino-cli/executils" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" ) @@ -28,7 +27,7 @@ func TestCompilationDatabase(t *testing.T) { require.NoError(t, err) defer tmpfile.Remove() - cmd, err := executils.NewProcess(nil, "gcc", "arg1", "arg2") + cmd, err := paths.NewProcess(nil, "gcc", "arg1", "arg2") require.NoError(t, err) db := NewDatabase(tmpfile) db.Add(paths.New("test"), cmd) @@ -37,11 +36,11 @@ func TestCompilationDatabase(t *testing.T) { db2, err := LoadDatabase(tmpfile) require.NoError(t, err) require.Equal(t, db, db2) - require.Len(t, db2.Contents, 1) - require.Equal(t, db2.Contents[0].File, "test") - require.Equal(t, db2.Contents[0].Command, "") - require.Equal(t, db2.Contents[0].Arguments, []string{"gcc", "arg1", "arg2"}) + require.Len(t, db2.contents, 1) + require.Equal(t, db2.contents[0].File, "test") + require.Equal(t, db2.contents[0].Command, "") + require.Equal(t, db2.contents[0].Arguments, []string{"gcc", "arg1", "arg2"}) cwd, err := paths.Getwd() require.NoError(t, err) - require.Equal(t, db2.Contents[0].Directory, cwd.String()) + require.Equal(t, db2.contents[0].Directory, cwd.String()) } diff --git a/arduino/builder/internal/detector/detector.go b/internal/arduino/builder/internal/detector/detector.go similarity index 79% rename from arduino/builder/internal/detector/detector.go rename to internal/arduino/builder/internal/detector/detector.go index 2c5f836374b..a983370b075 100644 --- a/arduino/builder/internal/detector/detector.go +++ b/internal/arduino/builder/internal/detector/detector.go @@ -17,7 +17,9 @@ package detector import ( "bytes" + "context" "encoding/json" + "errors" "fmt" "os/exec" "regexp" @@ -25,23 +27,21 @@ import ( "strings" "time" - "github.com/arduino/arduino-cli/arduino/builder/internal/logger" - "github.com/arduino/arduino-cli/arduino/builder/internal/preprocessor" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/libraries/librariesresolver" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/diagnostics" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/preprocessor" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" + "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesresolver" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) -var tr = i18n.Tr - type libraryResolutionResult struct { Library *libraries.Library NotUsedLibraries []*libraries.Library @@ -57,6 +57,7 @@ type SketchLibrariesDetector struct { librariesResolutionResults map[string]libraryResolutionResult includeFolders paths.PathList logger *logger.BuilderLogger + diagnosticStore *diagnostics.Store } // NewSketchLibrariesDetector todo @@ -66,6 +67,7 @@ func NewSketchLibrariesDetector( useCachedLibrariesResolution bool, onlyUpdateCompilationDatabase bool, logger *logger.BuilderLogger, + diagnosticStore *diagnostics.Store, ) *SketchLibrariesDetector { return &SketchLibrariesDetector{ librariesManager: lm, @@ -76,6 +78,7 @@ func NewSketchLibrariesDetector( includeFolders: paths.PathList{}, onlyUpdateCompilationDatabase: onlyUpdateCompilationDatabase, logger: logger, + diagnosticStore: diagnosticStore, } } @@ -84,10 +87,10 @@ func (l *SketchLibrariesDetector) resolveLibrary(header, platformArch string) *l importedLibraries := l.importedLibraries candidates := l.librariesResolver.AlternativesFor(header) - if l.logger.Verbose() { - l.logger.Info(tr("Alternatives for %[1]s: %[2]s", header, candidates)) + if l.logger.VerbosityLevel() == logger.VerbosityVerbose { + l.logger.Info(i18n.Tr("Alternatives for %[1]s: %[2]s", header, candidates)) l.logger.Info(fmt.Sprintf("ResolveLibrary(%s)", header)) - l.logger.Info(fmt.Sprintf(" -> %s: %s", tr("candidates"), candidates)) + l.logger.Info(fmt.Sprintf(" -> %s: %s", i18n.Tr("candidates"), candidates)) } if len(candidates) == 0 { @@ -141,7 +144,7 @@ func (l *SketchLibrariesDetector) PrintUsedAndNotUsedLibraries(sketchError bool) // - as warning, when the sketch didn't compile // - as info, when verbose is on // - otherwise, output nothing - if !sketchError && !l.logger.Verbose() { + if !sketchError && l.logger.VerbosityLevel() != logger.VerbosityVerbose { return } @@ -150,10 +153,10 @@ func (l *SketchLibrariesDetector) PrintUsedAndNotUsedLibraries(sketchError bool) if len(libResResult.NotUsedLibraries) == 0 { continue } - res += fmt.Sprintln(tr(`Multiple libraries were found for "%[1]s"`, header)) - res += fmt.Sprintln(" " + tr("Used: %[1]s", libResResult.Library.InstallDir)) + res += fmt.Sprintln(i18n.Tr(`Multiple libraries were found for "%[1]s"`, header)) + res += fmt.Sprintln(" " + i18n.Tr("Used: %[1]s", libResResult.Library.InstallDir)) for _, notUsedLibrary := range libResResult.NotUsedLibraries { - res += fmt.Sprintln(" " + tr("Not used: %[1]s", notUsedLibrary.InstallDir)) + res += fmt.Sprintln(" " + i18n.Tr("Not used: %[1]s", notUsedLibrary.InstallDir)) } } res = strings.TrimSpace(res) @@ -192,6 +195,7 @@ func (l *SketchLibrariesDetector) appendIncludeFolder( // FindIncludes todo func (l *SketchLibrariesDetector) FindIncludes( + ctx context.Context, buildPath *paths.Path, buildCorePath *paths.Path, buildVariantPath *paths.Path, @@ -201,13 +205,13 @@ func (l *SketchLibrariesDetector) FindIncludes( buildProperties *properties.Map, platformArch string, ) error { - err := l.findIncludes(buildPath, buildCorePath, buildVariantPath, sketchBuildPath, sketch, librariesBuildPath, buildProperties, platformArch) + err := l.findIncludes(ctx, buildPath, buildCorePath, buildVariantPath, sketchBuildPath, sketch, librariesBuildPath, buildProperties, platformArch) if err != nil && l.onlyUpdateCompilationDatabase { l.logger.Info( fmt.Sprintf( "%s: %s", - tr("An error occurred detecting libraries"), - tr("the compilation database may be incomplete or inaccurate"), + i18n.Tr("An error occurred detecting libraries"), + i18n.Tr("the compilation database may be incomplete or inaccurate"), ), ) return nil @@ -216,6 +220,7 @@ func (l *SketchLibrariesDetector) FindIncludes( } func (l *SketchLibrariesDetector) findIncludes( + ctx context.Context, buildPath *paths.Path, buildCorePath *paths.Path, buildVariantPath *paths.Path, @@ -231,11 +236,10 @@ func (l *SketchLibrariesDetector) findIncludes( if err != nil { return err } - includeFolders := l.includeFolders - if err := json.Unmarshal(d, &includeFolders); err != nil { + if err := json.Unmarshal(d, &l.includeFolders); err != nil { return err } - if l.logger.Verbose() { + if l.logger.VerbosityLevel() == logger.VerbosityVerbose { l.logger.Info("Using cached library discovery: " + librariesResolutionCache.String()) } return nil @@ -255,7 +259,7 @@ func (l *SketchLibrariesDetector) findIncludes( sketch := sketch mergedfile, err := makeSourceFile(sketchBuildPath, sketchBuildPath, paths.New(sketch.MainFile.Base()+".cpp")) if err != nil { - return errors.WithStack(err) + return err } sourceFileQueue.push(mergedfile) @@ -266,22 +270,22 @@ func (l *SketchLibrariesDetector) findIncludes( } for !sourceFileQueue.empty() { - err := l.findIncludesUntilDone(cache, sourceFileQueue, buildProperties, sketchBuildPath, librariesBuildPath, platformArch) + err := l.findIncludesUntilDone(ctx, cache, sourceFileQueue, buildProperties, librariesBuildPath, platformArch) if err != nil { cachePath.Remove() - return errors.WithStack(err) + return err } } // Finalize the cache cache.ExpectEnd() if err := writeCache(cache, cachePath); err != nil { - return errors.WithStack(err) + return err } } if err := l.failIfImportedLibraryIsWrong(); err != nil { - return errors.WithStack(err) + return err } if d, err := json.Marshal(l.includeFolders); err != nil { @@ -294,10 +298,10 @@ func (l *SketchLibrariesDetector) findIncludes( } func (l *SketchLibrariesDetector) findIncludesUntilDone( + ctx context.Context, cache *includeCache, sourceFileQueue *uniqueSourceFileQueue, buildProperties *properties.Map, - sketchBuildPath *paths.Path, librariesBuildPath *paths.Path, platformArch string, ) error { @@ -321,7 +325,7 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone( // remove the object file if it is found to be stale? unchanged, err := utils.ObjFileIsUpToDate(sourcePath, objPath, depPath) if err != nil { - return errors.WithStack(err) + return err } first := true @@ -338,31 +342,31 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone( } var preprocErr error - var preprocStderr []byte + var preprocFirstResult preprocessor.Result var missingIncludeH string if unchanged && cache.valid { missingIncludeH = cache.Next().Include - if first && l.logger.Verbose() { - l.logger.Info(tr("Using cached library dependencies for file: %[1]s", sourcePath)) + if first && l.logger.VerbosityLevel() == logger.VerbosityVerbose { + l.logger.Info(i18n.Tr("Using cached library dependencies for file: %[1]s", sourcePath)) } } else { - var preprocStdout []byte - preprocStdout, preprocStderr, preprocErr = preprocessor.GCC(sourcePath, targetFilePath, includeFolders, buildProperties) - if l.logger.Verbose() { - l.logger.WriteStdout(preprocStdout) + preprocFirstResult, preprocErr = preprocessor.GCC(ctx, sourcePath, targetFilePath, includeFolders, buildProperties) + if l.logger.VerbosityLevel() == logger.VerbosityVerbose { + l.logger.WriteStdout(preprocFirstResult.Stdout()) } // Unwrap error and see if it is an ExitError. + var exitErr *exec.ExitError if preprocErr == nil { // Preprocessor successful, done missingIncludeH = "" - } else if _, isExitErr := errors.Cause(preprocErr).(*exec.ExitError); !isExitErr || preprocStderr == nil { + } else if isExitErr := errors.As(preprocErr, &exitErr); !isExitErr || preprocFirstResult.Stderr() == nil { // Ignore ExitErrors (e.g. gcc returning non-zero status), but bail out on other errors - return errors.WithStack(preprocErr) + return preprocErr } else { - missingIncludeH = IncludesFinderWithRegExp(string(preprocStderr)) - if missingIncludeH == "" && l.logger.Verbose() { - l.logger.Info(tr("Error while detecting libraries included by %[1]s", sourcePath)) + missingIncludeH = IncludesFinderWithRegExp(string(preprocFirstResult.Stderr())) + if missingIncludeH == "" && l.logger.VerbosityLevel() == logger.VerbosityVerbose { + l.logger.Info(i18n.Tr("Error while detecting libraries included by %[1]s", sourcePath)) } } } @@ -376,23 +380,26 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone( library := l.resolveLibrary(missingIncludeH, platformArch) if library == nil { // Library could not be resolved, show error - if preprocErr == nil || preprocStderr == nil { + if preprocErr == nil || preprocFirstResult.Stderr() == nil { // Filename came from cache, so run preprocessor to obtain error to show - var preprocStdout []byte - preprocStdout, preprocStderr, preprocErr = preprocessor.GCC(sourcePath, targetFilePath, includeFolders, buildProperties) - if l.logger.Verbose() { - l.logger.WriteStdout(preprocStdout) + result, err := preprocessor.GCC(ctx, sourcePath, targetFilePath, includeFolders, buildProperties) + if l.logger.VerbosityLevel() == logger.VerbosityVerbose { + l.logger.WriteStdout(result.Stdout()) } - if preprocErr == nil { + if err == nil { // If there is a missing #include in the cache, but running // gcc does not reproduce that, there is something wrong. // Returning an error here will cause the cache to be // deleted, so hopefully the next compilation will succeed. - return errors.New(tr("Internal error in cache")) + return errors.New(i18n.Tr("Internal error in cache")) } + l.diagnosticStore.Parse(result.Args(), result.Stderr()) + l.logger.WriteStderr(result.Stderr()) + return err } - l.logger.WriteStderr(preprocStderr) - return errors.WithStack(preprocErr) + l.diagnosticStore.Parse(preprocFirstResult.Args(), preprocFirstResult.Stderr()) + l.logger.WriteStderr(preprocFirstResult.Stderr()) + return preprocErr } // Add this library to the list of libraries, the @@ -403,8 +410,8 @@ func (l *SketchLibrariesDetector) findIncludesUntilDone( if library.Precompiled && library.PrecompiledWithSources { // Fully precompiled libraries should have no dependencies to avoid ABI breakage - if l.logger.Verbose() { - l.logger.Info(tr("Skipping dependencies detection for precompiled library %[1]s", library.Name)) + if l.logger.VerbosityLevel() == logger.VerbosityVerbose { + l.logger.Info(i18n.Tr("Skipping dependencies detection for precompiled library %[1]s", library.Name)) } } else { for _, sourceDir := range library.SourceDirs() { @@ -430,13 +437,13 @@ func (l *SketchLibrariesDetector) queueSourceFilesFromFolder( } filePaths, err := utils.FindFilesInFolder(folder, recurse, sourceFileExtensions...) if err != nil { - return errors.WithStack(err) + return err } for _, filePath := range filePaths { sourceFile, err := makeSourceFile(sourceDir, buildDir, filePath, extraIncludePath...) if err != nil { - return errors.WithStack(err) + return err } sourceFileQueue.push(sourceFile) } @@ -452,16 +459,16 @@ func (l *SketchLibrariesDetector) failIfImportedLibraryIsWrong() error { for _, library := range l.importedLibraries { if !library.IsLegacy { if library.InstallDir.Join("arch").IsDir() { - return errors.New(tr("%[1]s folder is no longer supported! See %[2]s for more information", "'arch'", "http://goo.gl/gfFJzU")) + return errors.New(i18n.Tr("%[1]s folder is no longer supported! See %[2]s for more information", "'arch'", "http://goo.gl/gfFJzU")) } for _, propName := range libraries.MandatoryProperties { if !library.Properties.ContainsKey(propName) { - return errors.New(tr("Missing '%[1]s' from library in %[2]s", propName, library.InstallDir)) + return errors.New(i18n.Tr("Missing '%[1]s' from library in %[2]s", propName, library.InstallDir)) } } if library.Layout == libraries.RecursiveLayout { if library.UtilityDir != nil { - return errors.New(tr("Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'.", "src", "utility", library.InstallDir)) + return errors.New(i18n.Tr("Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'.", "src", "utility", library.InstallDir)) } } } @@ -470,8 +477,7 @@ func (l *SketchLibrariesDetector) failIfImportedLibraryIsWrong() error { return nil } -// includeRegexp fixdoc -var includeRegexp = regexp.MustCompile("(?ms)^\\s*#[ \t]*include\\s*[<\"](\\S+)[\">]") +var includeRegexp = regexp.MustCompile(`(?ms)^\s*[0-9 |]*\s*#[ \t]*include\s*[<"](\S+)[">]`) // IncludesFinderWithRegExp fixdoc func IncludesFinderWithRegExp(source string) string { @@ -598,33 +604,56 @@ func LibrariesLoader( if useCachedLibrariesResolution { // Since we are using the cached libraries resolution // the library manager is not needed. - lm = librariesmanager.NewLibraryManager(nil, nil) + lm, _ = librariesmanager.NewBuilder().Build() } if librariesManager == nil { - lm = librariesmanager.NewLibraryManager(nil, nil) + lmb := librariesmanager.NewBuilder() builtInLibrariesFolders := builtInLibrariesDirs if builtInLibrariesFolders != nil { if err := builtInLibrariesFolders.ToAbs(); err != nil { - return nil, nil, nil, errors.WithStack(err) + return nil, nil, nil, err } - lm.AddLibrariesDir(builtInLibrariesFolders, libraries.IDEBuiltIn) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: builtInLibrariesFolders, + Location: libraries.IDEBuiltIn, + }) } if actualPlatform != targetPlatform { - lm.AddPlatformReleaseLibrariesDir(actualPlatform, libraries.ReferencedPlatformBuiltIn) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + PlatformRelease: actualPlatform, + Path: actualPlatform.GetLibrariesDir(), + Location: libraries.ReferencedPlatformBuiltIn, + }) } - lm.AddPlatformReleaseLibrariesDir(targetPlatform, libraries.PlatformBuiltIn) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + PlatformRelease: targetPlatform, + Path: targetPlatform.GetLibrariesDir(), + Location: libraries.PlatformBuiltIn, + }) librariesFolders := otherLibrariesDirs if err := librariesFolders.ToAbs(); err != nil { - return nil, nil, nil, errors.WithStack(err) + return nil, nil, nil, err } for _, folder := range librariesFolders { - lm.AddLibrariesDir(folder, libraries.User) + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: folder, + Location: libraries.User, // XXX: Should be libraries.Unmanaged? + }) + } + + for _, dir := range libraryDirs { + lmb.AddLibrariesDir(librariesmanager.LibrariesDir{ + Path: dir, + Location: libraries.Unmanaged, + IsSingleLibrary: true, + }) } - for _, status := range lm.RescanLibraries() { + newLm, libsLoadingWarnings := lmb.Build() + for _, status := range libsLoadingWarnings { // With the refactoring of the initialization step of the CLI we changed how // errors are returned when loading platforms and libraries, that meant returning a list of // errors instead of a single one to enhance the experience for the user. @@ -633,30 +662,11 @@ func LibrariesLoader( // When we're gonna refactor the legacy package this will be gone. verboseOut.Write([]byte(status.Message())) } - - for _, dir := range libraryDirs { - // Libraries specified this way have top priority - if err := lm.LoadLibraryFromDir(dir, libraries.Unmanaged); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - } + lm = newLm } - resolver := librariesresolver.NewCppResolver() - if err := resolver.ScanIDEBuiltinLibraries(lm); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - if err := resolver.ScanUserAndUnmanagedLibraries(lm); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - if err := resolver.ScanPlatformLibraries(lm, targetPlatform); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - if actualPlatform != targetPlatform { - if err := resolver.ScanPlatformLibraries(lm, actualPlatform); err != nil { - return nil, nil, nil, errors.WithStack(err) - } - } + allLibs := lm.FindAllInstalled() + resolver := librariesresolver.NewCppResolver(allLibs, targetPlatform, actualPlatform) return lm, resolver, verboseOut.Bytes(), nil } @@ -761,11 +771,11 @@ func writeCache(cache *includeCache, path *paths.Path) error { } else { bytes, err := json.MarshalIndent(cache.entries, "", " ") if err != nil { - return errors.WithStack(err) + return err } err = path.WriteFile(bytes) if err != nil { - return errors.WithStack(err) + return err } } return nil diff --git a/arduino/builder/internal/detector/detector_test.go b/internal/arduino/builder/internal/detector/detector_test.go similarity index 86% rename from arduino/builder/internal/detector/detector_test.go rename to internal/arduino/builder/internal/detector/detector_test.go index 2290dc02de6..dbec95ca918 100644 --- a/arduino/builder/internal/detector/detector_test.go +++ b/internal/arduino/builder/internal/detector/detector_test.go @@ -18,7 +18,7 @@ package detector_test import ( "testing" - "github.com/arduino/arduino-cli/arduino/builder/internal/detector" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/detector" "github.com/stretchr/testify/require" ) @@ -75,3 +75,13 @@ func TestIncludesFinderWithRegExpPaddedIncludes4(t *testing.T) { require.Equal(t, "register.h", include) } + +func TestIncludesFinderWithRegExpPaddedIncludes5(t *testing.T) { + output := "/some/path/sketch.ino:23:42: fatal error: 'Foobar.h' file not found\n" + + " 23 | #include \"Foobar.h\"\n" + + " | ^~~~~~~~~~\n" + + include := detector.IncludesFinderWithRegExp(output) + + require.Equal(t, "Foobar.h", include) +} diff --git a/internal/arduino/builder/internal/diagnostics/compiler_detection.go b/internal/arduino/builder/internal/diagnostics/compiler_detection.go new file mode 100644 index 00000000000..e1355006ba2 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/compiler_detection.go @@ -0,0 +1,85 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "bytes" + "path/filepath" + "strings" + + "github.com/arduino/go-paths-helper" + semver "go.bug.st/relaxed-semver" +) + +// DetectedCompiler represents a compiler detected from a given command line +type DetectedCompiler struct { + Name string + Family string + Version *semver.Version + DetailedVersion []string +} + +// This function is overridden for mocking unit tests +var runProcess = func(args ...string) []string { + if cmd, err := paths.NewProcess(nil, args...); err == nil { + out := &bytes.Buffer{} + cmd.RedirectStdoutTo(out) + cmd.Run() + return splitLines(out.Bytes()) + } + return nil +} + +// DetectCompilerFromCommandLine tries to detect a compiler from a given command line. +// If probeCompiler is true, the compiler may be executed with different flags to +// infer the version or capabilities. +func DetectCompilerFromCommandLine(args []string, probeCompiler bool) *DetectedCompiler { + if len(args) == 0 { + return nil + } + basename := filepath.Base(args[0]) + family := "" + if strings.Contains(basename, "g++") || strings.Contains(basename, "gcc") { + family = "gcc" + } + res := &DetectedCompiler{ + Name: basename, + Family: family, + } + + if family == "gcc" && probeCompiler { + // Run "gcc --version" to obtain more info + res.DetailedVersion = runProcess(args[0], "--version") + + // Usually on the first line we get the compiler architecture and + // version (as last field), followed by the compiler license, for + // example: + // + // g++ (Ubuntu 12.2.0-3ubuntu1) 12.2.0 + // Copyright (C) 2022 Free Software Foundation, Inc. + // This is free software; see the source for copying conditions. There is NO + // warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + // + if len(res.DetailedVersion) > 0 { + split := strings.Split(res.DetailedVersion[0], " ") + if len(split) >= 3 { + res.Name = split[0] + res.Version, _ = semver.Parse(split[len(split)-1]) + } + } + } + return res +} diff --git a/internal/arduino/builder/internal/diagnostics/compiler_detection_test.go b/internal/arduino/builder/internal/diagnostics/compiler_detection_test.go new file mode 100644 index 00000000000..024c66868ed --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/compiler_detection_test.go @@ -0,0 +1,79 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +func init() { + runProcess = mockedRunProcessToGetCompilerVersion +} + +func mockedRunProcessToGetCompilerVersion(args ...string) []string { + if strings.HasSuffix(args[0], "7.3.0-atmel3.6.1-arduino7/bin/avr-g++") && args[1] == "--version" { + return []string{ + "avr-g++ (GCC) 7.3.0", + "Copyright (C) 2017 Free Software Foundation, Inc.", + "This is free software; see the source for copying conditions. There is NO", + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.", + "", + } + } + if strings.HasSuffix(args[0], "7.3.0-atmel3.6.1-arduino7/bin/avr-gcc") && args[1] == "--version" { + return []string{ + "avr-gcc (GCC) 7.3.0", + "Copyright (C) 2017 Free Software Foundation, Inc.", + "This is free software; see the source for copying conditions. There is NO", + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.", + "", + } + } + if strings.HasSuffix(args[0], "xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-g++") && args[1] == "--version" { + return []string{ + "xtensa-esp32-elf-g++ (crosstool-NG esp-2021r2-patch3) 8.4.0", + "Copyright (C) 2018 Free Software Foundation, Inc.", + "This is free software; see the source for copying conditions. There is NO", + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.", + "", + } + } + + panic("missing mock for command line: " + strings.Join(args, " ")) +} + +func TestCompilerDetection(t *testing.T) { + comp := DetectCompilerFromCommandLine([]string{"~/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++"}, true) + require.NotNil(t, comp) + require.Equal(t, "gcc", comp.Family) + require.Equal(t, "avr-g++", comp.Name) + require.Equal(t, "7.3.0", comp.Version.String()) + + comp = DetectCompilerFromCommandLine([]string{"~/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-gcc"}, true) + require.NotNil(t, comp) + require.Equal(t, "gcc", comp.Family) + require.Equal(t, "avr-gcc", comp.Name) + require.Equal(t, "7.3.0", comp.Version.String()) + + comp = DetectCompilerFromCommandLine([]string{"/home/megabug/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-g++"}, true) + require.NotNil(t, comp) + require.Equal(t, "gcc", comp.Family) + require.Equal(t, "xtensa-esp32-elf-g++", comp.Name) + require.Equal(t, "8.4.0", comp.Version.String()) +} diff --git a/internal/arduino/builder/internal/diagnostics/parser.go b/internal/arduino/builder/internal/diagnostics/parser.go new file mode 100644 index 00000000000..5aafaa5072d --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/parser.go @@ -0,0 +1,173 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "fmt" + "strings" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// CompilerOutputParserCB is a callback function that is called to feed a parser +// with the plain-text compiler output. +type CompilerOutputParserCB func(cmdline []string, out []byte) + +// Diagnostics represents a list of diagnostics +type Diagnostics []*Diagnostic + +// Diagnostic represents a diagnostic (a compiler error, warning, note, etc.) +type Diagnostic struct { + Severity Severity `json:"severity,omitempty"` + Message string `json:"message"` + File string `json:"file,omitempty"` + Line int `json:"line,omitempty"` + Column int `json:"col,omitempty"` + Context FullContext `json:"context,omitempty"` + Suggestions Notes `json:"suggestions,omitempty"` +} + +// Severity is a diagnostic severity +type Severity string + +const ( + // SeverityUnspecified is the undefined severity + SeverityUnspecified Severity = "" + // SeverityWarning is a warning + SeverityWarning = "WARNING" + // SeverityError is an error + SeverityError = "ERROR" + // SeverityFatal is a fatal error + SeverityFatal = "FATAL" +) + +// Notes represents a list of Note +type Notes []*Note + +// Note represents a compiler annotation or suggestion +type Note struct { + Message string `json:"message"` + File string `json:"file,omitempty"` + Line int `json:"line,omitempty"` + Column int `json:"col,omitempty"` +} + +// FullContext represents a list of Context +type FullContext []*Context + +// Context represents a context, i.e. a reference to a file, line and column +// or a part of the code that a Diagnostic refers to. +type Context struct { + Message string `json:"message"` + File string `json:"file,omitempty"` + Line int `json:"line,omitempty"` + Column int `json:"col,omitempty"` +} + +// ParseCompilerOutput parses the output of a compiler and returns a list of +// diagnostics. +func ParseCompilerOutput(compiler *DetectedCompiler, out []byte) ([]*Diagnostic, error) { + lines := splitLines(out) + switch compiler.Family { + case "gcc": + return parseGccOutput(lines) + default: + return nil, fmt.Errorf("unsupported compiler: %s", compiler) + } +} + +func splitLines(in []byte) []string { + res := strings.Split(string(in), "\n") + for i, line := range res { + res[i] = strings.TrimSuffix(line, "\r") + } + if l := len(res) - 1; res[l] == "" { + res = res[:l] + } + return res +} + +// ToRPC converts a Diagnostics to a slice of rpc.CompileDiagnostic +func (d Diagnostics) ToRPC() []*rpc.CompileDiagnostic { + if len(d) == 0 { + return nil + } + var res []*rpc.CompileDiagnostic + for _, diag := range d { + res = append(res, diag.ToRPC()) + } + return res +} + +// ToRPC converts a Diagnostic to a rpc.CompileDiagnostic +func (d *Diagnostic) ToRPC() *rpc.CompileDiagnostic { + if d == nil { + return nil + } + return &rpc.CompileDiagnostic{ + Severity: string(d.Severity), + Message: d.Message, + File: d.File, + Line: int64(d.Line), + Column: int64(d.Column), + Context: d.Context.ToRPC(), + Notes: d.Suggestions.ToRPC(), + } +} + +// ToRPC converts a Notes to a slice of rpc.CompileDiagnosticNote +func (s Notes) ToRPC() []*rpc.CompileDiagnosticNote { + var res []*rpc.CompileDiagnosticNote + for _, suggestion := range s { + res = append(res, suggestion.ToRPC()) + } + return res +} + +// ToRPC converts a Note to a rpc.CompileDiagnosticNote +func (s *Note) ToRPC() *rpc.CompileDiagnosticNote { + if s == nil { + return nil + } + return &rpc.CompileDiagnosticNote{ + File: s.File, + Line: int64(s.Line), + Column: int64(s.Column), + Message: s.Message, + } +} + +// ToRPC converts a FullContext to a slice of rpc.CompileDiagnosticContext +func (t FullContext) ToRPC() []*rpc.CompileDiagnosticContext { + var res []*rpc.CompileDiagnosticContext + for _, trace := range t { + res = append(res, trace.ToRPC()) + } + return res +} + +// ToRPC converts a Context to a rpc.CompileDiagnosticContext +func (d *Context) ToRPC() *rpc.CompileDiagnosticContext { + if d == nil { + return nil + } + return &rpc.CompileDiagnosticContext{ + File: d.File, + Line: int64(d.Line), + Column: int64(d.Column), + Message: d.Message, + } +} diff --git a/internal/arduino/builder/internal/diagnostics/parser_gcc.go b/internal/arduino/builder/internal/diagnostics/parser_gcc.go new file mode 100644 index 00000000000..afc9ef40c41 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/parser_gcc.go @@ -0,0 +1,193 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "strconv" + "strings" +) + +// Parse output from gcc compiler and extract diagnostics +func parseGccOutput(output []string) ([]*Diagnostic, error) { + // Output from gcc is a mix of diagnostics and other information. + // + // 1. include trace lines: + // + // In file included from /home/megabug/Arduino/libraries/Audio/src/Audio.h:16:0, + // ·················from /home/megabug/Arduino/Blink/Blink.ino:1: + // + // 2. in-file context lines: + // + // /home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::enableInterrupts()': + // + // 3. actual diagnostic lines: + // + // /home/megabug/Arduino/libraries/Audio/src/DAC.h:31:44: fatal error: 'isrId' was not declared in this scope + // + // /home/megabug/Arduino/libraries/Audio/src/DAC.h:31:44: error: 'isrId' was not declared in this scope + // + // /home/megabug/Arduino/libraries/Audio/src/DAC.h:31:44: warning: 'isrId' was not declared in this scope + // + // 4. annotations or suggestions: + // + // /home/megabug/Arduino/Blink/Blink.ino:4:1: note: suggested alternative: 'rand' + // + // 5. extra context lines with an extract of the code that errors refers to: + // + // ·asd; + // ·^~~ + // ·rand + // + // ·void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + // ···········································^~~~~ + + var fullContext FullContext + var fullContextRefersTo string + var inFileContext *Context + var currentDiagnostic *Diagnostic + var currentMessage *string + var res []*Diagnostic + + for _, in := range output { + isTrace := false + if strings.HasPrefix(in, "In file included from ") { + in = strings.TrimPrefix(in, "In file included from ") + // 1. include trace + isTrace = true + inFileContext = nil + fullContext = nil + fullContextRefersTo = "" + } else if strings.HasPrefix(in, " from ") { + in = strings.TrimPrefix(in, " from ") + // 1. include trace continuation + isTrace = true + } + if isTrace { + in = strings.TrimSuffix(in, ",") + file, line, col := extractFileLineAndColumn(in) + context := &Context{ + File: file, + Line: line, + Column: col, + Message: "included from here", + } + currentMessage = &context.Message + fullContext = append(fullContext, context) + continue + } + + if split := strings.SplitN(in, ": ", 2); len(split) == 2 { + file, line, column := extractFileLineAndColumn(split[0]) + msg := split[1] + + if line == 0 && column == 0 { + // 2. in-file context + inFileContext = &Context{ + Message: msg, + File: file, + } + currentMessage = &inFileContext.Message + continue + } + + if strings.HasPrefix(msg, "note: ") { + msg = strings.TrimPrefix(msg, "note: ") + // 4. annotations or suggestions + if currentDiagnostic != nil { + suggestion := &Note{ + Message: msg, + File: file, + Line: line, + Column: column, + } + currentDiagnostic.Suggestions = append(currentDiagnostic.Suggestions, suggestion) + currentMessage = &suggestion.Message + } + continue + } + + severity := SeverityUnspecified + if strings.HasPrefix(msg, "error: ") { + msg = strings.TrimPrefix(msg, "error: ") + severity = SeverityError + } else if strings.HasPrefix(msg, "warning: ") { + msg = strings.TrimPrefix(msg, "warning: ") + severity = SeverityWarning + } else if strings.HasPrefix(msg, "fatal error: ") { + msg = strings.TrimPrefix(msg, "fatal error: ") + severity = SeverityFatal + } + if severity != SeverityUnspecified { + // 3. actual diagnostic lines + currentDiagnostic = &Diagnostic{ + Severity: severity, + Message: msg, + File: file, + Line: line, + Column: column, + } + currentMessage = ¤tDiagnostic.Message + + if len(fullContext) > 0 { + if fullContextRefersTo == "" || fullContextRefersTo == file { + fullContextRefersTo = file + currentDiagnostic.Context = append(currentDiagnostic.Context, fullContext...) + } + } + if inFileContext != nil && inFileContext.File == file { + currentDiagnostic.Context = append(currentDiagnostic.Context, inFileContext) + } + + res = append(res, currentDiagnostic) + continue + } + } + + // 5. extra context lines + if strings.HasPrefix(in, " ") { + if currentMessage != nil { + *currentMessage += "\n" + in + } + continue + } + } + return res, nil +} + +func extractFileLineAndColumn(file string) (string, int, int) { + split := strings.Split(file, ":") + file = split[0] + if len(split) == 1 { + return file, 0, 0 + } + + // Special case: handle Windows drive letter `C:\...` + if len(split) > 1 && len(file) == 1 && strings.HasPrefix(split[1], `\`) { + file += ":" + split[1] + split = split[1:] + + if len(split) == 1 { + return file, 0, 0 + } + } + + line, err := strconv.Atoi(split[1]) + if err != nil || len(split) == 2 { + return file, line, 0 + } + column, _ := strconv.Atoi(split[2]) + return file, line, column +} diff --git a/internal/arduino/builder/internal/diagnostics/parser_test.go b/internal/arduino/builder/internal/diagnostics/parser_test.go new file mode 100644 index 00000000000..fe2b6cbed53 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/parser_test.go @@ -0,0 +1,57 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "bytes" + "encoding/json" + "strings" + "testing" + + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestParser(t *testing.T) { + t.Run("Generic001", func(t *testing.T) { runParserTest(t, "test001.txt") }) + t.Run("Generic002", func(t *testing.T) { runParserTest(t, "test002.txt") }) + t.Run("Generic003", func(t *testing.T) { runParserTest(t, "test003.txt") }) + t.Run("Generic004", func(t *testing.T) { runParserTest(t, "test004.txt") }) +} + +func runParserTest(t *testing.T, testFile string) { + testData, err := paths.New("testdata", "compiler_outputs", testFile).ReadFile() + require.NoError(t, err) + // The first line contains the compiler arguments + idx := bytes.Index(testData, []byte("\n")) + require.NotEqual(t, -1, idx) + args := strings.Split(string(testData[0:idx]), " ") + // The remainder of the file is the compiler output + data := testData[idx:] + + // Run compiler detection and parse compiler output + detectedCompiler := DetectCompilerFromCommandLine(args, true) + require.NotNil(t, detectedCompiler) + diags, err := ParseCompilerOutput(detectedCompiler, data) + require.NoError(t, err) + + // Check if the parsed data match the expected output + output, err := json.MarshalIndent(diags, "", " ") + require.NoError(t, err) + golden, err := paths.New("testdata", "compiler_outputs", testFile+".json").ReadFile() + require.NoError(t, err) + require.Equal(t, string(golden), string(output)) +} diff --git a/internal/arduino/builder/internal/diagnostics/store.go b/internal/arduino/builder/internal/diagnostics/store.go new file mode 100644 index 00000000000..dc8d9a8f882 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/store.go @@ -0,0 +1,51 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package diagnostics + +import ( + "github.com/sirupsen/logrus" +) + +type Store struct { + results Diagnostics +} + +func NewStore() *Store { + return &Store{} +} + +// Parse parses the output coming from a compiler. It then stores the parsed +// diagnostics in a slice of Diagnostic. +func (m *Store) Parse(cmdline []string, out []byte) { + compiler := DetectCompilerFromCommandLine( + cmdline, + false, // at the moment compiler-probing is not required + ) + if compiler == nil { + logrus.Warnf("Could not detect compiler from: %s", cmdline) + return + } + diags, err := ParseCompilerOutput(compiler, out) + if err != nil { + logrus.Warnf("Error parsing compiler output: %s", err) + return + } + m.results = append(m.results, diags...) +} + +func (m *Store) Diagnostics() Diagnostics { + return m.results +} diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt new file mode 100644 index 00000000000..a04874cd03c --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt @@ -0,0 +1,12 @@ +/home/megabug/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega32u4 -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_LEONARDO -DARDUINO_ARCH_AVR -DUSB_VID=0x2341 -DUSB_PID=0x8036 "-DUSB_MANUFACTURER=\"Unknown\"" "-DUSB_PRODUCT=\"Arduino Leonardo\"" -I/home/megabug/.arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino -I/home/megabug/.arduino15/packages/arduino/hardware/avr/1.8.6/variants/leonardo /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp -o /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp.o +/home/megabug/Arduino/Blink/Blink.ino:1:14: error: expected initializer before 'asd' + void setup() asd { + ^~~ +/home/megabug/Arduino/Blink/Blink.ino: In function 'void loop()': +/home/megabug/Arduino/Blink/Blink.ino:6:1: error: 'asd' was not declared in this scope + asd + ^~~ +/home/megabug/Arduino/Blink/Blink.ino:6:1: note: suggested alternative: 'rand' + asd + ^~~ + rand \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt.json b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt.json new file mode 100644 index 00000000000..e1fd65d270d --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test001.txt.json @@ -0,0 +1,30 @@ +[ + { + "severity": "ERROR", + "message": "expected initializer before 'asd'\n void setup() asd {\n ^~~", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1, + "col": 14 + }, + { + "severity": "ERROR", + "message": "'asd' was not declared in this scope\n asd\n ^~~", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 6, + "col": 1, + "context": [ + { + "message": "In function 'void loop()':", + "file": "/home/megabug/Arduino/Blink/Blink.ino" + } + ], + "suggestions": [ + { + "message": "suggested alternative: 'rand'\n asd\n ^~~\n rand", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 6, + "col": 1 + } + ] + } +] \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt new file mode 100644 index 00000000000..c0add91431e --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt @@ -0,0 +1,34 @@ +/home/megabug/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/home/megabug/.arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino -I/home/megabug/.arduino15/packages/arduino/hardware/avr/1.8.6/variants/standard -I/home/megabug/Arduino/libraries/Audio/src /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp -o /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp.o +In file included from /home/megabug/Arduino/libraries/Audio/src/Audio.h:16:0, + from /home/megabug/Arduino/Blink/Blink.ino:1: +/home/megabug/Arduino/libraries/Audio/src/DAC.h:21:16: error: expected ')' before '*' token + DACClass(Dacc *_dac, uint32_t _dacId, IRQn_Type _isrId) : + ^ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:35:2: error: 'Dacc' does not name a type + Dacc *dac; + ^~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:37:2: error: 'IRQn_Type' does not name a type + IRQn_Type isrId; + ^~~~~~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::enableInterrupts()': +/home/megabug/Arduino/libraries/Audio/src/DAC.h:31:44: error: 'isrId' was not declared in this scope + void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + ^~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:31:29: error: 'NVIC_EnableIRQ' was not declared in this scope + void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + ^~~~~~~~~~~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::disableInterrupts()': +/home/megabug/Arduino/libraries/Audio/src/DAC.h:32:45: error: 'isrId' was not declared in this scope + void disableInterrupts() { NVIC_DisableIRQ(isrId); }; + ^~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:32:29: error: 'NVIC_DisableIRQ' was not declared in this scope + void disableInterrupts() { NVIC_DisableIRQ(isrId); }; + ^~~~~~~~~~~~~~~ +/home/megabug/Arduino/Blink/Blink.ino: In function 'void setup()': +/home/megabug/Arduino/Blink/Blink.ino:4:1: error: 'asd' was not declared in this scope + asd; + ^~~ +/home/megabug/Arduino/Blink/Blink.ino:4:1: note: suggested alternative: 'rand' + asd; + ^~~ + rand \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt.json b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt.json new file mode 100644 index 00000000000..cd1a4c402a5 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test002.txt.json @@ -0,0 +1,172 @@ +[ + { + "severity": "ERROR", + "message": "expected ')' before '*' token\n DACClass(Dacc *_dac, uint32_t _dacId, IRQn_Type _isrId) :\n ^", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 21, + "col": 16, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'Dacc' does not name a type\n Dacc *dac;\n ^~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 35, + "col": 2, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'IRQn_Type' does not name a type\n IRQn_Type isrId;\n ^~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 37, + "col": 2, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'isrId' was not declared in this scope\n void enableInterrupts() { NVIC_EnableIRQ(isrId); };\n ^~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 31, + "col": 44, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::enableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'NVIC_EnableIRQ' was not declared in this scope\n void enableInterrupts() { NVIC_EnableIRQ(isrId); };\n ^~~~~~~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 31, + "col": 29, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::enableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'isrId' was not declared in this scope\n void disableInterrupts() { NVIC_DisableIRQ(isrId); };\n ^~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 32, + "col": 45, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::disableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'NVIC_DisableIRQ' was not declared in this scope\n void disableInterrupts() { NVIC_DisableIRQ(isrId); };\n ^~~~~~~~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 32, + "col": 29, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::disableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'asd' was not declared in this scope\n asd;\n ^~~", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 4, + "col": 1, + "context": [ + { + "message": "In function 'void setup()':", + "file": "/home/megabug/Arduino/Blink/Blink.ino" + } + ], + "suggestions": [ + { + "message": "suggested alternative: 'rand'\n asd;\n ^~~\n rand", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 4, + "col": 1 + } + ] + } +] \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt new file mode 100644 index 00000000000..1b8af0f22d6 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt @@ -0,0 +1,40 @@ +/home/megabug/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-g++ -DHAVE_CONFIG_H "-DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"" -DUNITY_INCLUDE_CONFIG_H -DWITH_POSIX -D_GNU_SOURCE "-DIDF_VER=\"v4.4.1-1-gb8050b365e\"" -DESP_PLATFORM -D_POSIX_READER_WRITER_LOCKS -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/config -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/newlib/platform_include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/include/esp_additions/freertos -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/port/xtensa/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freertos/include/esp_additions -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/include/soc -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/port/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/heap/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/log/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/include/apps -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/include/apps/sntp -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/lwip/src/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/port/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/lwip/port/esp32/include/arch -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/soc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/soc/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/soc/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/hal/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/hal/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/hal/platform_port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rom/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rom/include/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rom/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_common/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_system/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_system/port/soc -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_system/port/public_compat -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/xtensa/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/xtensa/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/driver/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/driver/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_pm/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_ringbuf/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/efuse/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/efuse/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/vfs/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_wifi/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_event/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_netif/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_eth/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/tcpip_adapter/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_phy/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_phy/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_ipc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/app_trace/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_timer/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mbedtls/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mbedtls/mbedtls/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/app_update/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/spi_flash/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bootloader_support/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/nvs_flash/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/pthread/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_gdbstub/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_gdbstub/xtensa -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_gdbstub/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/espcoredump/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/espcoredump/include/port/xtensa -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wpa_supplicant/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wpa_supplicant/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/ieee802154/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/console -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/asio/asio/asio/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/asio/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/osi/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/include/esp32/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/api/include/api -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/common/btc/profile/esp/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/cbor/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/unity/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/unity/unity/src -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/cmock/CMock/src -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/coap/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/coap/libcoap/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/nghttp/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-tls -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-tls/esp-tls-crypto -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_adc_cal/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_hid/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/tcp_transport/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_http_client/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_http_server/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_https_ota/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_lcd/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_lcd/interface -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protobuf-c/protobuf-c -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protocomm/include/common -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protocomm/include/security -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/protocomm/include/transports -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mdns/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_local_ctrl/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/sdmmc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_serial_slave_link/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_websocket_client/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/expat/expat/expat/lib -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/expat/port/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wear_levelling/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fatfs/diskio -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fatfs/vfs -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fatfs/src -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/freemodbus/common/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/idf_test/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/idf_test/include/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/jsmn/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json/cJSON -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/libsodium/port_include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/mqtt/esp-mqtt/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/openssl/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/perfmon/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/spiffs/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/ulp/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/wifi_provisioning/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/button/button/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/rmaker_common/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json_parser/upstream/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json_parser/upstream -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/json_generator/upstream -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_schedule/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_rainmaker/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/qrcode/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/ws2812_led -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/dotprod/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/support/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/hann/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_harris/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/blackman_nuttall/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/nuttall/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/windows/flat_top/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/iir/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/fir/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/add/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/sub/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/mul/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/addc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/mulc/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/math/sqrt/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/matrix/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/fft/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/dct/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/conv/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/common/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dsp/modules/kalman/ekf_imu13states/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_littlefs/src -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp_littlefs/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/tool -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/typedef -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/image -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/math -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/nn -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/layer -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/detect -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-dl/include/model_zoo -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-sr/esp-tts/esp_tts_chinese/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp-sr/include/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp32-camera/driver/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/esp32-camera/conversions/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/include/fb_gfx/include -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/tools/sdk/esp32/qspi_qspi/include -mlongcalls -Wno-frame-address -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -std=gnu++11 -fexceptions -fno-rtti -MMD -c -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESPino32 -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"ESPino32\"" "-DARDUINO_VARIANT=\"espino32\"" -DARDUINO_PARTITION_default -DESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_USB_CDC_ON_BOOT=0 @/tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/build_opt.h -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/cores/esp32 -I/home/megabug/.arduino15/packages/esp32/hardware/esp32/2.0.3/variants/espino32 -I/home/megabug/Arduino/libraries/Audio/src /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp -o /tmp/arduino/sketches/002050EAA7EFB9A4FC451CDFBC0FA2D3/sketch/Blink.ino.cpp.o +In file included from /home/megabug/Arduino/libraries/Audio/src/Audio.h:16, + from /home/megabug/Arduino/Blink/Blink.ino:1: +/home/megabug/Arduino/libraries/Audio/src/DAC.h:21:15: error: expected ')' before '*' token + DACClass(Dacc *_dac, uint32_t _dacId, IRQn_Type _isrId) : + ~ ^~ + ) +/home/megabug/Arduino/libraries/Audio/src/DAC.h:35:2: error: 'Dacc' does not name a type + Dacc *dac; + ^~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:37:2: error: 'IRQn_Type' does not name a type + IRQn_Type isrId; + ^~~~~~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::enableInterrupts()': +/home/megabug/Arduino/libraries/Audio/src/DAC.h:31:43: error: 'isrId' was not declared in this scope + void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + ^~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:31:28: error: 'NVIC_EnableIRQ' was not declared in this scope + void enableInterrupts() { NVIC_EnableIRQ(isrId); }; + ^~~~~~~~~~~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h: In member function 'void DACClass::disableInterrupts()': +/home/megabug/Arduino/libraries/Audio/src/DAC.h:32:44: error: 'isrId' was not declared in this scope + void disableInterrupts() { NVIC_DisableIRQ(isrId); }; + ^~~~~ +/home/megabug/Arduino/libraries/Audio/src/DAC.h:32:28: error: 'NVIC_DisableIRQ' was not declared in this scope + void disableInterrupts() { NVIC_DisableIRQ(isrId); }; + ^~~~~~~~~~~~~~~ +In file included from /home/megabug/Arduino/Blink/Blink.ino:1: +/home/megabug/Arduino/libraries/Audio/src/Audio.h: In member function 'virtual size_t AudioClass::write(uint8_t)': +/home/megabug/Arduino/libraries/Audio/src/Audio.h:25:82: warning: no return statement in function returning non-void [-Wreturn-type] + virtual size_t write(uint8_t c) { /* not implemented */ }; + ^ +/home/megabug/Arduino/Blink/Blink.ino: In function 'void setup()': +/home/megabug/Arduino/Blink/Blink.ino:4:1: error: 'asd' was not declared in this scope + asd; + ^~~ +/home/megabug/Arduino/Blink/Blink.ino:4:1: note: suggested alternative: 'rand' + asd; + ^~~ + rand \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt.json b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt.json new file mode 100644 index 00000000000..5f9b36e4309 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test003.txt.json @@ -0,0 +1,190 @@ +[ + { + "severity": "ERROR", + "message": "expected ')' before '*' token\n DACClass(Dacc *_dac, uint32_t _dacId, IRQn_Type _isrId) :\n ~ ^~\n )", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 21, + "col": 15, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'Dacc' does not name a type\n Dacc *dac;\n ^~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 35, + "col": 2, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'IRQn_Type' does not name a type\n IRQn_Type isrId;\n ^~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 37, + "col": 2, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + } + ] + }, + { + "severity": "ERROR", + "message": "'isrId' was not declared in this scope\n void enableInterrupts() { NVIC_EnableIRQ(isrId); };\n ^~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 31, + "col": 43, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::enableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'NVIC_EnableIRQ' was not declared in this scope\n void enableInterrupts() { NVIC_EnableIRQ(isrId); };\n ^~~~~~~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 31, + "col": 28, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::enableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'isrId' was not declared in this scope\n void disableInterrupts() { NVIC_DisableIRQ(isrId); };\n ^~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 32, + "col": 44, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::disableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'NVIC_DisableIRQ' was not declared in this scope\n void disableInterrupts() { NVIC_DisableIRQ(isrId); };\n ^~~~~~~~~~~~~~~", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h", + "line": 32, + "col": 28, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 16 + }, + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'void DACClass::disableInterrupts()':", + "file": "/home/megabug/Arduino/libraries/Audio/src/DAC.h" + } + ] + }, + { + "severity": "WARNING", + "message": "no return statement in function returning non-void [-Wreturn-type]\n virtual size_t write(uint8_t c) { /* not implemented */ };\n ^", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h", + "line": 25, + "col": 82, + "context": [ + { + "message": "included from here", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 1 + }, + { + "message": "In member function 'virtual size_t AudioClass::write(uint8_t)':", + "file": "/home/megabug/Arduino/libraries/Audio/src/Audio.h" + } + ] + }, + { + "severity": "ERROR", + "message": "'asd' was not declared in this scope\n asd;\n ^~~", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 4, + "col": 1, + "context": [ + { + "message": "In function 'void setup()':", + "file": "/home/megabug/Arduino/Blink/Blink.ino" + } + ], + "suggestions": [ + { + "message": "suggested alternative: 'rand'\n asd;\n ^~~\n rand", + "file": "/home/megabug/Arduino/Blink/Blink.ino", + "line": 4, + "col": 1 + } + ] + } +] \ No newline at end of file diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt new file mode 100644 index 00000000000..958800f68f5 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt @@ -0,0 +1,5 @@ +C:\Users\runneradmin\AppData\Local\Temp\cli2123776893\A\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\runneradmin\AppData\Local\Temp\cli2123776893\A\packages\arduino\hardware\avr\1.8.5\cores\arduino -IC:\Users\runneradmin\AppData\Local\Temp\cli2123776893\A\packages\arduino\hardware\avr\1.8.5\variants\standard C:\Users\runneradmin\AppData\Local\Temp\arduino\sketches\BD9E9425D0ACEC4A9F5E44E2417C33A5\sketch\wrong.cpp -o C:\Users\runneradmin\AppData\Local\Temp\arduino\sketches\BD9E9425D0ACEC4A9F5E44E2417C33A5\sketch\wrong.cpp.o +D:\a\arduino-cli\arduino-cli\internal\integrationtest\compile_3\testdata\blink_with_wrong_cpp\wrong.cpp: In function 'void wrong()': +D:\a\arduino-cli\arduino-cli\internal\integrationtest\compile_3\testdata\blink_with_wrong_cpp\wrong.cpp:1:14: error: expected '}' at end of input + void wrong() { + ^ diff --git a/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt.json b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt.json new file mode 100644 index 00000000000..e436025aee2 --- /dev/null +++ b/internal/arduino/builder/internal/diagnostics/testdata/compiler_outputs/test004.txt.json @@ -0,0 +1,15 @@ +[ + { + "severity": "ERROR", + "message": "expected '}' at end of input\n void wrong() {\n ^", + "file": "D:\\a\\arduino-cli\\arduino-cli\\internal\\integrationtest\\compile_3\\testdata\\blink_with_wrong_cpp\\wrong.cpp", + "line": 1, + "col": 14, + "context": [ + { + "message": "In function 'void wrong()':", + "file": "D:\\a\\arduino-cli\\arduino-cli\\internal\\integrationtest\\compile_3\\testdata\\blink_with_wrong_cpp\\wrong.cpp" + } + ] + } +] \ No newline at end of file diff --git a/arduino/builder/internal/preprocessor/arduino_preprocessor.go b/internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go similarity index 72% rename from arduino/builder/internal/preprocessor/arduino_preprocessor.go rename to internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go index 630ec56400f..deabc04c4f0 100644 --- a/arduino/builder/internal/preprocessor/arduino_preprocessor.go +++ b/internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go @@ -18,33 +18,37 @@ package preprocessor import ( "bytes" "context" + "errors" "path/filepath" "runtime" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/executils" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) // PreprocessSketchWithArduinoPreprocessor performs preprocessing of the arduino sketch // using arduino-preprocessor (https://github.com/arduino/arduino-preprocessor). -func PreprocessSketchWithArduinoPreprocessor(sk *sketch.Sketch, buildPath *paths.Path, includeFolders paths.PathList, lineOffset int, buildProperties *properties.Map, onlyUpdateCompilationDatabase bool) ([]byte, []byte, error) { +func PreprocessSketchWithArduinoPreprocessor( + ctx context.Context, + sk *sketch.Sketch, buildPath *paths.Path, includeFolders paths.PathList, + lineOffset int, buildProperties *properties.Map, onlyUpdateCompilationDatabase bool, +) (*Result, error) { verboseOut := &bytes.Buffer{} normalOut := &bytes.Buffer{} if err := buildPath.Join("preproc").MkdirAll(); err != nil { - return nil, nil, err + return nil, err } sourceFile := buildPath.Join("sketch", sk.MainFile.Base()+".cpp") targetFile := buildPath.Join("preproc", "sketch_merged.cpp") - gccStdout, gccStderr, err := GCC(sourceFile, targetFile, includeFolders, buildProperties) - verboseOut.Write(gccStdout) - verboseOut.Write(gccStderr) + gccResult, err := GCC(ctx, sourceFile, targetFile, includeFolders, buildProperties) + verboseOut.Write(gccResult.Stdout()) + verboseOut.Write(gccResult.Stderr()) if err != nil { - return nil, nil, err + return nil, err } arduiniPreprocessorProperties := properties.NewMap() @@ -57,18 +61,18 @@ func PreprocessSketchWithArduinoPreprocessor(sk *sketch.Sketch, buildPath *paths arduiniPreprocessorProperties.SetPath("source_file", targetFile) pattern := arduiniPreprocessorProperties.Get("pattern") if pattern == "" { - return nil, nil, errors.New(tr("arduino-preprocessor pattern is missing")) + return nil, errors.New(i18n.Tr("arduino-preprocessor pattern is missing")) } commandLine := arduiniPreprocessorProperties.ExpandPropsInString(pattern) parts, err := properties.SplitQuotedString(commandLine, `"'`, false) if err != nil { - return nil, nil, errors.WithStack(err) + return nil, err } - command, err := executils.NewProcess(nil, parts...) + command, err := paths.NewProcess(nil, parts...) if err != nil { - return nil, nil, err + return nil, err } if runtime.GOOS == "windows" { // chdir in the uppermost directory to avoid UTF-8 bug in clang (https://github.com/arduino/arduino-preprocessor/issues/2) @@ -76,17 +80,16 @@ func PreprocessSketchWithArduinoPreprocessor(sk *sketch.Sketch, buildPath *paths } verboseOut.WriteString(commandLine) - commandStdOut, commandStdErr, err := command.RunAndCaptureOutput(context.Background()) + commandStdOut, commandStdErr, err := command.RunAndCaptureOutput(ctx) verboseOut.Write(commandStdErr) if err != nil { - return normalOut.Bytes(), verboseOut.Bytes(), err + return &Result{args: gccResult.Args(), stdout: verboseOut.Bytes(), stderr: normalOut.Bytes()}, err } result := utils.NormalizeUTF8(commandStdOut) destFile := buildPath.Join(sk.MainFile.Base() + ".cpp") if err := destFile.WriteFile(result); err != nil { - return normalOut.Bytes(), verboseOut.Bytes(), err + return &Result{args: gccResult.Args(), stdout: verboseOut.Bytes(), stderr: normalOut.Bytes()}, err } - - return normalOut.Bytes(), verboseOut.Bytes(), err + return &Result{args: gccResult.Args(), stdout: verboseOut.Bytes(), stderr: normalOut.Bytes()}, err } diff --git a/arduino/builder/internal/preprocessor/ctags.go b/internal/arduino/builder/internal/preprocessor/ctags.go similarity index 73% rename from arduino/builder/internal/preprocessor/ctags.go rename to internal/arduino/builder/internal/preprocessor/ctags.go index fb7134904a0..ae87e35805d 100644 --- a/arduino/builder/internal/preprocessor/ctags.go +++ b/internal/arduino/builder/internal/preprocessor/ctags.go @@ -19,74 +19,77 @@ import ( "bufio" "bytes" "context" + "errors" "fmt" "io" "strconv" "strings" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/arduino/builder/internal/preprocessor/internal/ctags" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/preprocessor/internal/ctags" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) -var tr = i18n.Tr - // DebugPreprocessor when set to true the CTags preprocessor will output debugging info to stdout // this is useful for unit-testing to provide more infos var DebugPreprocessor bool // PreprocessSketchWithCtags performs preprocessing of the arduino sketch using CTags. -func PreprocessSketchWithCtags(sketch *sketch.Sketch, buildPath *paths.Path, includes paths.PathList, lineOffset int, buildProperties *properties.Map, onlyUpdateCompilationDatabase bool) ([]byte, []byte, error) { +func PreprocessSketchWithCtags( + ctx context.Context, + sketch *sketch.Sketch, buildPath *paths.Path, includes paths.PathList, + lineOffset int, buildProperties *properties.Map, + onlyUpdateCompilationDatabase, verbose bool, +) (*Result, error) { // Create a temporary working directory tmpDir, err := paths.MkTempDir("", "") if err != nil { - return nil, nil, err + return nil, err } defer tmpDir.RemoveAll() ctagsTarget := tmpDir.Join("sketch_merged.cpp") - normalOutput := &bytes.Buffer{} - verboseOutput := &bytes.Buffer{} + stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{} // Run GCC preprocessor sourceFile := buildPath.Join("sketch", sketch.MainFile.Base()+".cpp") - gccStdout, gccStderr, err := GCC(sourceFile, ctagsTarget, includes, buildProperties) - verboseOutput.Write(gccStdout) - verboseOutput.Write(gccStderr) - normalOutput.Write(gccStderr) + result, err := GCC(ctx, sourceFile, ctagsTarget, includes, buildProperties) + stdout.Write(result.Stdout()) + stderr.Write(result.Stderr()) if err != nil { if !onlyUpdateCompilationDatabase { - return normalOutput.Bytes(), verboseOutput.Bytes(), errors.WithStack(err) + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } // Do not bail out if we are generating the compile commands database - normalOutput.WriteString(fmt.Sprintf("%s: %s", - tr("An error occurred adding prototypes"), - tr("the compilation database may be incomplete or inaccurate"))) + fmt.Fprintf(stderr, "%s: %s", + i18n.Tr("An error occurred adding prototypes"), + i18n.Tr("the compilation database may be incomplete or inaccurate")) if err := sourceFile.CopyTo(ctagsTarget); err != nil { - return normalOutput.Bytes(), verboseOutput.Bytes(), errors.WithStack(err) + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } } if src, err := ctagsTarget.ReadFile(); err == nil { filteredSource := filterSketchSource(sketch, bytes.NewReader(src), false) if err := ctagsTarget.WriteFile([]byte(filteredSource)); err != nil { - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } } else { - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } // Run CTags on gcc-preprocessed source - ctagsOutput, ctagsStdErr, err := RunCTags(ctagsTarget, buildProperties) - verboseOutput.Write(ctagsStdErr) + ctagsOutput, ctagsStdErr, ctagsCmdLine, err := RunCTags(ctx, ctagsTarget, buildProperties) + if verbose { + stdout.Write([]byte(ctagsCmdLine + "\n")) + stderr.Write(ctagsStdErr) + } if err != nil { - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } // Parse CTags output @@ -101,13 +104,13 @@ func PreprocessSketchWithCtags(sketch *sketch.Sketch, buildPath *paths.Path, inc if sourceData, err := sourceFile.ReadFile(); err == nil { source = string(sourceData) } else { - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } source = strings.ReplaceAll(source, "\r\n", "\n") source = strings.ReplaceAll(source, "\r", "\n") sourceRows := strings.Split(source, "\n") if isFirstFunctionOutsideOfSource(firstFunctionLine, sourceRows) { - return normalOutput.Bytes(), verboseOutput.Bytes(), nil + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, nil } insertionLine := firstFunctionLine + lineOffset - 1 @@ -133,7 +136,7 @@ func PreprocessSketchWithCtags(sketch *sketch.Sketch, buildPath *paths.Path, inc // Write back arduino-preprocess output to the sourceFile err = sourceFile.WriteFile([]byte(preprocessedSource)) - return normalOutput.Bytes(), verboseOutput.Bytes(), err + return &Result{args: result.Args(), stdout: stdout.Bytes(), stderr: stderr.Bytes()}, err } func composePrototypeSection(line int, prototypes []*ctags.Prototype) string { @@ -176,7 +179,7 @@ func isFirstFunctionOutsideOfSource(firstFunctionLine int, sourceRows []string) } // RunCTags performs a run of ctags on the given source file. Returns the ctags output and the stderr contents. -func RunCTags(sourceFile *paths.Path, buildProperties *properties.Map) ([]byte, []byte, error) { +func RunCTags(ctx context.Context, sourceFile *paths.Path, buildProperties *properties.Map) ([]byte, []byte, string, error) { ctagsBuildProperties := properties.NewMap() ctagsBuildProperties.Set("tools.ctags.path", "{runtime.tools.ctags.path}") ctagsBuildProperties.Set("tools.ctags.cmd.path", "{path}/ctags") @@ -187,24 +190,22 @@ func RunCTags(sourceFile *paths.Path, buildProperties *properties.Map) ([]byte, pattern := ctagsBuildProperties.Get("pattern") if pattern == "" { - return nil, nil, errors.Errorf(tr("%s pattern is missing"), "ctags") + return nil, nil, "", errors.New(i18n.Tr("%s pattern is missing", "ctags")) } commandLine := ctagsBuildProperties.ExpandPropsInString(pattern) parts, err := properties.SplitQuotedString(commandLine, `"'`, false) if err != nil { - return nil, nil, err + return nil, nil, "", err } - proc, err := executils.NewProcess(nil, parts...) + proc, err := paths.NewProcess(nil, parts...) if err != nil { - return nil, nil, err + return nil, nil, "", err } - stdout, stderr, err := proc.RunAndCaptureOutput(context.Background()) + stdout, stderr, err := proc.RunAndCaptureOutput(ctx) - // Append ctags arguments to stderr args := fmt.Sprintln(strings.Join(parts, " ")) - stderr = append([]byte(args), stderr...) - return stdout, stderr, err + return stdout, stderr, args, err } func filterSketchSource(sketch *sketch.Sketch, source io.Reader, removeLineMarkers bool) string { diff --git a/arduino/builder/internal/preprocessor/gcc.go b/internal/arduino/builder/internal/preprocessor/gcc.go similarity index 82% rename from arduino/builder/internal/preprocessor/gcc.go rename to internal/arduino/builder/internal/preprocessor/gcc.go index 2029f08b972..cbf156dfae6 100644 --- a/arduino/builder/internal/preprocessor/gcc.go +++ b/internal/arduino/builder/internal/preprocessor/gcc.go @@ -17,20 +17,24 @@ package preprocessor import ( "context" + "errors" "fmt" "strings" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/executils" - f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" + "go.bug.st/f" ) // GCC performs a run of the gcc preprocess (macro/includes expansion). The function outputs the result // to targetFilePath. Returns the stdout/stderr of gcc if any. -func GCC(sourceFilePath *paths.Path, targetFilePath *paths.Path, includes paths.PathList, buildProperties *properties.Map) ([]byte, []byte, error) { +func GCC( + ctx context.Context, + sourceFilePath, targetFilePath *paths.Path, + includes paths.PathList, buildProperties *properties.Map, +) (Result, error) { gccBuildProperties := properties.NewMap() gccBuildProperties.Set("preproc.macros.flags", "-w -x c++ -E -CC") gccBuildProperties.Merge(buildProperties) @@ -55,28 +59,28 @@ func GCC(sourceFilePath *paths.Path, targetFilePath *paths.Path, includes paths. pattern := gccBuildProperties.Get(gccPreprocRecipeProperty) if pattern == "" { - return nil, nil, errors.Errorf(tr("%s pattern is missing"), gccPreprocRecipeProperty) + return Result{}, errors.New(i18n.Tr("%s pattern is missing", gccPreprocRecipeProperty)) } commandLine := gccBuildProperties.ExpandPropsInString(pattern) commandLine = properties.DeleteUnexpandedPropsFromString(commandLine) args, err := properties.SplitQuotedString(commandLine, `"'`, false) if err != nil { - return nil, nil, err + return Result{}, err } // Remove -MMD argument if present. Leaving it will make gcc try // to create a /dev/null.d dependency file, which won't work. args = f.Filter(args, f.NotEquals("-MMD")) - proc, err := executils.NewProcess(nil, args...) + proc, err := paths.NewProcess(nil, args...) if err != nil { - return nil, nil, err + return Result{}, err } - stdout, stderr, err := proc.RunAndCaptureOutput(context.Background()) + stdout, stderr, err := proc.RunAndCaptureOutput(ctx) // Append gcc arguments to stdout stdout = append([]byte(fmt.Sprintln(strings.Join(args, " "))), stdout...) - return stdout, stderr, err + return Result{args: proc.GetArgs(), stdout: stdout, stderr: stderr}, err } diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_has_issues.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_has_issues.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_has_issues.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_has_issues.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_parser.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser_test.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser_test.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_parser_test.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_parser_test.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes_test.go b/internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes_test.go similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes_test.go rename to internal/arduino/builder/internal/preprocessor/internal/ctags/ctags_to_prototypes_test.go diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserClassMembersAreFilteredOut.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserClassMembersAreFilteredOut.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserClassMembersAreFilteredOut.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserClassMembersAreFilteredOut.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserDefaultArguments.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserDefaultArguments.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserDefaultArguments.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserDefaultArguments.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointer.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointer.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointer.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointer.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointers.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointers.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointers.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointers.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointersNoIndirect.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointersNoIndirect.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointersNoIndirect.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserFunctionPointersNoIndirect.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserNamespace.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserNamespace.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserNamespace.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserNamespace.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealFunctionWithDifferentSignatures.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithClasses.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithClasses.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithClasses.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithClasses.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithMacros.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithMacros.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithMacros.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithMacros.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithStructs.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithStructs.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithStructs.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldDealWithStructs.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListPrototypes.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListPrototypes.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListPrototypes.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListPrototypes.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates2.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates2.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates2.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserShouldListTemplates2.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStatic.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStatic.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStatic.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStatic.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStructWithFunctions.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStructWithFunctions.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStructWithFunctions.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsParserStructWithFunctions.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithClassFunction.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithClassFunction.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithClassFunction.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithClassFunction.txt diff --git a/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithMultifile.txt b/internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithMultifile.txt similarity index 100% rename from arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithMultifile.txt rename to internal/arduino/builder/internal/preprocessor/internal/ctags/testdata/TestCTagsRunnerSketchWithMultifile.txt diff --git a/arduino/discovery/testdata/cat/main.go b/internal/arduino/builder/internal/preprocessor/result.go similarity index 68% rename from arduino/discovery/testdata/cat/main.go rename to internal/arduino/builder/internal/preprocessor/result.go index 7f77910fe27..3fa45e40974 100644 --- a/arduino/discovery/testdata/cat/main.go +++ b/internal/arduino/builder/internal/preprocessor/result.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,16 +13,22 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -// Echo stdin to stdout. -// This program is used for testing purposes, to make it available on all -// OS a tool equivalent to UNIX "cat". -package main +package preprocessor -import ( - "io" - "os" -) +type Result struct { + args []string + stdout []byte + stderr []byte +} + +func (r Result) Args() []string { + return r.args +} + +func (r Result) Stdout() []byte { + return r.stdout +} -func main() { - io.Copy(os.Stdout, os.Stdin) +func (r Result) Stderr() []byte { + return r.stderr } diff --git a/arduino/builder/internal/progress/progress.go b/internal/arduino/builder/internal/progress/progress.go similarity index 100% rename from arduino/builder/internal/progress/progress.go rename to internal/arduino/builder/internal/progress/progress.go diff --git a/arduino/builder/internal/progress/progress_test.go b/internal/arduino/builder/internal/progress/progress_test.go similarity index 100% rename from arduino/builder/internal/progress/progress_test.go rename to internal/arduino/builder/internal/progress/progress_test.go diff --git a/executils/executils_windows.go b/internal/arduino/builder/internal/utils/ansi_others.go similarity index 74% rename from executils/executils_windows.go rename to internal/arduino/builder/internal/utils/ansi_others.go index bfb5fb1bdb3..a49a7bb1b25 100644 --- a/executils/executils_windows.go +++ b/internal/arduino/builder/internal/utils/ansi_others.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,13 +13,15 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +//go:build !windows + +package utils import ( - "os/exec" - "syscall" + "errors" ) -func tellCommandNotToSpawnShell(oscmd *exec.Cmd) { - oscmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} +// placeholder for non-Windows machines +func convertAnsiBytesToString([]byte) (string, error) { + return "", errors.New("unimplemented") } diff --git a/internal/arduino/builder/internal/utils/ansi_windows.go b/internal/arduino/builder/internal/utils/ansi_windows.go new file mode 100644 index 00000000000..248e7657b6f --- /dev/null +++ b/internal/arduino/builder/internal/utils/ansi_windows.go @@ -0,0 +1,36 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package utils + +import ( + "golang.org/x/sys/windows" +) + +func convertAnsiBytesToString(data []byte) (string, error) { + if len(data) == 0 { + return "", nil + } + dataSize := int32(len(data)) + size, err := windows.MultiByteToWideChar(windows.GetACP(), 0, &data[0], dataSize, nil, 0) + if err != nil { + return "", err + } + utf16 := make([]uint16, size) + if _, err := windows.MultiByteToWideChar(windows.GetACP(), 0, &data[0], dataSize, &utf16[0], size); err != nil { + return "", err + } + return windows.UTF16ToString(utf16), nil +} diff --git a/arduino/builder/internal/utils/utils.go b/internal/arduino/builder/internal/utils/utils.go similarity index 64% rename from arduino/builder/internal/utils/utils.go rename to internal/arduino/builder/internal/utils/utils.go index efd40b307ea..1c3304d39d0 100644 --- a/arduino/builder/internal/utils/utils.go +++ b/internal/arduino/builder/internal/utils/utils.go @@ -17,53 +17,53 @@ package utils import ( "os" + "runtime" "strings" "unicode" - "github.com/arduino/arduino-cli/i18n" - f "github.com/arduino/arduino-cli/internal/algorithms" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" "github.com/sirupsen/logrus" + "go.bug.st/f" "golang.org/x/text/runes" "golang.org/x/text/transform" "golang.org/x/text/unicode/norm" ) -var tr = i18n.Tr - // ObjFileIsUpToDate fixdoc func ObjFileIsUpToDate(sourceFile, objectFile, dependencyFile *paths.Path) (bool, error) { logrus.Debugf("Checking previous results for %v (result = %v, dep = %v)", sourceFile, objectFile, dependencyFile) if objectFile == nil || dependencyFile == nil { - logrus.Debugf("Not found: nil") + logrus.Debugf("Object file or dependency file not provided") return false, nil } sourceFile = sourceFile.Clean() sourceFileStat, err := sourceFile.Stat() if err != nil { - return false, errors.WithStack(err) + logrus.Debugf("Could not stat source file: %s", err) + return false, err } objectFile = objectFile.Clean() objectFileStat, err := objectFile.Stat() if err != nil { if os.IsNotExist(err) { - logrus.Debugf("Not found: %v", objectFile) + logrus.Debugf("Object file not found: %v", objectFile) return false, nil } - return false, errors.WithStack(err) + logrus.Debugf("Could not stat object file: %s", err) + return false, err } dependencyFile = dependencyFile.Clean() dependencyFileStat, err := dependencyFile.Stat() if err != nil { if os.IsNotExist(err) { - logrus.Debugf("Not found: %v", dependencyFile) + logrus.Debugf("Dependency file not found: %v", dependencyFile) return false, nil } - return false, errors.WithStack(err) + logrus.Debugf("Could not stat dependency file: %s", err) + return false, err } if sourceFileStat.ModTime().After(objectFileStat.ModTime()) { @@ -75,61 +75,79 @@ func ObjFileIsUpToDate(sourceFile, objectFile, dependencyFile *paths.Path) (bool return false, nil } - rows, err := dependencyFile.ReadFileAsLines() + depFileData, err := dependencyFile.ReadFile() if err != nil { - return false, errors.WithStack(err) - } - - rows = f.Map(rows, removeEndingBackSlash) - rows = f.Map(rows, strings.TrimSpace) - rows = f.Map(rows, unescapeDep) - rows = f.Filter(rows, f.NotEquals("")) - - if len(rows) == 0 { - return true, nil - } - - firstRow := rows[0] - if !strings.HasSuffix(firstRow, ":") { - logrus.Debugf("No colon in first line of depfile") - return false, nil - } - objFileInDepFile := firstRow[:len(firstRow)-1] - if objFileInDepFile != objectFile.String() { - logrus.Debugf("Depfile is about different file: %v", objFileInDepFile) - return false, nil + logrus.Debugf("Could not read dependency file: %s", dependencyFile) + return false, err } - // The first line of the depfile contains the path to the object file to generate. - // The second line of the depfile contains the path to the source file. - // All subsequent lines contain the header files necessary to compile the object file. + checkDepFile := func(depFile string) (bool, error) { + rows := strings.Split(strings.ReplaceAll(depFile, "\r\n", "\n"), "\n") + rows = f.Map(rows, removeEndingBackSlash) + rows = f.Map(rows, strings.TrimSpace) + rows = f.Map(rows, unescapeDep) + rows = f.Filter(rows, f.NotEquals("")) - // If we don't do this check it might happen that trying to compile a source file - // that has the same name but a different path wouldn't recreate the object file. - if sourceFile.String() != strings.Trim(rows[1], " ") { - return false, nil - } + if len(rows) == 0 { + return true, nil + } - rows = rows[1:] - for _, row := range rows { - depStat, err := os.Stat(row) - if err != nil && !os.IsNotExist(err) { - // There is probably a parsing error of the dep file - // Ignore the error and trigger a full rebuild anyway - logrus.WithError(err).Debugf("Failed to read: %v", row) + firstRow := rows[0] + if !strings.HasSuffix(firstRow, ":") { + logrus.Debugf("No colon in first line of depfile") return false, nil } - if os.IsNotExist(err) { - logrus.Debugf("Not found: %v", row) + objFileInDepFile := firstRow[:len(firstRow)-1] + if objFileInDepFile != objectFile.String() { + logrus.Debugf("Depfile is about different object file: %v", objFileInDepFile) return false, nil } - if depStat.ModTime().After(objectFileStat.ModTime()) { - logrus.Debugf("%v newer than %v", row, objectFile) + + // The first line of the depfile contains the path to the object file to generate. + // The second line of the depfile contains the path to the source file. + // All subsequent lines contain the header files necessary to compile the object file. + + // If we don't do this check it might happen that trying to compile a source file + // that has the same name but a different path wouldn't recreate the object file. + if sourceFile.String() != strings.Trim(rows[1], " ") { + logrus.Debugf("Depfile is about different source file: %v", strings.Trim(rows[1], " ")) return false, nil } + + rows = rows[1:] + for _, row := range rows { + depStat, err := os.Stat(row) + if err != nil && !os.IsNotExist(err) { + // There is probably a parsing error of the dep file + // Ignore the error and trigger a full rebuild anyway + logrus.WithError(err).Debugf("Failed to read: %v", row) + return false, nil + } + if os.IsNotExist(err) { + logrus.Debugf("Not found: %v", row) + return false, nil + } + if depStat.ModTime().After(objectFileStat.ModTime()) { + logrus.Debugf("%v newer than %v", row, objectFile) + return false, nil + } + } + + return true, nil } - return true, nil + if runtime.GOOS == "windows" { + // This is required because on Windows we don't know which encoding is used + // by gcc to write the dep file (it could be UTF-8 or any of the Windows + // ANSI mappings). + if decoded, err := convertAnsiBytesToString(depFileData); err == nil { + if upToDate, err := checkDepFile(decoded); err == nil && upToDate { + return upToDate, nil + } + } + // Fallback to UTF-8... + } + return checkDepFile(string(depFileData)) } func removeEndingBackSlash(s string) string { @@ -160,17 +178,6 @@ func filterOutSCCS(file *paths.Path) bool { return !sourceControlFolders[file.Base()] } -// filterReadableFiles is a ReadDirFilter that accepts only readable files -func filterReadableFiles(file *paths.Path) bool { - // See if the file is readable by opening it - f, err := file.Open() - if err != nil { - return false - } - f.Close() - return true -} - // filterOutHiddenFiles is a ReadDirFilter that exclude files with a "." prefix in their name var filterOutHiddenFiles = paths.FilterOutPrefixes(".") @@ -180,7 +187,6 @@ func FindFilesInFolder(dir *paths.Path, recurse bool, extensions ...string) (pat filterOutHiddenFiles, filterOutSCCS, paths.FilterOutDirectories(), - filterReadableFiles, ) if len(extensions) > 0 { fileFilter = paths.AndFilter( diff --git a/arduino/builder/internal/utils/utils_test.go b/internal/arduino/builder/internal/utils/utils_test.go similarity index 100% rename from arduino/builder/internal/utils/utils_test.go rename to internal/arduino/builder/internal/utils/utils_test.go diff --git a/arduino/builder/libraries.go b/internal/arduino/builder/libraries.go similarity index 82% rename from arduino/builder/libraries.go rename to internal/arduino/builder/libraries.go index bbe4f514529..d2558e4954f 100644 --- a/arduino/builder/libraries.go +++ b/internal/arduino/builder/libraries.go @@ -20,12 +20,13 @@ import ( "strings" "time" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/arduino/libraries" - f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" + "go.bug.st/f" ) // nolint @@ -40,12 +41,12 @@ func (b *Builder) buildLibraries(includesFolders paths.PathList, importedLibrari libs := importedLibraries if err := b.librariesBuildPath.MkdirAll(); err != nil { - return errors.WithStack(err) + return err } librariesObjectFiles, err := b.compileLibraries(libs, includes) if err != nil { - return errors.WithStack(err) + return err } b.buildArtifacts.librariesObjectFiles = librariesObjectFiles return nil @@ -88,25 +89,25 @@ func (b *Builder) findExpectedPrecompiledLibFolder( } } - b.logger.Info(tr("Library %[1]s has been declared precompiled:", library.Name)) + b.logger.Info(i18n.Tr("Library %[1]s has been declared precompiled:", library.Name)) // Try directory with full fpuSpecs first, if available if len(fpuSpecs) > 0 { fpuSpecs = strings.TrimRight(fpuSpecs, "-") fullPrecompDir := library.SourceDir.Join(mcu).Join(fpuSpecs) if fullPrecompDir.Exist() && directoryContainsFile(fullPrecompDir) { - b.logger.Info(tr("Using precompiled library in %[1]s", fullPrecompDir)) + b.logger.Info(i18n.Tr("Using precompiled library in %[1]s", fullPrecompDir)) return fullPrecompDir } - b.logger.Info(tr(`Precompiled library in "%[1]s" not found`, fullPrecompDir)) + b.logger.Info(i18n.Tr(`Precompiled library in "%[1]s" not found`, fullPrecompDir)) } precompDir := library.SourceDir.Join(mcu) if precompDir.Exist() && directoryContainsFile(precompDir) { - b.logger.Info(tr("Using precompiled library in %[1]s", precompDir)) + b.logger.Info(i18n.Tr("Using precompiled library in %[1]s", precompDir)) return precompDir } - b.logger.Info(tr(`Precompiled library in "%[1]s" not found`, precompDir)) + b.logger.Info(i18n.Tr(`Precompiled library in "%[1]s" not found`, precompDir)) return nil } @@ -118,7 +119,7 @@ func (b *Builder) compileLibraries(libraries libraries.List, includes []string) for _, library := range libraries { libraryObjectFiles, err := b.compileLibrary(library, includes) if err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles.AddAll(libraryObjectFiles) @@ -129,13 +130,13 @@ func (b *Builder) compileLibraries(libraries libraries.List, includes []string) } func (b *Builder) compileLibrary(library *libraries.Library, includes []string) (paths.PathList, error) { - if b.logger.Verbose() { - b.logger.Info(tr(`Compiling library "%[1]s"`, library.Name)) + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { + b.logger.Info(i18n.Tr(`Compiling library "%[1]s"`, library.Name)) } libraryBuildPath := b.librariesBuildPath.Join(library.DirName) if err := libraryBuildPath.MkdirAll(); err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles := paths.NewPathList() @@ -148,12 +149,12 @@ func (b *Builder) compileLibrary(library *libraries.Library, includes []string) ) if !coreSupportPrecompiled { - b.logger.Info(tr("The platform does not support '%[1]s' for precompiled libraries.", "compiler.libraries.ldflags")) + b.logger.Info(i18n.Tr("The platform does not support '%[1]s' for precompiled libraries.", "compiler.libraries.ldflags")) } else if precompiledPath != nil { // Find all libraries in precompiledPath libs, err := precompiledPath.ReadDir() if err != nil { - return nil, errors.WithStack(err) + return nil, err } // Add required LD flags @@ -194,12 +195,12 @@ func (b *Builder) compileLibrary(library *libraries.Library, includes []string) includes, ) if err != nil { - return nil, errors.WithStack(err) + return nil, err } if library.DotALinkage { - archiveFile, err := b.archiveCompiledFiles(libraryBuildPath, paths.New(library.DirName+".a"), libObjectFiles) + archiveFile, err := b.archiveCompiledFiles(libraryBuildPath.Join(library.DirName+".a"), libObjectFiles) if err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles.Add(archiveFile) } else { @@ -215,7 +216,7 @@ func (b *Builder) compileLibrary(library *libraries.Library, includes []string) includes, ) if err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles.AddAll(libObjectFiles) @@ -227,7 +228,7 @@ func (b *Builder) compileLibrary(library *libraries.Library, includes []string) includes, ) if err != nil { - return nil, errors.WithStack(err) + return nil, err } objectFiles.AddAll(utilityObjectFiles) } @@ -245,14 +246,14 @@ func (b *Builder) removeUnusedCompiledLibraries(importedLibraries libraries.List toLibraryNames := func(libraries []*libraries.Library) []string { libraryNames := []string{} for _, library := range libraries { - libraryNames = append(libraryNames, library.Name) + libraryNames = append(libraryNames, library.DirName) } return libraryNames } files, err := b.librariesBuildPath.ReadDir() if err != nil { - return errors.WithStack(err) + return err } libraryNames := toLibraryNames(importedLibraries) @@ -260,7 +261,7 @@ func (b *Builder) removeUnusedCompiledLibraries(importedLibraries libraries.List if file.IsDir() { if !slices.Contains(libraryNames, file.Base()) { if err := file.RemoveAll(); err != nil { - return errors.WithStack(err) + return err } } } @@ -280,7 +281,7 @@ func (b *Builder) warnAboutArchIncompatibleLibraries(importedLibraries libraries for _, importedLibrary := range importedLibraries { if !importedLibrary.SupportsAnyArchitectureIn(archs...) { b.logger.Info( - tr("WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be incompatible with your current board which runs on %[3]s architecture(s).", + i18n.Tr("WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be incompatible with your current board which runs on %[3]s architecture(s).", importedLibrary.Name, strings.Join(importedLibrary.Architectures, ", "), strings.Join(archs, ", "))) @@ -292,24 +293,24 @@ func (b *Builder) warnAboutArchIncompatibleLibraries(importedLibraries libraries // TODO here we can completly remove this part as it's duplicated in what we can // read in the gRPC response func (b *Builder) printUsedLibraries(importedLibraries libraries.List) { - if !b.logger.Verbose() || len(importedLibraries) == 0 { + if b.logger.VerbosityLevel() != logger.VerbosityVerbose || len(importedLibraries) == 0 { return } for _, library := range importedLibraries { legacy := "" if library.IsLegacy { - legacy = tr("(legacy)") + legacy = i18n.Tr("(legacy)") } if library.Version.String() == "" { b.logger.Info( - tr("Using library %[1]s in folder: %[2]s %[3]s", + i18n.Tr("Using library %[1]s in folder: %[2]s %[3]s", library.Name, library.InstallDir, legacy)) } else { b.logger.Info( - tr("Using library %[1]s at version %[2]s in folder: %[3]s %[4]s", + i18n.Tr("Using library %[1]s at version %[2]s in folder: %[3]s %[4]s", library.Name, library.Version, library.InstallDir, diff --git a/arduino/builder/linker.go b/internal/arduino/builder/linker.go similarity index 69% rename from arduino/builder/linker.go rename to internal/arduino/builder/linker.go index caad00d02c9..77f450a9182 100644 --- a/arduino/builder/linker.go +++ b/internal/arduino/builder/linker.go @@ -18,16 +18,17 @@ package builder import ( "strings" - f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" + "go.bug.st/f" ) // link fixdoc func (b *Builder) link() error { if b.onlyUpdateCompilationDatabase { - if b.logger.Verbose() { - b.logger.Info(tr("Skip linking of final executable.")) + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { + b.logger.Info(i18n.Tr("Skip linking of final executable.")) } return nil } @@ -39,7 +40,7 @@ func (b *Builder) link() error { coreDotARelPath, err := b.buildPath.RelTo(b.buildArtifacts.coreArchiveFilePath) if err != nil { - return errors.WithStack(err) + return err } wrapWithDoubleQuotes := func(value string) string { return "\"" + value + "\"" } @@ -54,34 +55,31 @@ func (b *Builder) link() error { // it may happen that a subdir/spi.o inside the archive may be overwritten by a anotherdir/spi.o // because thery are both named spi.o. - properties := b.buildProperties.Clone() - archives := paths.NewPathList() + // Put all the existing archives apart from the other object files + existingArchives := objectFiles.Clone() + existingArchives.FilterSuffix(".a") + objectFiles.FilterOutSuffix(".a") + + // Generate an archive for each directory from the remaining object files + newArchives := paths.NewPathList() for _, object := range objectFiles { - if object.HasSuffix(".a") { - archives.Add(object) - continue - } archive := object.Parent().Join("objs.a") - if !archives.Contains(archive) { - archives.Add(archive) - // Cleanup old archives - _ = archive.Remove() - } - properties.Set("archive_file", archive.Base()) - properties.SetPath("archive_file_path", archive) - properties.SetPath("object_file", object) - - command, err := b.prepareCommandForRecipe(properties, "recipe.ar.pattern", false) - if err != nil { - return errors.WithStack(err) - } - - if err := b.execCommand(command); err != nil { - return errors.WithStack(err) - } + newArchives.AddIfMissing(archive) + } + for _, archive := range newArchives { + archiveDir := archive.Parent() + relatedObjectFiles := objectFiles.Clone() + relatedObjectFiles.Filter(func(object *paths.Path) bool { + // extract all the object files that are in the same directory of the archive + return object.Parent().EquivalentTo(archiveDir) + }) + b.archiveCompiledFiles(archive, relatedObjectFiles) } - objectFileList = strings.Join(f.Map(archives.AsStrings(), wrapWithDoubleQuotes), " ") + // Put everything together + allArchives := existingArchives.Clone() + allArchives.AddAll(newArchives) + objectFileList = strings.Join(f.Map(allArchives.AsStrings(), wrapWithDoubleQuotes), " ") objectFileList = "-Wl,--whole-archive " + objectFileList + " -Wl,--no-whole-archive" } diff --git a/arduino/builder/internal/logger/logger.go b/internal/arduino/builder/logger/logger.go similarity index 76% rename from arduino/builder/internal/logger/logger.go rename to internal/arduino/builder/logger/logger.go index 992c15a25b2..347c98ce9f8 100644 --- a/arduino/builder/internal/logger/logger.go +++ b/internal/arduino/builder/logger/logger.go @@ -22,18 +22,27 @@ import ( "sync" ) +// Verbosity is the verbosity level of the Logger +type Verbosity int + +const ( + VerbosityQuiet Verbosity = -1 + VerbosityNormal Verbosity = 0 + VerbosityVerbose Verbosity = 1 +) + // BuilderLogger fixdoc type BuilderLogger struct { stdLock sync.Mutex stdout io.Writer stderr io.Writer - verbose bool + verbosity Verbosity warningsLevel string } -// New fixdoc -func New(stdout, stderr io.Writer, verbose bool, warningsLevel string) *BuilderLogger { +// New creates a new Logger to the given output streams with the specified verbosity and warnings level +func New(stdout, stderr io.Writer, verbosity Verbosity, warningsLevel string) *BuilderLogger { if stdout == nil { stdout = os.Stdout } @@ -46,13 +55,16 @@ func New(stdout, stderr io.Writer, verbose bool, warningsLevel string) *BuilderL return &BuilderLogger{ stdout: stdout, stderr: stderr, - verbose: verbose, + verbosity: verbosity, warningsLevel: warningsLevel, } } // Info fixdoc func (l *BuilderLogger) Info(msg string) { + if msg == "" { + return + } l.stdLock.Lock() defer l.stdLock.Unlock() fmt.Fprintln(l.stdout, msg) @@ -60,6 +72,9 @@ func (l *BuilderLogger) Info(msg string) { // Warn fixdoc func (l *BuilderLogger) Warn(msg string) { + if msg == "" { + return + } l.stdLock.Lock() defer l.stdLock.Unlock() fmt.Fprintln(l.stderr, msg) @@ -79,9 +94,9 @@ func (l *BuilderLogger) WriteStderr(data []byte) (int, error) { return l.stderr.Write(data) } -// Verbose fixdoc -func (l *BuilderLogger) Verbose() bool { - return l.verbose +// VerbosityLevel returns the verbosity level of the logger +func (l *BuilderLogger) VerbosityLevel() Verbosity { + return l.verbosity } // WarningsLevel fixdoc diff --git a/arduino/builder/preprocess_sketch.go b/internal/arduino/builder/preprocess_sketch.go similarity index 68% rename from arduino/builder/preprocess_sketch.go rename to internal/arduino/builder/preprocess_sketch.go index 8028d345fdf..290b2963664 100644 --- a/arduino/builder/preprocess_sketch.go +++ b/internal/arduino/builder/preprocess_sketch.go @@ -16,21 +16,26 @@ package builder import ( - "github.com/arduino/arduino-cli/arduino/builder/internal/preprocessor" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/preprocessor" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" "github.com/arduino/go-paths-helper" ) // preprocessSketch fixdoc func (b *Builder) preprocessSketch(includes paths.PathList) error { // In the future we might change the preprocessor - normalOutput, verboseOutput, err := preprocessor.PreprocessSketchWithCtags( + result, err := preprocessor.PreprocessSketchWithCtags( + b.ctx, b.sketch, b.buildPath, includes, b.lineOffset, b.buildProperties, b.onlyUpdateCompilationDatabase, + b.logger.VerbosityLevel() == logger.VerbosityVerbose, ) - if b.logger.Verbose() { - b.logger.WriteStdout(verboseOutput) - } else { - b.logger.WriteStdout(normalOutput) + if result != nil { + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { + b.logger.WriteStdout(result.Stdout()) + } + b.logger.WriteStderr(result.Stderr()) + b.diagnosticStore.Parse(result.Args(), result.Stderr()) } return err diff --git a/arduino/builder/recipe.go b/internal/arduino/builder/recipe.go similarity index 82% rename from arduino/builder/recipe.go rename to internal/arduino/builder/recipe.go index 57b137176f1..b4c456e360f 100644 --- a/arduino/builder/recipe.go +++ b/internal/arduino/builder/recipe.go @@ -16,18 +16,18 @@ package builder import ( - "fmt" "sort" "strings" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/i18n" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" "github.com/sirupsen/logrus" ) // RunRecipe fixdoc func (b *Builder) RunRecipe(prefix, suffix string, skipIfOnlyUpdatingCompilationDatabase bool) error { - logrus.Debugf(fmt.Sprintf("Looking for recipes like %s", prefix+"*"+suffix)) + logrus.Debugf("Looking for recipes like %s", prefix+"*"+suffix) // TODO is it necessary to use Clone? buildProperties := b.buildProperties.Clone() @@ -36,22 +36,22 @@ func (b *Builder) RunRecipe(prefix, suffix string, skipIfOnlyUpdatingCompilation // TODO is it necessary to use Clone? properties := buildProperties.Clone() for _, recipe := range recipes { - logrus.Debugf(fmt.Sprintf("Running recipe: %s", recipe)) + logrus.Debugf("Running recipe: %s", recipe) command, err := b.prepareCommandForRecipe(properties, recipe, false) if err != nil { - return errors.WithStack(err) + return err } if b.onlyUpdateCompilationDatabase && skipIfOnlyUpdatingCompilationDatabase { - if b.logger.Verbose() { - b.logger.Info(tr("Skipping: %[1]s", strings.Join(command.GetArgs(), " "))) + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { + b.logger.Info(i18n.Tr("Skipping: %[1]s", strings.Join(command.GetArgs(), " "))) } return nil } if err := b.execCommand(command); err != nil { - return errors.WithStack(err) + return err } } diff --git a/arduino/builder/sizer.go b/internal/arduino/builder/sizer.go similarity index 71% rename from arduino/builder/sizer.go rename to internal/arduino/builder/sizer.go index a4e362f7106..ae188b48f2b 100644 --- a/arduino/builder/sizer.go +++ b/internal/arduino/builder/sizer.go @@ -18,14 +18,16 @@ package builder import ( "bytes" "encoding/json" + "errors" "fmt" "regexp" "strconv" - "github.com/arduino/arduino-cli/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/builder/internal/utils" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" ) // ExecutableSectionSize represents a section of the executable output file @@ -75,19 +77,19 @@ func (b *Builder) size() error { func (b *Builder) checkSizeAdvanced() (ExecutablesFileSections, error) { command, err := b.prepareCommandForRecipe(b.buildProperties, "recipe.advanced_size.pattern", false) if err != nil { - return nil, errors.New(tr("Error while determining sketch size: %s", err)) + return nil, errors.New(i18n.Tr("Error while determining sketch size: %s", err)) } - if b.logger.Verbose() { + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { b.logger.Info(utils.PrintableCommand(command.GetArgs())) } out := &bytes.Buffer{} command.RedirectStdoutTo(out) command.RedirectStderrTo(b.logger.Stderr()) if err := command.Start(); err != nil { - return nil, errors.New(tr("Error while determining sketch size: %s", err)) + return nil, errors.New(i18n.Tr("Error while determining sketch size: %s", err)) } if err := command.Wait(); err != nil { - return nil, errors.New(tr("Error while determining sketch size: %s", err)) + return nil, errors.New(i18n.Tr("Error while determining sketch size: %s", err)) } type AdvancedSizerResponse struct { @@ -106,7 +108,7 @@ func (b *Builder) checkSizeAdvanced() (ExecutablesFileSections, error) { var resp AdvancedSizerResponse if err := json.Unmarshal(out.Bytes(), &resp); err != nil { - return nil, errors.New(tr("Error while determining sketch size: %s", err)) + return nil, errors.New(i18n.Tr("Error while determining sketch size: %s", err)) } executableSectionsSize := resp.Sections @@ -150,23 +152,25 @@ func (b *Builder) checkSize() (ExecutablesFileSections, error) { textSize, dataSize, _, err := b.execSizeRecipe(properties) if err != nil { - b.logger.Warn(tr("Couldn't determine program size")) + b.logger.Warn(i18n.Tr("Couldn't determine program size")) return nil, nil } - b.logger.Info(tr("Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s bytes.", - strconv.Itoa(textSize), - strconv.Itoa(maxTextSize), - strconv.Itoa(textSize*100/maxTextSize))) - if dataSize >= 0 { - if maxDataSize > 0 { - b.logger.Info(tr("Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s bytes for local variables. Maximum is %[2]s bytes.", - strconv.Itoa(dataSize), - strconv.Itoa(maxDataSize), - strconv.Itoa(dataSize*100/maxDataSize), - strconv.Itoa(maxDataSize-dataSize))) - } else { - b.logger.Info(tr("Global variables use %[1]s bytes of dynamic memory.", strconv.Itoa(dataSize))) + if b.logger.VerbosityLevel() > logger.VerbosityQuiet { + b.logger.Info(i18n.Tr("Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s bytes.", + strconv.Itoa(textSize), + strconv.Itoa(maxTextSize), + strconv.Itoa(textSize*100/maxTextSize))) + if dataSize >= 0 { + if maxDataSize > 0 { + b.logger.Info(i18n.Tr("Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s bytes for local variables. Maximum is %[2]s bytes.", + strconv.Itoa(dataSize), + strconv.Itoa(maxDataSize), + strconv.Itoa(dataSize*100/maxDataSize), + strconv.Itoa(maxDataSize-dataSize))) + } else { + b.logger.Info(i18n.Tr("Global variables use %[1]s bytes of dynamic memory.", strconv.Itoa(dataSize))) + } } } @@ -186,13 +190,13 @@ func (b *Builder) checkSize() (ExecutablesFileSections, error) { } if textSize > maxTextSize { - b.logger.Warn(tr("Sketch too big; see %[1]s for tips on reducing it.", "https://support.arduino.cc/hc/en-us/articles/360013825179")) - return executableSectionsSize, errors.New(tr("text section exceeds available space in board")) + b.logger.Warn(i18n.Tr("Sketch too big; see %[1]s for tips on reducing it.", "https://support.arduino.cc/hc/en-us/articles/360013825179")) + return executableSectionsSize, errors.New(i18n.Tr("text section exceeds available space in board")) } if maxDataSize > 0 && dataSize > maxDataSize { - b.logger.Warn(tr("Not enough memory; see %[1]s for tips on reducing your footprint.", "https://support.arduino.cc/hc/en-us/articles/360013825179")) - return executableSectionsSize, errors.New(tr("data section exceeds available space in board")) + b.logger.Warn(i18n.Tr("Not enough memory; see %[1]s for tips on reducing your footprint.", "https://support.arduino.cc/hc/en-us/articles/360013825179")) + return executableSectionsSize, errors.New(i18n.Tr("data section exceeds available space in board")) } if w := properties.Get("build.warn_data_percentage"); w != "" { @@ -201,7 +205,7 @@ func (b *Builder) checkSize() (ExecutablesFileSections, error) { return executableSectionsSize, err } if maxDataSize > 0 && dataSize > maxDataSize*warnDataPercentage/100 { - b.logger.Warn(tr("Low memory available, stability problems may occur.")) + b.logger.Warn(i18n.Tr("Low memory available, stability problems may occur.")) } } @@ -211,21 +215,21 @@ func (b *Builder) checkSize() (ExecutablesFileSections, error) { func (b *Builder) execSizeRecipe(properties *properties.Map) (textSize int, dataSize int, eepromSize int, resErr error) { command, err := b.prepareCommandForRecipe(properties, "recipe.size.pattern", false) if err != nil { - resErr = fmt.Errorf(tr("Error while determining sketch size: %s"), err) + resErr = errors.New(i18n.Tr("Error while determining sketch size: %s", err)) return } - if b.logger.Verbose() { + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { b.logger.Info(utils.PrintableCommand(command.GetArgs())) } commandStdout := &bytes.Buffer{} command.RedirectStdoutTo(commandStdout) command.RedirectStderrTo(b.logger.Stderr()) if err := command.Start(); err != nil { - resErr = fmt.Errorf(tr("Error while determining sketch size: %s"), err) + resErr = errors.New(i18n.Tr("Error while determining sketch size: %s", err)) return } if err := command.Wait(); err != nil { - resErr = fmt.Errorf(tr("Error while determining sketch size: %s"), err) + resErr = errors.New(i18n.Tr("Error while determining sketch size: %s", err)) return } @@ -236,23 +240,23 @@ func (b *Builder) execSizeRecipe(properties *properties.Map) (textSize int, data textSize, err = computeSize(properties.Get("recipe.size.regex"), out) if err != nil { - resErr = fmt.Errorf(tr("Invalid size regexp: %s"), err) + resErr = errors.New(i18n.Tr("Invalid size regexp: %s", err)) return } if textSize == -1 { - resErr = errors.New(tr("Missing size regexp")) + resErr = errors.New(i18n.Tr("Missing size regexp")) return } dataSize, err = computeSize(properties.Get("recipe.size.regex.data"), out) if err != nil { - resErr = fmt.Errorf(tr("Invalid data size regexp: %s"), err) + resErr = errors.New(i18n.Tr("Invalid data size regexp: %s", err)) return } eepromSize, err = computeSize(properties.Get("recipe.size.regex.eeprom"), out) if err != nil { - resErr = fmt.Errorf(tr("Invalid eeprom size regexp: %s"), err) + resErr = errors.New(i18n.Tr("Invalid eeprom size regexp: %s", err)) return } diff --git a/arduino/builder/sizer_test.go b/internal/arduino/builder/sizer_test.go similarity index 100% rename from arduino/builder/sizer_test.go rename to internal/arduino/builder/sizer_test.go diff --git a/arduino/builder/sketch.go b/internal/arduino/builder/sketch.go similarity index 82% rename from arduino/builder/sketch.go rename to internal/arduino/builder/sketch.go index 3a7c21f3ded..76e77f4c8e8 100644 --- a/arduino/builder/sketch.go +++ b/internal/arduino/builder/sketch.go @@ -17,24 +17,24 @@ package builder import ( "bytes" + "errors" "fmt" "math" "regexp" "strconv" "strings" - "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/i18n" - f "github.com/arduino/arduino-cli/internal/algorithms" + "fortio.org/safecast" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/logger" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "github.com/marcinbor85/gohex" - - "github.com/pkg/errors" + "go.bug.st/f" ) var ( includesArduinoH = regexp.MustCompile(`(?m)^\s*#\s*include\s*[<\"]Arduino\.h[>\"]`) - tr = i18n.Tr ) // prepareSketchBuildPath copies the sketch source files in the build path. @@ -42,7 +42,7 @@ var ( // .cpp file still needs to be Arduino-preprocessed to compile). func (b *Builder) prepareSketchBuildPath() error { if err := b.sketchBuildPath.MkdirAll(); err != nil { - return errors.Wrap(err, tr("unable to create a folder to save the sketch")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to create a folder to save the sketch"), err) } offset, mergedSource, err := b.sketchMergeSources(b.sourceOverrides) @@ -73,14 +73,14 @@ func (b *Builder) sketchMergeSources(overrides map[string]string) (int, string, getSource := func(f *paths.Path) (string, error) { path, err := b.sketch.FullPath.RelTo(f) if err != nil { - return "", errors.Wrap(err, tr("unable to compute relative path to the sketch for the item")) + return "", fmt.Errorf("%s: %w", i18n.Tr("unable to compute relative path to the sketch for the item"), err) } if override, ok := overrides[path.String()]; ok { return override, nil } data, err := f.ReadFile() if err != nil { - return "", fmt.Errorf(tr("reading file %[1]s: %[2]s"), f, err) + return "", errors.New(i18n.Tr("reading file %[1]s: %[2]s", f, err)) } return string(data), nil } @@ -117,13 +117,13 @@ func (b *Builder) sketchCopyAdditionalFiles(buildPath *paths.Path, overrides map for _, file := range b.sketch.AdditionalFiles { relpath, err := b.sketch.FullPath.RelTo(file) if err != nil { - return errors.Wrap(err, tr("unable to compute relative path to the sketch for the item")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to compute relative path to the sketch for the item"), err) } targetPath := buildPath.JoinPath(relpath) // create the directory containing the target if err = targetPath.Parent().MkdirAll(); err != nil { - return errors.Wrap(err, tr("unable to create the folder containing the item")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to create the folder containing the item"), err) } var sourceBytes []byte @@ -134,7 +134,7 @@ func (b *Builder) sketchCopyAdditionalFiles(buildPath *paths.Path, overrides map // read the source file s, err := file.ReadFile() if err != nil { - return errors.Wrap(err, tr("unable to read contents of the source item")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to read contents of the source item"), err) } sourceBytes = s } @@ -144,7 +144,7 @@ func (b *Builder) sketchCopyAdditionalFiles(buildPath *paths.Path, overrides map err = writeIfDifferent(sourceBytes, targetPath) if err != nil { - return errors.Wrap(err, tr("unable to write to destination file")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to write to destination file"), err) } } @@ -161,7 +161,7 @@ func writeIfDifferent(source []byte, destPath *paths.Path) error { // Read the destination file if it exists existingBytes, err := destPath.ReadFile() if err != nil { - return errors.Wrap(err, tr("unable to read contents of the destination item")) + return fmt.Errorf("%s: %w", i18n.Tr("unable to read contents of the destination item"), err) } // Overwrite if contents are different @@ -178,7 +178,7 @@ func (b *Builder) buildSketch(includesFolders paths.PathList) error { includes := f.Map(includesFolders.AsStrings(), cpp.WrapWithHyphenI) if err := b.sketchBuildPath.MkdirAll(); err != nil { - return errors.WithStack(err) + return err } sketchObjectFiles, err := b.compileFiles( @@ -187,7 +187,7 @@ func (b *Builder) buildSketch(includesFolders paths.PathList) error { includes, ) if err != nil { - return errors.WithStack(err) + return err } // The "src/" subdirectory of a sketch is compiled recursively @@ -199,7 +199,7 @@ func (b *Builder) buildSketch(includesFolders paths.PathList) error { includes, ) if err != nil { - return errors.WithStack(err) + return err } sketchObjectFiles.AddAll(srcObjectFiles) } @@ -241,8 +241,8 @@ func (b *Builder) mergeSketchWithBootloader() error { bootloaderPath := b.buildProperties.GetPath("runtime.platform.path").Join("bootloaders", bootloader) if bootloaderPath.NotExist() { - if b.logger.Verbose() { - b.logger.Warn(tr("Bootloader file specified but missing: %[1]s", bootloaderPath)) + if b.logger.VerbosityLevel() == logger.VerbosityVerbose { + b.logger.Warn(i18n.Tr("Bootloader file specified but missing: %[1]s", bootloaderPath)) } return nil } @@ -256,7 +256,7 @@ func (b *Builder) mergeSketchWithBootloader() error { maximumBinSize *= 2 } err := merge(builtSketchPath, bootloaderPath, mergedSketchPath, maximumBinSize) - if err != nil && b.logger.Verbose() { + if err != nil && b.logger.VerbosityLevel() == logger.VerbosityVerbose { b.logger.Info(err.Error()) } @@ -299,8 +299,12 @@ func merge(builtSketchPath, bootloaderPath, mergedSketchPath *paths.Path, maximu if segment.Address < initialAddress { initialAddress = segment.Address } - if segment.Address+uint32(len(segment.Data)) > lastAddress { - lastAddress = segment.Address + uint32(len(segment.Data)) + lenData, err := safecast.Convert[uint32](len(segment.Data)) + if err != nil { + return err + } + if segment.Address+lenData > lastAddress { + lastAddress = segment.Address + lenData } } for _, segment := range memSketch.GetDataSegments() { @@ -310,8 +314,12 @@ func merge(builtSketchPath, bootloaderPath, mergedSketchPath *paths.Path, maximu if segment.Address < initialAddress { initialAddress = segment.Address } - if segment.Address+uint32(len(segment.Data)) > lastAddress { - lastAddress = segment.Address + uint32(len(segment.Data)) + lenData, err := safecast.Convert[uint32](len(segment.Data)) + if err != nil { + return err + } + if segment.Address+lenData > lastAddress { + lastAddress = segment.Address + lenData } } @@ -325,7 +333,11 @@ func merge(builtSketchPath, bootloaderPath, mergedSketchPath *paths.Path, maximu // Write out a .bin if the addresses doesn't go too far away from origin // (and consequently produce a very large bin) size := lastAddress - initialAddress - if size > uint32(maximumBinSize) { + maximumBinSizeUint32, err := safecast.Convert[uint32](maximumBinSize) + if err != nil { + return nil + } + if size > maximumBinSizeUint32 { return nil } mergedSketchPathBin := paths.New(strings.TrimSuffix(mergedSketchPath.String(), ".hex") + ".bin") diff --git a/arduino/builder/sketch_test.go b/internal/arduino/builder/sketch_test.go similarity index 98% rename from arduino/builder/sketch_test.go rename to internal/arduino/builder/sketch_test.go index 1ae684e12ed..208efc468b0 100644 --- a/arduino/builder/sketch_test.go +++ b/internal/arduino/builder/sketch_test.go @@ -21,7 +21,7 @@ import ( "strings" "testing" - "github.com/arduino/arduino-cli/arduino/sketch" + "github.com/arduino/arduino-cli/internal/arduino/sketch" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" ) diff --git a/arduino/builder/testdata/TestCopyAdditionalFiles/TestCopyAdditionalFiles.ino b/internal/arduino/builder/testdata/TestCopyAdditionalFiles/TestCopyAdditionalFiles.ino similarity index 100% rename from arduino/builder/testdata/TestCopyAdditionalFiles/TestCopyAdditionalFiles.ino rename to internal/arduino/builder/testdata/TestCopyAdditionalFiles/TestCopyAdditionalFiles.ino diff --git a/arduino/builder/testdata/TestCopyAdditionalFiles/include/foo.h b/internal/arduino/builder/testdata/TestCopyAdditionalFiles/include/foo.h similarity index 100% rename from arduino/builder/testdata/TestCopyAdditionalFiles/include/foo.h rename to internal/arduino/builder/testdata/TestCopyAdditionalFiles/include/foo.h diff --git a/arduino/builder/testdata/TestLoadSketchCaseMismatch/testloadsketchcasemismatch.ino b/internal/arduino/builder/testdata/TestLoadSketchCaseMismatch/testloadsketchcasemismatch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchCaseMismatch/testloadsketchcasemismatch.ino rename to internal/arduino/builder/testdata/TestLoadSketchCaseMismatch/testloadsketchcasemismatch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/.#sketch.ino b/internal/arduino/builder/testdata/TestLoadSketchFolder/.#sketch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/.#sketch.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolder/.#sketch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/TestLoadSketchFolder.ino b/internal/arduino/builder/testdata/TestLoadSketchFolder/TestLoadSketchFolder.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/TestLoadSketchFolder.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolder/TestLoadSketchFolder.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/doc.txt b/internal/arduino/builder/testdata/TestLoadSketchFolder/doc.txt similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/doc.txt rename to internal/arduino/builder/testdata/TestLoadSketchFolder/doc.txt diff --git a/arduino/builder/testdata/TestLoadSketchFolder/header.h b/internal/arduino/builder/testdata/TestLoadSketchFolder/header.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/header.h rename to internal/arduino/builder/testdata/TestLoadSketchFolder/header.h diff --git a/arduino/builder/testdata/TestLoadSketchFolder/old.pde b/internal/arduino/builder/testdata/TestLoadSketchFolder/old.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/old.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolder/old.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolder/other.ino b/internal/arduino/builder/testdata/TestLoadSketchFolder/other.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/other.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolder/other.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/s_file.S b/internal/arduino/builder/testdata/TestLoadSketchFolder/s_file.S similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/s_file.S rename to internal/arduino/builder/testdata/TestLoadSketchFolder/s_file.S diff --git a/arduino/builder/testdata/TestLoadSketchFolder/src/dont_load_me.ino b/internal/arduino/builder/testdata/TestLoadSketchFolder/src/dont_load_me.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/src/dont_load_me.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolder/src/dont_load_me.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolder/src/helper.h b/internal/arduino/builder/testdata/TestLoadSketchFolder/src/helper.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolder/src/helper.h rename to internal/arduino/builder/testdata/TestLoadSketchFolder/src/helper.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/.#sketch.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/.#sketch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/.#sketch.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/.#sketch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/TestLoadSketchFolderBothInoAndPde.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/doc.txt b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/doc.txt similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/doc.txt rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/doc.txt diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/header.h b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/header.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/header.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/header.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/old.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/old.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/old.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/old.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/other.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/other.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/other.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/other.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/s_file.S b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/s_file.S similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/s_file.S rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/s_file.S diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/dont_load_me.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/dont_load_me.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/dont_load_me.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/dont_load_me.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/helper.h b/internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/helper.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/helper.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderBothInoAndPde/src/helper.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderIno/TestLoadSketchFolderIno.ino/TestLoadSketchFolder.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderIno/TestLoadSketchFolderIno.ino/TestLoadSketchFolder.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderIno/TestLoadSketchFolderIno.ino/TestLoadSketchFolder.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderIno/TestLoadSketchFolderIno.ino/TestLoadSketchFolder.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/.#sketch.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/.#sketch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/.#sketch.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/.#sketch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/TestLoadSketchFolderPde.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/TestLoadSketchFolderPde.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/TestLoadSketchFolderPde.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/TestLoadSketchFolderPde.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/doc.txt b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/doc.txt similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/doc.txt rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/doc.txt diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/header.h b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/header.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/header.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/header.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/old.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/old.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/old.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/old.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/other.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/other.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/other.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/other.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/s_file.S b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/s_file.S similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/s_file.S rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/s_file.S diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/src/dont_load_me.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/src/dont_load_me.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/src/dont_load_me.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/src/dont_load_me.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderPde/src/helper.h b/internal/arduino/builder/testdata/TestLoadSketchFolderPde/src/helper.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderPde/src/helper.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderPde/src/helper.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/.#sketch.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/.#sketch.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/.#sketch.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/.#sketch.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/TestLoadSketchFolderSymlink.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/TestLoadSketchFolderSymlink.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/TestLoadSketchFolderSymlink.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/TestLoadSketchFolderSymlink.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/doc.txt b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/doc.txt similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/doc.txt rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/doc.txt diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/header.h b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/header.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/header.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/header.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/old.pde b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/old.pde similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/old.pde rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/old.pde diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/other.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/other.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/other.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/other.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/s_file.S b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/s_file.S similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/s_file.S rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/s_file.S diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/dont_load_me.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/dont_load_me.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/dont_load_me.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/dont_load_me.ino diff --git a/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/helper.h b/internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/helper.h similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/helper.h rename to internal/arduino/builder/testdata/TestLoadSketchFolderSymlinkSrc/src/helper.h diff --git a/arduino/builder/testdata/TestLoadSketchFolderWrongMain/main.ino b/internal/arduino/builder/testdata/TestLoadSketchFolderWrongMain/main.ino similarity index 100% rename from arduino/builder/testdata/TestLoadSketchFolderWrongMain/main.ino rename to internal/arduino/builder/testdata/TestLoadSketchFolderWrongMain/main.ino diff --git a/arduino/builder/testdata/TestMergeSketchSources.txt b/internal/arduino/builder/testdata/TestMergeSketchSources.txt similarity index 100% rename from arduino/builder/testdata/TestMergeSketchSources.txt rename to internal/arduino/builder/testdata/TestMergeSketchSources.txt diff --git a/arduino/builder/testdata/TestMergeSketchSourcesArduinoIncluded/TestMergeSketchSourcesArduinoIncluded.ino b/internal/arduino/builder/testdata/TestMergeSketchSourcesArduinoIncluded/TestMergeSketchSourcesArduinoIncluded.ino similarity index 100% rename from arduino/builder/testdata/TestMergeSketchSourcesArduinoIncluded/TestMergeSketchSourcesArduinoIncluded.ino rename to internal/arduino/builder/testdata/TestMergeSketchSourcesArduinoIncluded/TestMergeSketchSourcesArduinoIncluded.ino diff --git a/arduino/builder/testdata/TestMergeSketchSources_win.txt b/internal/arduino/builder/testdata/TestMergeSketchSources_win.txt similarity index 100% rename from arduino/builder/testdata/TestMergeSketchSources_win.txt rename to internal/arduino/builder/testdata/TestMergeSketchSources_win.txt diff --git a/arduino/builder/testdata/TestSaveSketch.ino b/internal/arduino/builder/testdata/TestSaveSketch.ino similarity index 100% rename from arduino/builder/testdata/TestSaveSketch.ino rename to internal/arduino/builder/testdata/TestSaveSketch.ino diff --git a/arduino/builder/testdata/TestSketchWithIppFile/TestSketchWithIppFile.ino b/internal/arduino/builder/testdata/TestSketchWithIppFile/TestSketchWithIppFile.ino similarity index 100% rename from arduino/builder/testdata/TestSketchWithIppFile/TestSketchWithIppFile.ino rename to internal/arduino/builder/testdata/TestSketchWithIppFile/TestSketchWithIppFile.ino diff --git a/arduino/builder/testdata/TestSketchWithIppFile/template.ipp b/internal/arduino/builder/testdata/TestSketchWithIppFile/template.ipp similarity index 100% rename from arduino/builder/testdata/TestSketchWithIppFile/template.ipp rename to internal/arduino/builder/testdata/TestSketchWithIppFile/template.ipp diff --git a/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/TestSketchWithMarkdownAsciidocJson.ino b/internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/TestSketchWithMarkdownAsciidocJson.ino similarity index 100% rename from arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/TestSketchWithMarkdownAsciidocJson.ino rename to internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/TestSketchWithMarkdownAsciidocJson.ino diff --git a/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.adoc b/internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.adoc similarity index 100% rename from arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.adoc rename to internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.adoc diff --git a/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.json b/internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.json similarity index 100% rename from arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.json rename to internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.json diff --git a/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.md b/internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.md similarity index 100% rename from arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.md rename to internal/arduino/builder/testdata/TestSketchWithMarkdownAsciidocJson/foo.md diff --git a/arduino/builder/testdata/TestSketchWithTppFile/TestSketchWithTppFile.ino b/internal/arduino/builder/testdata/TestSketchWithTppFile/TestSketchWithTppFile.ino similarity index 100% rename from arduino/builder/testdata/TestSketchWithTppFile/TestSketchWithTppFile.ino rename to internal/arduino/builder/testdata/TestSketchWithTppFile/TestSketchWithTppFile.ino diff --git a/arduino/builder/testdata/TestSketchWithTppFile/template.tpp b/internal/arduino/builder/testdata/TestSketchWithTppFile/template.tpp similarity index 100% rename from arduino/builder/testdata/TestSketchWithTppFile/template.tpp rename to internal/arduino/builder/testdata/TestSketchWithTppFile/template.tpp diff --git a/arduino/cores/board.go b/internal/arduino/cores/board.go similarity index 90% rename from arduino/cores/board.go rename to internal/arduino/cores/board.go index 8a41a8fb198..6e966a68aee 100644 --- a/arduino/cores/board.go +++ b/internal/arduino/cores/board.go @@ -16,10 +16,12 @@ package cores import ( - "fmt" + "errors" "strings" "sync" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" "github.com/arduino/go-properties-orderedmap" ) @@ -123,7 +125,7 @@ func (b *Board) GetConfigOptionValues(option string) *properties.Map { // GetBuildProperties returns the build properties and the build // platform for the Board with the configuration passed as parameter. -func (b *Board) GetBuildProperties(fqbn *FQBN) (*properties.Map, error) { +func (b *Board) GetBuildProperties(fqbn *fqbn.FQBN) (*properties.Map, error) { b.buildConfigOptionsStructures() // Override default configs with user configs @@ -139,14 +141,14 @@ func (b *Board) GetBuildProperties(fqbn *FQBN) (*properties.Map, error) { // Check for residual invalid options... for option, value := range config.AsMap() { if option == "" { - return nil, fmt.Errorf(tr("invalid empty option found")) + return nil, errors.New(i18n.Tr("invalid empty option found")) } if _, ok := b.configOptions.GetOk(option); !ok { - return nil, fmt.Errorf(tr("invalid option '%s'"), option) + return nil, errors.New(i18n.Tr("invalid option '%s'", option)) } optionsConf, ok := b.configOptionProperties[option+"="+value] if !ok { - return nil, fmt.Errorf(tr("invalid value '%[1]s' for option '%[2]s'"), value, option) + return nil, errors.New(i18n.Tr("invalid value '%[1]s' for option '%[2]s'", value, option)) } buildProperties.Merge(optionsConf) } @@ -160,9 +162,9 @@ func (b *Board) GetBuildProperties(fqbn *FQBN) (*properties.Map, error) { // "cpu=atmega2560". // FIXME: deprecated, use GetBuildProperties instead func (b *Board) GeneratePropertiesForConfiguration(config string) (*properties.Map, error) { - fqbn, err := ParseFQBN(b.String() + ":" + config) + fqbn, err := fqbn.Parse(b.String() + ":" + config) if err != nil { - return nil, fmt.Errorf(tr("parsing fqbn: %s"), err) + return nil, errors.New(i18n.Tr("parsing fqbn: %s", err)) } return b.GetBuildProperties(fqbn) } @@ -241,3 +243,10 @@ func (b *Board) IdentifyBoardConfiguration(query *properties.Map) *properties.Ma } return res } + +// GetDefaultProgrammerID returns the board's default programmer as +// defined in 'programmer.default' property of the board. If the board +// has no default programmer the empty string is returned. +func (b *Board) GetDefaultProgrammerID() string { + return b.Properties.Get("programmer.default") +} diff --git a/arduino/cores/board_test.go b/internal/arduino/cores/board_test.go similarity index 100% rename from arduino/cores/board_test.go rename to internal/arduino/cores/board_test.go diff --git a/arduino/cores/cores.go b/internal/arduino/cores/cores.go similarity index 80% rename from arduino/cores/cores.go rename to internal/arduino/cores/cores.go index 19ba9eeaf76..25c73508b76 100644 --- a/arduino/cores/cores.go +++ b/internal/arduino/cores/cores.go @@ -24,11 +24,11 @@ import ( "path/filepath" "sort" "strings" + "time" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/arduino/utils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/utils" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" @@ -37,14 +37,13 @@ import ( // Platform represents a platform package. type Platform struct { - Architecture string // The name of the architecture of this package. - Name string - Category string + Architecture string // The name of the architecture of this package. Releases map[semver.NormalizedString]*PlatformRelease // The Releases of this platform, labeled by version. Package *Package `json:"-"` ManuallyInstalled bool // true if the Platform has been installed without the CLI - Deprecated bool // true if the Platform has been deprecated + Deprecated bool // true if the latest PlatformRelease of this Platform has been deprecated Indexed bool // true if the Platform has been indexed from additional-urls + Latest *semver.Version `json:"-"` } // PlatformReleaseHelp represents the help URL for this Platform release @@ -54,12 +53,15 @@ type PlatformReleaseHelp struct { // PlatformRelease represents a release of a plaform package. type PlatformRelease struct { + Name string + Category string Resource *resources.DownloadResource Version *semver.Version BoardsManifest []*BoardManifest ToolDependencies ToolDependencies DiscoveryDependencies DiscoveryDependencies MonitorDependencies MonitorDependencies + Deprecated bool Help PlatformReleaseHelp `json:"-"` Platform *Platform `json:"-"` Properties *properties.Map `json:"-"` @@ -68,11 +70,57 @@ type PlatformRelease struct { Programmers map[string]*Programmer `json:"-"` Menus *properties.Map `json:"-"` InstallDir *paths.Path `json:"-"` - IsIDEBundled bool `json:"-"` + Timestamps *TimestampsStore // Contains the timestamps of the files used to build this PlatformRelease IsTrusted bool `json:"-"` PluggableDiscoveryAware bool `json:"-"` // true if the Platform supports pluggable discovery (no compatibility layer required) Monitors map[string]*MonitorDependency `json:"-"` MonitorsDevRecipes map[string]string `json:"-"` + Compatible bool `json:"-"` // true if at all ToolDependencies are available for the current OS/ARCH. +} + +// TimestampsStore is a generic structure to store timestamps +type TimestampsStore struct { + timestamps map[*paths.Path]*time.Time +} + +// NewTimestampsStore creates a new TimestampsStore +func NewTimestampsStore() *TimestampsStore { + return &TimestampsStore{ + timestamps: map[*paths.Path]*time.Time{}, + } +} + +// AddFile adds a file to the TimestampsStore +func (t *TimestampsStore) AddFile(path *paths.Path) { + if info, err := path.Stat(); err != nil { + t.timestamps[path] = nil // Save a missing file with a nil timestamp + } else { + modtime := info.ModTime() + t.timestamps[path] = &modtime + } +} + +// Dirty returns true if one of the files stored in the TimestampsStore has been +// changed after being added to the store. +func (t *TimestampsStore) Dirty() bool { + for path, timestamp := range t.timestamps { + if info, err := path.Stat(); err != nil { + if timestamp != nil { + return true + } + } else { + if timestamp == nil || info.ModTime() != *timestamp { + return true + } + } + } + return false +} + +// Dirty returns true if one of the files of this PlatformRelease has been changed +// (it means that the PlatformRelease should be rebuilt to be used correctly). +func (release *PlatformRelease) Dirty() bool { + return release.Timestamps.Dirty() } // BoardManifest contains information about a board. These metadata are usually @@ -88,8 +136,6 @@ type BoardManifestID struct { USB string `json:"-"` } -var tr = i18n.Tr - // HasUsbID returns true if the BoardManifes contains the specified USB id as // identification for this board. usbID should be in the format "0000:0000" func (bm *BoardManifest) HasUsbID(vid, pid string) bool { @@ -205,6 +251,7 @@ func (platform *Platform) GetOrCreateRelease(version *semver.Version) *PlatformR Properties: properties.NewMap(), Programmers: map[string]*Programmer{}, Platform: platform, + Timestamps: NewTimestampsStore(), } platform.Releases[tag] = release return release @@ -227,6 +274,21 @@ func (platform *Platform) GetLatestRelease() *PlatformRelease { return platform.FindReleaseWithVersion(latestVersion) } +// GetLatestCompatibleRelease returns the latest compatible release of this platform, or nil if no +// compatible releases are available. +func (platform *Platform) GetLatestCompatibleRelease() *PlatformRelease { + var maximum *PlatformRelease + for _, release := range platform.Releases { + if !release.IsCompatible() { + continue + } + if maximum == nil || release.Version.GreaterThan(maximum.Version) { + maximum = release + } + } + return maximum +} + // GetAllReleases returns all the releases of this platform, or an empty // slice if no releases are available func (platform *Platform) GetAllReleases() []*PlatformRelease { @@ -247,6 +309,18 @@ func (platform *Platform) GetAllReleasesVersions() []*semver.Version { return versions } +// GetAllCompatibleReleasesVersions returns all the version numbers in this Platform Package that contains compatible tools. +func (platform *Platform) GetAllCompatibleReleasesVersions() []*semver.Version { + versions := []*semver.Version{} + for _, release := range platform.Releases { + if !release.IsCompatible() { + continue + } + versions = append(versions, release.Version) + } + return versions +} + // latestReleaseVersion obtains latest version number, or nil if no release available func (platform *Platform) latestReleaseVersion() *semver.Version { // TODO: Cache latest version using a field in Platform @@ -254,14 +328,14 @@ func (platform *Platform) latestReleaseVersion() *semver.Version { if len(versions) == 0 { return nil } - max := versions[0] + maximum := versions[0] for i := 1; i < len(versions); i++ { - if versions[i].GreaterThan(max) { - max = versions[i] + if versions[i].GreaterThan(maximum) { + maximum = versions[i] } } - return max + return maximum } // GetAllInstalled returns all installed PlatformRelease @@ -407,7 +481,7 @@ func (release *PlatformRelease) MarshalJSON() ([]byte, error) { ID: release.Platform.String(), Installed: release.Version.String(), Latest: latestStr, - Name: release.Platform.Name, + Name: release.Name, }) } @@ -420,3 +494,9 @@ func (release *PlatformRelease) HasMetadata() bool { installedJSONPath := release.InstallDir.Join("installed.json") return installedJSONPath.Exist() } + +// IsCompatible returns true if all the tools dependencies of a PlatformRelease +// are available in the current OS/ARCH. +func (release *PlatformRelease) IsCompatible() bool { + return release.Compatible +} diff --git a/arduino/cores/cores_test.go b/internal/arduino/cores/cores_test.go similarity index 100% rename from arduino/cores/cores_test.go rename to internal/arduino/cores/cores_test.go diff --git a/arduino/cores/packageindex/index.go b/internal/arduino/cores/packageindex/index.go similarity index 90% rename from arduino/cores/packageindex/index.go rename to internal/arduino/cores/packageindex/index.go index 61621ed4cca..c2c601c500b 100644 --- a/arduino/cores/packageindex/index.go +++ b/internal/arduino/cores/packageindex/index.go @@ -18,11 +18,11 @@ package packageindex import ( "encoding/json" "fmt" + "slices" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/arduino/security" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/security" "github.com/arduino/go-paths-helper" easyjson "github.com/mailru/easyjson" "github.com/sirupsen/logrus" @@ -139,8 +139,6 @@ type indexHelp struct { Online string `json:"online,omitempty"` } -var tr = i18n.Tr - // MergeIntoPackages converts the Index data into a cores.Packages and merge them // with the existing contents of the cores.Packages passed as parameter. func (index Index) MergeIntoPackages(outPackages cores.Packages) { @@ -222,11 +220,11 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index { URL: pr.Platform.Package.URL, Email: pr.Platform.Package.Email, Platforms: []*indexPlatformRelease{{ - Name: pr.Platform.Name, + Name: pr.Name, Architecture: pr.Platform.Architecture, Version: pr.Version, - Deprecated: pr.Platform.Deprecated, - Category: pr.Platform.Category, + Deprecated: pr.Deprecated, + Category: pr.Category, URL: pr.Resource.URL, ArchiveFileName: pr.Resource.ArchiveFileName, Checksum: pr.Resource.Checksum, @@ -263,27 +261,25 @@ func (inPackage indexPackage) extractPackageIn(outPackages cores.Packages, trust func (inPlatformRelease indexPlatformRelease) extractPlatformIn(outPackage *cores.Package, trusted bool, isInstallJSON bool) error { outPlatform := outPackage.GetOrCreatePlatform(inPlatformRelease.Architecture) - // FIXME: shall we use the Name and Category of the latest release? or maybe move Name and Category in PlatformRelease? - outPlatform.Name = inPlatformRelease.Name - outPlatform.Category = inPlatformRelease.Category // If the variable `isInstallJSON` is false it means that the index we're reading is coming from the additional-urls. // Therefore, the `outPlatform.Indexed` will be set at `true`. outPlatform.Indexed = outPlatform.Indexed || !isInstallJSON - // If the Platform is installed before deprecation installed.json file does not include "deprecated" field. - // The installed.json is read during loading phase of an installed Platform, if the deprecated field is not found - // the package_index.json field would be overwritten and the deprecation info would be lost. - // This check prevents that behaviour. - if !outPlatform.Deprecated { + // If the latest platform release is deprecated, then deprecate the whole platform. + if outPlatform.Latest == nil || outPlatform.Latest.LessThan(inPlatformRelease.Version) { + outPlatform.Latest = inPlatformRelease.Version outPlatform.Deprecated = inPlatformRelease.Deprecated } + outPlatformRelease := outPlatform.GetOrCreateRelease(inPlatformRelease.Version) + outPlatformRelease.Name = inPlatformRelease.Name + outPlatformRelease.Category = inPlatformRelease.Category + outPlatformRelease.IsTrusted = trusted size, err := inPlatformRelease.Size.Int64() if err != nil { - return fmt.Errorf(tr("invalid platform archive size: %s"), err) + logrus.Warningf("invalid platform %s archive size: %s", outPlatformRelease, err) + size = 0 } - outPlatformRelease := outPlatform.GetOrCreateRelease(inPlatformRelease.Version) - outPlatformRelease.IsTrusted = trusted outPlatformRelease.Resource = &resources.DownloadResource{ ArchiveFileName: inPlatformRelease.ArchiveFileName, Checksum: inPlatformRelease.Checksum, @@ -296,6 +292,7 @@ func (inPlatformRelease indexPlatformRelease) extractPlatformIn(outPackage *core outPlatformRelease.ToolDependencies = inPlatformRelease.extractToolDependencies() outPlatformRelease.DiscoveryDependencies = inPlatformRelease.extractDiscoveryDependencies() outPlatformRelease.MonitorDependencies = inPlatformRelease.extractMonitorDependencies() + outPlatformRelease.Deprecated = inPlatformRelease.Deprecated return nil } @@ -351,15 +348,18 @@ func (inToolRelease indexToolRelease) extractToolIn(outPackage *cores.Package) { outTool := outPackage.GetOrCreateTool(inToolRelease.Name) outToolRelease := outTool.GetOrCreateRelease(inToolRelease.Version) - outToolRelease.Flavors = inToolRelease.extractFlavours() + outToolRelease.Flavors = inToolRelease.extractAndMergeFlavours(outToolRelease.Flavors) } -// extractFlavours extracts a map[OS]Flavor object from an indexToolRelease entry. -func (inToolRelease indexToolRelease) extractFlavours() []*cores.Flavor { - ret := make([]*cores.Flavor, len(inToolRelease.Systems)) - for i, flavour := range inToolRelease.Systems { +// extractAndMergeFlavours extracts flavors objects from an indexToolRelease +// and adds them to the given flavors array if missing. It returns the updated array. +func (inToolRelease indexToolRelease) extractAndMergeFlavours(in []*cores.Flavor) []*cores.Flavor { + for _, flavour := range inToolRelease.Systems { + if slices.ContainsFunc(in, func(f *cores.Flavor) bool { return f.OS == flavour.OS }) { + continue + } size, _ := flavour.Size.Int64() - ret[i] = &cores.Flavor{ + in = append(in, &cores.Flavor{ OS: flavour.OS, Resource: &resources.DownloadResource{ ArchiveFileName: flavour.ArchiveFileName, @@ -368,9 +368,9 @@ func (inToolRelease indexToolRelease) extractFlavours() []*cores.Flavor { URL: flavour.URL, CachePath: "packages", }, - } + }) } - return ret + return in } // LoadIndex reads a package_index.json from a file and returns the corresponding Index structure. diff --git a/arduino/cores/packageindex/index_easyjson.go b/internal/arduino/cores/packageindex/index_easyjson.go similarity index 83% rename from arduino/cores/packageindex/index_easyjson.go rename to internal/arduino/cores/packageindex/index_easyjson.go index 7f47a9b62e2..e151cf9ede7 100644 --- a/arduino/cores/packageindex/index_easyjson.go +++ b/internal/arduino/cores/packageindex/index_easyjson.go @@ -19,7 +19,7 @@ var ( _ easyjson.Marshaler ) -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex(in *jlexer.Lexer, out *indexToolReleaseFlavour) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(in *jlexer.Lexer, out *indexToolReleaseFlavour) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -71,7 +71,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex(in in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex(out *jwriter.Writer, in indexToolReleaseFlavour) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(out *jwriter.Writer, in indexToolReleaseFlavour) { out.RawByte('{') first := true _ = first @@ -106,27 +106,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex(ou // MarshalJSON supports json.Marshaler interface func (v indexToolReleaseFlavour) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexToolReleaseFlavour) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexToolReleaseFlavour) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexToolReleaseFlavour) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(in *jlexer.Lexer, out *indexToolRelease) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(in *jlexer.Lexer, out *indexToolRelease) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -232,7 +232,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(out *jwriter.Writer, in indexToolRelease) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(out *jwriter.Writer, in indexToolRelease) { out.RawByte('{') first := true _ = first @@ -272,27 +272,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(o // MarshalJSON supports json.Marshaler interface func (v indexToolRelease) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexToolRelease) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexToolRelease) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexToolRelease) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex1(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex1(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(in *jlexer.Lexer, out *indexToolDependency) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(in *jlexer.Lexer, out *indexToolDependency) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -356,7 +356,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(out *jwriter.Writer, in indexToolDependency) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(out *jwriter.Writer, in indexToolDependency) { out.RawByte('{') first := true _ = first @@ -385,27 +385,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(o // MarshalJSON supports json.Marshaler interface func (v indexToolDependency) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexToolDependency) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexToolDependency) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexToolDependency) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex2(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex2(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(in *jlexer.Lexer, out *indexPlatformRelease) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(in *jlexer.Lexer, out *indexPlatformRelease) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -681,7 +681,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(out *jwriter.Writer, in indexPlatformRelease) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(out *jwriter.Writer, in indexPlatformRelease) { out.RawByte('{') first := true _ = first @@ -809,27 +809,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(o // MarshalJSON supports json.Marshaler interface func (v indexPlatformRelease) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexPlatformRelease) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexPlatformRelease) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexPlatformRelease) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex3(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex3(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(in *jlexer.Lexer, out *indexPackage) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(in *jlexer.Lexer, out *indexPackage) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1009,7 +1009,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(out *jwriter.Writer, in indexPackage) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(out *jwriter.Writer, in indexPackage) { out.RawByte('{') first := true _ = first @@ -1089,27 +1089,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(o // MarshalJSON supports json.Marshaler interface func (v indexPackage) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexPackage) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexPackage) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexPackage) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex4(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex4(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(in *jlexer.Lexer, out *indexMonitorDependency) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(in *jlexer.Lexer, out *indexMonitorDependency) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1149,7 +1149,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(out *jwriter.Writer, in indexMonitorDependency) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(out *jwriter.Writer, in indexMonitorDependency) { out.RawByte('{') first := true _ = first @@ -1169,27 +1169,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(o // MarshalJSON supports json.Marshaler interface func (v indexMonitorDependency) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexMonitorDependency) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexMonitorDependency) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexMonitorDependency) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex5(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex5(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(in *jlexer.Lexer, out *indexHelp) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(in *jlexer.Lexer, out *indexHelp) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1225,7 +1225,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(out *jwriter.Writer, in indexHelp) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(out *jwriter.Writer, in indexHelp) { out.RawByte('{') first := true _ = first @@ -1241,27 +1241,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(o // MarshalJSON supports json.Marshaler interface func (v indexHelp) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexHelp) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexHelp) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexHelp) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex6(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex6(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(in *jlexer.Lexer, out *indexDiscoveryDependency) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(in *jlexer.Lexer, out *indexDiscoveryDependency) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1301,7 +1301,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(out *jwriter.Writer, in indexDiscoveryDependency) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(out *jwriter.Writer, in indexDiscoveryDependency) { out.RawByte('{') first := true _ = first @@ -1321,27 +1321,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(o // MarshalJSON supports json.Marshaler interface func (v indexDiscoveryDependency) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexDiscoveryDependency) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexDiscoveryDependency) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexDiscoveryDependency) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex7(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex7(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(in *jlexer.Lexer, out *indexBoardID) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(in *jlexer.Lexer, out *indexBoardID) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1377,7 +1377,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(out *jwriter.Writer, in indexBoardID) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(out *jwriter.Writer, in indexBoardID) { out.RawByte('{') first := true _ = first @@ -1392,27 +1392,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(o // MarshalJSON supports json.Marshaler interface func (v indexBoardID) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexBoardID) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexBoardID) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexBoardID) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex8(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex8(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(in *jlexer.Lexer, out *indexBoard) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(in *jlexer.Lexer, out *indexBoard) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1494,7 +1494,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(i in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(out *jwriter.Writer, in indexBoard) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(out *jwriter.Writer, in indexBoard) { out.RawByte('{') first := true _ = first @@ -1523,27 +1523,27 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(o // MarshalJSON supports json.Marshaler interface func (v indexBoard) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexBoard) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexBoard) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexBoard) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex9(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex9(l, v) } -func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(in *jlexer.Lexer, out *Index) { +func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(in *jlexer.Lexer, out *Index) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1641,7 +1641,7 @@ func easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex10( in.Consumed() } } -func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(out *jwriter.Writer, in Index) { +func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(out *jwriter.Writer, in Index) { out.RawByte('{') first := true _ = first @@ -1676,23 +1676,23 @@ func easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex10( // MarshalJSON supports json.Marshaler interface func (v Index) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(&w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v Index) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonE2a549a6EncodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(w, v) + easyjsonE2a549a6EncodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *Index) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(&r, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *Index) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonE2a549a6DecodeGithubComArduinoArduinoCliArduinoCoresPackageindex10(l, v) + easyjsonE2a549a6DecodeGithubComArduinoArduinoCliInternalArduinoCoresPackageindex10(l, v) } diff --git a/arduino/cores/packageindex/index_test.go b/internal/arduino/cores/packageindex/index_test.go similarity index 99% rename from arduino/cores/packageindex/index_test.go rename to internal/arduino/cores/packageindex/index_test.go index efb05c16aa0..cdc38022f21 100644 --- a/arduino/cores/packageindex/index_test.go +++ b/internal/arduino/cores/packageindex/index_test.go @@ -18,8 +18,8 @@ package packageindex import ( "testing" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/resources" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" semver "go.bug.st/relaxed-semver" @@ -91,11 +91,10 @@ func TestIndexFromPlatformRelease(t *testing.T) { Name: "serial-monitor", }, }, + Name: "Arduino AVR Boards", + Category: "Arduino", Platform: &cores.Platform{ - Name: "Arduino AVR Boards", Architecture: "avr", - Category: "Arduino", - Package: &cores.Package{ Name: "arduino", Maintainer: "Arduino", diff --git a/arduino/cores/packageindex/testdata/links b/internal/arduino/cores/packageindex/testdata/links similarity index 100% rename from arduino/cores/packageindex/testdata/links rename to internal/arduino/cores/packageindex/testdata/links diff --git a/arduino/cores/packageindex/testdata/package_LowPowerLab_index.json b/internal/arduino/cores/packageindex/testdata/package_LowPowerLab_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_LowPowerLab_index.json rename to internal/arduino/cores/packageindex/testdata/package_LowPowerLab_index.json diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json.1 b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json.1 similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json.1 rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MegaCore_index.json.1 diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MicroCore_index.json b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MicroCore_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MicroCore_index.json rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MicroCore_index.json diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json.1 b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json.1 similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json.1 rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MightyCore_index.json.1 diff --git a/arduino/cores/packageindex/testdata/package_MCUdude_MiniCore_index.json b/internal/arduino/cores/packageindex/testdata/package_MCUdude_MiniCore_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MCUdude_MiniCore_index.json rename to internal/arduino/cores/packageindex/testdata/package_MCUdude_MiniCore_index.json diff --git a/arduino/cores/packageindex/testdata/package_MattairTech_index.json b/internal/arduino/cores/packageindex/testdata/package_MattairTech_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_MattairTech_index.json rename to internal/arduino/cores/packageindex/testdata/package_MattairTech_index.json diff --git a/arduino/cores/packageindex/testdata/package_NicoHood_HoodLoader2_index.json b/internal/arduino/cores/packageindex/testdata/package_NicoHood_HoodLoader2_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_NicoHood_HoodLoader2_index.json rename to internal/arduino/cores/packageindex/testdata/package_NicoHood_HoodLoader2_index.json diff --git a/arduino/cores/packageindex/testdata/package_XMegaForArduino_index.json b/internal/arduino/cores/packageindex/testdata/package_XMegaForArduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_XMegaForArduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_XMegaForArduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_Zoubworld_index.json b/internal/arduino/cores/packageindex/testdata/package_Zoubworld_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_Zoubworld_index.json rename to internal/arduino/cores/packageindex/testdata/package_Zoubworld_index.json diff --git a/arduino/cores/packageindex/testdata/package_adafruit_index.json b/internal/arduino/cores/packageindex/testdata/package_adafruit_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_adafruit_index.json rename to internal/arduino/cores/packageindex/testdata/package_adafruit_index.json diff --git a/arduino/cores/packageindex/testdata/package_akafugu_index.json b/internal/arduino/cores/packageindex/testdata/package_akafugu_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_akafugu_index.json rename to internal/arduino/cores/packageindex/testdata/package_akafugu_index.json diff --git a/arduino/cores/packageindex/testdata/package_aloriumtech_index.json b/internal/arduino/cores/packageindex/testdata/package_aloriumtech_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_aloriumtech_index.json rename to internal/arduino/cores/packageindex/testdata/package_aloriumtech_index.json diff --git a/arduino/cores/packageindex/testdata/package_arachnidlabs.com_boards_index.json b/internal/arduino/cores/packageindex/testdata/package_arachnidlabs.com_boards_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_arachnidlabs.com_boards_index.json rename to internal/arduino/cores/packageindex/testdata/package_arachnidlabs.com_boards_index.json diff --git a/arduino/cores/packageindex/testdata/package_ardhat_index.json b/internal/arduino/cores/packageindex/testdata/package_ardhat_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_ardhat_index.json rename to internal/arduino/cores/packageindex/testdata/package_ardhat_index.json diff --git a/arduino/cores/packageindex/testdata/package_arduboy_index.json b/internal/arduino/cores/packageindex/testdata/package_arduboy_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_arduboy_index.json rename to internal/arduino/cores/packageindex/testdata/package_arduboy_index.json diff --git a/arduino/cores/packageindex/testdata/package_arrow_index.json b/internal/arduino/cores/packageindex/testdata/package_arrow_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_arrow_index.json rename to internal/arduino/cores/packageindex/testdata/package_arrow_index.json diff --git a/arduino/cores/packageindex/testdata/package_atflash_index.json b/internal/arduino/cores/packageindex/testdata/package_atflash_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_atflash_index.json rename to internal/arduino/cores/packageindex/testdata/package_atflash_index.json diff --git a/arduino/cores/packageindex/testdata/package_avdweb_nl_index.json b/internal/arduino/cores/packageindex/testdata/package_avdweb_nl_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_avdweb_nl_index.json rename to internal/arduino/cores/packageindex/testdata/package_avdweb_nl_index.json diff --git a/arduino/cores/packageindex/testdata/package_canique_index.json b/internal/arduino/cores/packageindex/testdata/package_canique_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_canique_index.json rename to internal/arduino/cores/packageindex/testdata/package_canique_index.json diff --git a/arduino/cores/packageindex/testdata/package_carlosefr_atmega_index.json b/internal/arduino/cores/packageindex/testdata/package_carlosefr_atmega_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_carlosefr_atmega_index.json rename to internal/arduino/cores/packageindex/testdata/package_carlosefr_atmega_index.json diff --git a/arduino/cores/packageindex/testdata/package_chipkit_index.json b/internal/arduino/cores/packageindex/testdata/package_chipkit_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_chipkit_index.json rename to internal/arduino/cores/packageindex/testdata/package_chipkit_index.json diff --git a/arduino/cores/packageindex/testdata/package_chipkit_index.json.1 b/internal/arduino/cores/packageindex/testdata/package_chipkit_index.json.1 similarity index 100% rename from arduino/cores/packageindex/testdata/package_chipkit_index.json.1 rename to internal/arduino/cores/packageindex/testdata/package_chipkit_index.json.1 diff --git a/arduino/cores/packageindex/testdata/package_clkdiv8_index.json b/internal/arduino/cores/packageindex/testdata/package_clkdiv8_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_clkdiv8_index.json rename to internal/arduino/cores/packageindex/testdata/package_clkdiv8_index.json diff --git a/arduino/cores/packageindex/testdata/package_codebendercc_ariadne-bootloader_index.json b/internal/arduino/cores/packageindex/testdata/package_codebendercc_ariadne-bootloader_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_codebendercc_ariadne-bootloader_index.json rename to internal/arduino/cores/packageindex/testdata/package_codebendercc_ariadne-bootloader_index.json diff --git a/arduino/cores/packageindex/testdata/package_cosa_index.json b/internal/arduino/cores/packageindex/testdata/package_cosa_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_cosa_index.json rename to internal/arduino/cores/packageindex/testdata/package_cosa_index.json diff --git a/arduino/cores/packageindex/testdata/package_cytron_index.json b/internal/arduino/cores/packageindex/testdata/package_cytron_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_cytron_index.json rename to internal/arduino/cores/packageindex/testdata/package_cytron_index.json diff --git a/arduino/cores/packageindex/testdata/package_damellis_attiny_index.json b/internal/arduino/cores/packageindex/testdata/package_damellis_attiny_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_damellis_attiny_index.json rename to internal/arduino/cores/packageindex/testdata/package_damellis_attiny_index.json diff --git a/arduino/cores/packageindex/testdata/package_dfrobot_index.json.invalid b/internal/arduino/cores/packageindex/testdata/package_dfrobot_index.json.invalid similarity index 100% rename from arduino/cores/packageindex/testdata/package_dfrobot_index.json.invalid rename to internal/arduino/cores/packageindex/testdata/package_dfrobot_index.json.invalid diff --git a/arduino/cores/packageindex/testdata/package_dfrobot_iot_mainboard.json.invalid b/internal/arduino/cores/packageindex/testdata/package_dfrobot_iot_mainboard.json.invalid similarity index 100% rename from arduino/cores/packageindex/testdata/package_dfrobot_iot_mainboard.json.invalid rename to internal/arduino/cores/packageindex/testdata/package_dfrobot_iot_mainboard.json.invalid diff --git a/arduino/cores/packageindex/testdata/package_digistump_index.json b/internal/arduino/cores/packageindex/testdata/package_digistump_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_digistump_index.json rename to internal/arduino/cores/packageindex/testdata/package_digistump_index.json diff --git a/arduino/cores/packageindex/testdata/package_drazzy.com_index.json b/internal/arduino/cores/packageindex/testdata/package_drazzy.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_drazzy.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_drazzy.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_dwengo.org_dwenguino_index.json b/internal/arduino/cores/packageindex/testdata/package_dwengo.org_dwenguino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_dwengo.org_dwenguino_index.json rename to internal/arduino/cores/packageindex/testdata/package_dwengo.org_dwenguino_index.json diff --git a/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.5_index.json b/internal/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.5_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.5_index.json rename to internal/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.5_index.json diff --git a/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.6_index.json b/internal/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.6_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.6_index.json rename to internal/arduino/cores/packageindex/testdata/package_elektor-labs.com_ide-1.6.6_index.json diff --git a/arduino/cores/packageindex/testdata/package_engimusing_modules_index.json b/internal/arduino/cores/packageindex/testdata/package_engimusing_modules_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_engimusing_modules_index.json rename to internal/arduino/cores/packageindex/testdata/package_engimusing_modules_index.json diff --git a/arduino/cores/packageindex/testdata/package_esp32_index.json b/internal/arduino/cores/packageindex/testdata/package_esp32_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_esp32_index.json rename to internal/arduino/cores/packageindex/testdata/package_esp32_index.json diff --git a/arduino/cores/packageindex/testdata/package_esp32_index.json.1 b/internal/arduino/cores/packageindex/testdata/package_esp32_index.json.1 similarity index 100% rename from arduino/cores/packageindex/testdata/package_esp32_index.json.1 rename to internal/arduino/cores/packageindex/testdata/package_esp32_index.json.1 diff --git a/arduino/cores/packageindex/testdata/package_esp32_index.json.2 b/internal/arduino/cores/packageindex/testdata/package_esp32_index.json.2 similarity index 100% rename from arduino/cores/packageindex/testdata/package_esp32_index.json.2 rename to internal/arduino/cores/packageindex/testdata/package_esp32_index.json.2 diff --git a/arduino/cores/packageindex/testdata/package_esp8266com_index.json b/internal/arduino/cores/packageindex/testdata/package_esp8266com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_esp8266com_index.json rename to internal/arduino/cores/packageindex/testdata/package_esp8266com_index.json diff --git a/arduino/cores/packageindex/testdata/package_femtocow_attiny_index.json b/internal/arduino/cores/packageindex/testdata/package_femtocow_attiny_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_femtocow_attiny_index.json rename to internal/arduino/cores/packageindex/testdata/package_femtocow_attiny_index.json diff --git a/arduino/cores/packageindex/testdata/package_ftduino_index.json b/internal/arduino/cores/packageindex/testdata/package_ftduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_ftduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_ftduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_goldilocks_index.json b/internal/arduino/cores/packageindex/testdata/package_goldilocks_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_goldilocks_index.json rename to internal/arduino/cores/packageindex/testdata/package_goldilocks_index.json diff --git a/arduino/cores/packageindex/testdata/package_hidnseek_boot_index.json b/internal/arduino/cores/packageindex/testdata/package_hidnseek_boot_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_hidnseek_boot_index.json rename to internal/arduino/cores/packageindex/testdata/package_hidnseek_boot_index.json diff --git a/arduino/cores/packageindex/testdata/package_infineon_index.json b/internal/arduino/cores/packageindex/testdata/package_infineon_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_infineon_index.json rename to internal/arduino/cores/packageindex/testdata/package_infineon_index.json diff --git a/arduino/cores/packageindex/testdata/package_intorobot_index.json b/internal/arduino/cores/packageindex/testdata/package_intorobot_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_intorobot_index.json rename to internal/arduino/cores/packageindex/testdata/package_intorobot_index.json diff --git a/arduino/cores/packageindex/testdata/package_iot2000_index.json b/internal/arduino/cores/packageindex/testdata/package_iot2000_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_iot2000_index.json rename to internal/arduino/cores/packageindex/testdata/package_iot2000_index.json diff --git a/arduino/cores/packageindex/testdata/package_iotcore_ide-1.6.6_index.json b/internal/arduino/cores/packageindex/testdata/package_iotcore_ide-1.6.6_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_iotcore_ide-1.6.6_index.json rename to internal/arduino/cores/packageindex/testdata/package_iotcore_ide-1.6.6_index.json diff --git a/arduino/cores/packageindex/testdata/package_ioteam_index.json b/internal/arduino/cores/packageindex/testdata/package_ioteam_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_ioteam_index.json rename to internal/arduino/cores/packageindex/testdata/package_ioteam_index.json diff --git a/arduino/cores/packageindex/testdata/package_iteaduino_lite_index.json b/internal/arduino/cores/packageindex/testdata/package_iteaduino_lite_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_iteaduino_lite_index.json rename to internal/arduino/cores/packageindex/testdata/package_iteaduino_lite_index.json diff --git a/arduino/cores/packageindex/testdata/package_konekt_index.json b/internal/arduino/cores/packageindex/testdata/package_konekt_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_konekt_index.json rename to internal/arduino/cores/packageindex/testdata/package_konekt_index.json diff --git a/arduino/cores/packageindex/testdata/package_lattuino_index.json b/internal/arduino/cores/packageindex/testdata/package_lattuino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_lattuino_index.json rename to internal/arduino/cores/packageindex/testdata/package_lattuino_index.json diff --git a/arduino/cores/packageindex/testdata/package_lauszus_sanguino_index.json b/internal/arduino/cores/packageindex/testdata/package_lauszus_sanguino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_lauszus_sanguino_index.json rename to internal/arduino/cores/packageindex/testdata/package_lauszus_sanguino_index.json diff --git a/arduino/cores/packageindex/testdata/package_leonardomiliani.com_index.json b/internal/arduino/cores/packageindex/testdata/package_leonardomiliani.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_leonardomiliani.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_leonardomiliani.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_macchina_index.json b/internal/arduino/cores/packageindex/testdata/package_macchina_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_macchina_index.json rename to internal/arduino/cores/packageindex/testdata/package_macchina_index.json diff --git a/arduino/cores/packageindex/testdata/package_maxim_index.json b/internal/arduino/cores/packageindex/testdata/package_maxim_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_maxim_index.json rename to internal/arduino/cores/packageindex/testdata/package_maxim_index.json diff --git a/arduino/cores/packageindex/testdata/package_mkr1000_index.json b/internal/arduino/cores/packageindex/testdata/package_mkr1000_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_mkr1000_index.json rename to internal/arduino/cores/packageindex/testdata/package_mkr1000_index.json diff --git a/arduino/cores/packageindex/testdata/package_mtk_linkit_index.json b/internal/arduino/cores/packageindex/testdata/package_mtk_linkit_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_mtk_linkit_index.json rename to internal/arduino/cores/packageindex/testdata/package_mtk_linkit_index.json diff --git a/arduino/cores/packageindex/testdata/package_mtk_linkit_smart_7688_index.json b/internal/arduino/cores/packageindex/testdata/package_mtk_linkit_smart_7688_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_mtk_linkit_smart_7688_index.json rename to internal/arduino/cores/packageindex/testdata/package_mtk_linkit_smart_7688_index.json diff --git a/arduino/cores/packageindex/testdata/package_nRF5_boards_index.json b/internal/arduino/cores/packageindex/testdata/package_nRF5_boards_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_nRF5_boards_index.json rename to internal/arduino/cores/packageindex/testdata/package_nRF5_boards_index.json diff --git a/arduino/cores/packageindex/testdata/package_navspark_index.json b/internal/arduino/cores/packageindex/testdata/package_navspark_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_navspark_index.json rename to internal/arduino/cores/packageindex/testdata/package_navspark_index.json diff --git a/arduino/cores/packageindex/testdata/package_olimex_avr_index.json b/internal/arduino/cores/packageindex/testdata/package_olimex_avr_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_olimex_avr_index.json rename to internal/arduino/cores/packageindex/testdata/package_olimex_avr_index.json diff --git a/arduino/cores/packageindex/testdata/package_olimex_pic_index.json b/internal/arduino/cores/packageindex/testdata/package_olimex_pic_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_olimex_pic_index.json rename to internal/arduino/cores/packageindex/testdata/package_olimex_pic_index.json diff --git a/arduino/cores/packageindex/testdata/package_olimex_stm_index.json b/internal/arduino/cores/packageindex/testdata/package_olimex_stm_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_olimex_stm_index.json rename to internal/arduino/cores/packageindex/testdata/package_olimex_stm_index.json diff --git a/arduino/cores/packageindex/testdata/package_omc_index.json b/internal/arduino/cores/packageindex/testdata/package_omc_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_omc_index.json rename to internal/arduino/cores/packageindex/testdata/package_omc_index.json diff --git a/arduino/cores/packageindex/testdata/package_openpanzer_index.json b/internal/arduino/cores/packageindex/testdata/package_openpanzer_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_openpanzer_index.json rename to internal/arduino/cores/packageindex/testdata/package_openpanzer_index.json diff --git a/arduino/cores/packageindex/testdata/package_opentracker_index.json b/internal/arduino/cores/packageindex/testdata/package_opentracker_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_opentracker_index.json rename to internal/arduino/cores/packageindex/testdata/package_opentracker_index.json diff --git a/arduino/cores/packageindex/testdata/package_oshlab_breadboard_index.json b/internal/arduino/cores/packageindex/testdata/package_oshlab_breadboard_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_oshlab_breadboard_index.json rename to internal/arduino/cores/packageindex/testdata/package_oshlab_breadboard_index.json diff --git a/arduino/cores/packageindex/testdata/package_panstamp_index.json b/internal/arduino/cores/packageindex/testdata/package_panstamp_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_panstamp_index.json rename to internal/arduino/cores/packageindex/testdata/package_panstamp_index.json diff --git a/arduino/cores/packageindex/testdata/package_per1234_wirino_index.json b/internal/arduino/cores/packageindex/testdata/package_per1234_wirino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_per1234_wirino_index.json rename to internal/arduino/cores/packageindex/testdata/package_per1234_wirino_index.json diff --git a/arduino/cores/packageindex/testdata/package_project_laika.com_index.json b/internal/arduino/cores/packageindex/testdata/package_project_laika.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_project_laika.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_project_laika.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_quirkbot.com_index.json b/internal/arduino/cores/packageindex/testdata/package_quirkbot.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_quirkbot.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_quirkbot.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_radino_radino32_index.json b/internal/arduino/cores/packageindex/testdata/package_radino_radino32_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_radino_radino32_index.json rename to internal/arduino/cores/packageindex/testdata/package_radino_radino32_index.json diff --git a/arduino/cores/packageindex/testdata/package_realtek.com_ameba_index.json b/internal/arduino/cores/packageindex/testdata/package_realtek.com_ameba_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_realtek.com_ameba_index.json rename to internal/arduino/cores/packageindex/testdata/package_realtek.com_ameba_index.json diff --git a/arduino/cores/packageindex/testdata/package_redbear_index.json.tobefixed b/internal/arduino/cores/packageindex/testdata/package_redbear_index.json.tobefixed similarity index 100% rename from arduino/cores/packageindex/testdata/package_redbear_index.json.tobefixed rename to internal/arduino/cores/packageindex/testdata/package_redbear_index.json.tobefixed diff --git a/arduino/cores/packageindex/testdata/package_redbearlab_index.json b/internal/arduino/cores/packageindex/testdata/package_redbearlab_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_redbearlab_index.json rename to internal/arduino/cores/packageindex/testdata/package_redbearlab_index.json diff --git a/arduino/cores/packageindex/testdata/package_rfduino_index.json b/internal/arduino/cores/packageindex/testdata/package_rfduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_rfduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_rfduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_rig_index.json b/internal/arduino/cores/packageindex/testdata/package_rig_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_rig_index.json rename to internal/arduino/cores/packageindex/testdata/package_rig_index.json diff --git a/arduino/cores/packageindex/testdata/package_rnc_index.json b/internal/arduino/cores/packageindex/testdata/package_rnc_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_rnc_index.json rename to internal/arduino/cores/packageindex/testdata/package_rnc_index.json diff --git a/arduino/cores/packageindex/testdata/package_seeeduino_index.json b/internal/arduino/cores/packageindex/testdata/package_seeeduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_seeeduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_seeeduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_simba_avr_index.json b/internal/arduino/cores/packageindex/testdata/package_simba_avr_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_simba_avr_index.json rename to internal/arduino/cores/packageindex/testdata/package_simba_avr_index.json diff --git a/arduino/cores/packageindex/testdata/package_simba_esp_index.json b/internal/arduino/cores/packageindex/testdata/package_simba_esp_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_simba_esp_index.json rename to internal/arduino/cores/packageindex/testdata/package_simba_esp_index.json diff --git a/arduino/cores/packageindex/testdata/package_simba_sam_index.json b/internal/arduino/cores/packageindex/testdata/package_simba_sam_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_simba_sam_index.json rename to internal/arduino/cores/packageindex/testdata/package_simba_sam_index.json diff --git a/arduino/cores/packageindex/testdata/package_sodaq_index.json b/internal/arduino/cores/packageindex/testdata/package_sodaq_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_sodaq_index.json rename to internal/arduino/cores/packageindex/testdata/package_sodaq_index.json diff --git a/arduino/cores/packageindex/testdata/package_sodaq_samd_index.json b/internal/arduino/cores/packageindex/testdata/package_sodaq_samd_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_sodaq_samd_index.json rename to internal/arduino/cores/packageindex/testdata/package_sodaq_samd_index.json diff --git a/arduino/cores/packageindex/testdata/package_sparkfun_index.json b/internal/arduino/cores/packageindex/testdata/package_sparkfun_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_sparkfun_index.json rename to internal/arduino/cores/packageindex/testdata/package_sparkfun_index.json diff --git a/arduino/cores/packageindex/testdata/package_stm_index.json b/internal/arduino/cores/packageindex/testdata/package_stm_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_stm_index.json rename to internal/arduino/cores/packageindex/testdata/package_stm_index.json diff --git a/arduino/cores/packageindex/testdata/package_talk2.wisen.com_index.json b/internal/arduino/cores/packageindex/testdata/package_talk2.wisen.com_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_talk2.wisen.com_index.json rename to internal/arduino/cores/packageindex/testdata/package_talk2.wisen.com_index.json diff --git a/arduino/cores/packageindex/testdata/package_thomasonw_ATmegaxxM1-C1_index.json b/internal/arduino/cores/packageindex/testdata/package_thomasonw_ATmegaxxM1-C1_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_thomasonw_ATmegaxxM1-C1_index.json rename to internal/arduino/cores/packageindex/testdata/package_thomasonw_ATmegaxxM1-C1_index.json diff --git a/arduino/cores/packageindex/testdata/package_tkj_balanduino_index.json b/internal/arduino/cores/packageindex/testdata/package_tkj_balanduino_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_tkj_balanduino_index.json rename to internal/arduino/cores/packageindex/testdata/package_tkj_balanduino_index.json diff --git a/arduino/cores/packageindex/testdata/package_tl7788_index.json b/internal/arduino/cores/packageindex/testdata/package_tl7788_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_tl7788_index.json rename to internal/arduino/cores/packageindex/testdata/package_tl7788_index.json diff --git a/arduino/cores/packageindex/testdata/package_udoo_index.json b/internal/arduino/cores/packageindex/testdata/package_udoo_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_udoo_index.json rename to internal/arduino/cores/packageindex/testdata/package_udoo_index.json diff --git a/arduino/cores/packageindex/testdata/package_zevero_avr_boot_index.json b/internal/arduino/cores/packageindex/testdata/package_zevero_avr_boot_index.json similarity index 100% rename from arduino/cores/packageindex/testdata/package_zevero_avr_boot_index.json rename to internal/arduino/cores/packageindex/testdata/package_zevero_avr_boot_index.json diff --git a/arduino/cores/packagemanager/download.go b/internal/arduino/cores/packagemanager/download.go similarity index 69% rename from arduino/cores/packagemanager/download.go rename to internal/arduino/cores/packagemanager/download.go index f3a5877c8a6..05cc0f70047 100644 --- a/arduino/cores/packagemanager/download.go +++ b/internal/arduino/cores/packagemanager/download.go @@ -16,13 +16,13 @@ package packagemanager import ( - "fmt" + "context" + "errors" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/pkg/errors" - "go.bug.st/downloader/v2" semver "go.bug.st/relaxed-semver" ) @@ -73,37 +73,37 @@ func (pme *Explorer) FindPlatformRelease(ref *PlatformReference) *cores.Platform func (pme *Explorer) FindPlatformReleaseDependencies(item *PlatformReference) (*cores.PlatformRelease, []*cores.ToolRelease, error) { targetPackage, exists := pme.packages[item.Package] if !exists { - return nil, nil, fmt.Errorf(tr("package %s not found"), item.Package) + return nil, nil, errors.New(i18n.Tr("package %s not found", item.Package)) } platform, exists := targetPackage.Platforms[item.PlatformArchitecture] if !exists { - return nil, nil, fmt.Errorf(tr("platform %[1]s not found in package %[2]s"), item.PlatformArchitecture, targetPackage.String()) + return nil, nil, errors.New(i18n.Tr("platform %[1]s not found in package %[2]s", item.PlatformArchitecture, targetPackage)) } var release *cores.PlatformRelease if item.PlatformVersion != nil { release = platform.FindReleaseWithVersion(item.PlatformVersion) if release == nil { - return nil, nil, fmt.Errorf(tr("required version %[1]s not found for platform %[2]s"), item.PlatformVersion, platform.String()) + return nil, nil, errors.New(i18n.Tr("required version %[1]s not found for platform %[2]s", item.PlatformVersion, platform)) } } else { - release = platform.GetLatestRelease() + release = platform.GetLatestCompatibleRelease() if release == nil { - return nil, nil, fmt.Errorf(tr("platform %s has no available releases"), platform.String()) + return nil, nil, errors.New(i18n.Tr("platform is not available for your OS")) } } // replaces "latest" with latest version too toolDeps, err := pme.packages.GetPlatformReleaseToolDependencies(release) if err != nil { - return nil, nil, fmt.Errorf(tr("getting tool dependencies for platform %[1]s: %[2]s"), release.String(), err) + return nil, nil, errors.New(i18n.Tr("getting tool dependencies for platform %[1]s: %[2]s", release, err)) } // discovery dependencies differ from normal tool since we always want to use the latest // available version for the platform package discoveryDependencies, err := pme.packages.GetPlatformReleaseDiscoveryDependencies(release) if err != nil { - return nil, nil, fmt.Errorf(tr("getting discovery dependencies for platform %[1]s: %[2]s"), release.String(), err) + return nil, nil, errors.New(i18n.Tr("getting discovery dependencies for platform %[1]s: %[2]s", release, err)) } toolDeps = append(toolDeps, discoveryDependencies...) @@ -111,7 +111,7 @@ func (pme *Explorer) FindPlatformReleaseDependencies(item *PlatformReference) (* // available version for the platform package monitorDependencies, err := pme.packages.GetPlatformReleaseMonitorDependencies(release) if err != nil { - return nil, nil, fmt.Errorf(tr("getting monitor dependencies for platform %[1]s: %[2]s"), release.String(), err) + return nil, nil, errors.New(i18n.Tr("getting monitor dependencies for platform %[1]s: %[2]s", release, err)) } toolDeps = append(toolDeps, monitorDependencies...) @@ -120,21 +120,21 @@ func (pme *Explorer) FindPlatformReleaseDependencies(item *PlatformReference) (* // DownloadToolRelease downloads a ToolRelease. If the tool is already downloaded a nil Downloader // is returned. Uses the given downloader configuration for download, or the default config if nil. -func (pme *Explorer) DownloadToolRelease(tool *cores.ToolRelease, config *downloader.Config, progressCB rpc.DownloadProgressCB) error { +func (pme *Explorer) DownloadToolRelease(ctx context.Context, tool *cores.ToolRelease, progressCB rpc.DownloadProgressCB) error { resource := tool.GetCompatibleFlavour() if resource == nil { - return &arduino.FailedDownloadError{ - Message: tr("Error downloading tool %s", tool), - Cause: errors.New(tr("no versions available for the current OS, try contacting %s", tool.Tool.Package.Email))} + return &cmderrors.FailedDownloadError{ + Message: i18n.Tr("Error downloading tool %s", tool), + Cause: errors.New(i18n.Tr("no versions available for the current OS, try contacting %s", tool.Tool.Package.Email))} } - return resource.Download(pme.DownloadDir, config, tool.String(), progressCB, "") + return resource.Download(ctx, pme.DownloadDir, pme.downloaderConfig, tool.String(), progressCB, "") } // DownloadPlatformRelease downloads a PlatformRelease. If the platform is already downloaded a // nil Downloader is returned. -func (pme *Explorer) DownloadPlatformRelease(platform *cores.PlatformRelease, config *downloader.Config, progressCB rpc.DownloadProgressCB) error { +func (pme *Explorer) DownloadPlatformRelease(ctx context.Context, platform *cores.PlatformRelease, progressCB rpc.DownloadProgressCB) error { if platform.Resource == nil { - return &arduino.PlatformNotFoundError{Platform: platform.String()} + return &cmderrors.PlatformNotFoundError{Platform: platform.String()} } - return platform.Resource.Download(pme.DownloadDir, config, platform.String(), progressCB, "") + return platform.Resource.Download(ctx, pme.DownloadDir, pme.downloaderConfig, platform.String(), progressCB, "") } diff --git a/arduino/cores/packagemanager/identify.go b/internal/arduino/cores/packagemanager/identify.go similarity index 96% rename from arduino/cores/packagemanager/identify.go rename to internal/arduino/cores/packagemanager/identify.go index 22d8382cd67..6b84495dc58 100644 --- a/arduino/cores/packagemanager/identify.go +++ b/internal/arduino/cores/packagemanager/identify.go @@ -16,7 +16,7 @@ package packagemanager import ( - "github.com/arduino/arduino-cli/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores" properties "github.com/arduino/go-properties-orderedmap" ) diff --git a/arduino/cores/packagemanager/install_uninstall.go b/internal/arduino/cores/packagemanager/install_uninstall.go similarity index 67% rename from arduino/cores/packagemanager/install_uninstall.go rename to internal/arduino/cores/packagemanager/install_uninstall.go index 0d8332cb2be..977e03d8bb0 100644 --- a/arduino/cores/packagemanager/install_uninstall.go +++ b/internal/arduino/cores/packagemanager/install_uninstall.go @@ -17,53 +17,56 @@ package packagemanager import ( "bytes" + "context" "encoding/json" - "fmt" + "errors" "runtime" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packageindex" - "github.com/arduino/arduino-cli/executils" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packageindex" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" ) // DownloadAndInstallPlatformUpgrades runs a full installation process to upgrade the given platform. // This method takes care of downloading missing archives, upgrading platforms and tools, and // removing the previously installed platform/tools that are no longer needed after the upgrade. func (pme *Explorer) DownloadAndInstallPlatformUpgrades( + ctx context.Context, platformRef *PlatformReference, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, skipPostInstall bool, skipPreUninstall bool, + checks resources.IntegrityCheckMode, ) (*cores.PlatformRelease, error) { if platformRef.PlatformVersion != nil { - return nil, &arduino.InvalidArgumentError{Message: tr("Upgrade doesn't accept parameters with version")} + return nil, &cmderrors.InvalidArgumentError{Message: i18n.Tr("Upgrade doesn't accept parameters with version")} } // Search the latest version for all specified platforms platform := pme.FindPlatform(platformRef) if platform == nil { - return nil, &arduino.PlatformNotFoundError{Platform: platformRef.String()} + return nil, &cmderrors.PlatformNotFoundError{Platform: platformRef.String()} } installed := pme.GetInstalledPlatformRelease(platform) if installed == nil { - return nil, &arduino.PlatformNotFoundError{Platform: platformRef.String()} + return nil, &cmderrors.PlatformNotFoundError{Platform: platformRef.String()} } - latest := platform.GetLatestRelease() + latest := platform.GetLatestCompatibleRelease() if !latest.Version.GreaterThan(installed.Version) { - return installed, &arduino.PlatformAlreadyAtTheLatestVersionError{Platform: platformRef.String()} + return installed, &cmderrors.PlatformAlreadyAtTheLatestVersionError{Platform: platformRef.String()} } platformRef.PlatformVersion = latest.Version platformRelease, tools, err := pme.FindPlatformReleaseDependencies(platformRef) if err != nil { - return nil, &arduino.PlatformNotFoundError{Platform: platformRef.String()} + return nil, &cmderrors.PlatformNotFoundError{Platform: platformRef.String()} } - if err := pme.DownloadAndInstallPlatformAndTools(platformRelease, tools, downloadCB, taskCB, skipPostInstall, skipPreUninstall); err != nil { + if err := pme.DownloadAndInstallPlatformAndTools(ctx, platformRelease, tools, downloadCB, taskCB, skipPostInstall, skipPreUninstall, checks); err != nil { return nil, err } @@ -74,9 +77,10 @@ func (pme *Explorer) DownloadAndInstallPlatformUpgrades( // This method takes care of downloading missing archives, installing/upgrading platforms and tools, and // removing the previously installed platform/tools that are no longer needed after the upgrade. func (pme *Explorer) DownloadAndInstallPlatformAndTools( + ctx context.Context, platformRelease *cores.PlatformRelease, requiredTools []*cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, - skipPostInstall bool, skipPreUninstall bool) error { + skipPostInstall bool, skipPreUninstall bool, checks resources.IntegrityCheckMode) error { log := pme.log.WithField("platform", platformRelease) // Prerequisite checks before install @@ -84,27 +88,27 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( for _, tool := range requiredTools { if tool.IsInstalled() { log.WithField("tool", tool).Warn("Tool already installed") - taskCB(&rpc.TaskProgress{Name: tr("Tool %s already installed", tool), Completed: true}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Tool %s already installed", tool), Completed: true}) } else { toolsToInstall = append(toolsToInstall, tool) } } // Package download - taskCB(&rpc.TaskProgress{Name: tr("Downloading packages")}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading packages")}) for _, tool := range toolsToInstall { - if err := pme.DownloadToolRelease(tool, nil, downloadCB); err != nil { + if err := pme.DownloadToolRelease(ctx, tool, downloadCB); err != nil { return err } } - if err := pme.DownloadPlatformRelease(platformRelease, nil, downloadCB); err != nil { + if err := pme.DownloadPlatformRelease(ctx, platformRelease, downloadCB); err != nil { return err } taskCB(&rpc.TaskProgress{Completed: true}) // Install tools first for _, tool := range toolsToInstall { - if err := pme.InstallTool(tool, taskCB, skipPostInstall); err != nil { + if err := pme.InstallTool(tool, taskCB, skipPostInstall, checks); err != nil { return err } } @@ -114,11 +118,11 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( if installed == nil { // No version of this platform is installed log.Info("Installing platform") - taskCB(&rpc.TaskProgress{Name: tr("Installing platform %s", platformRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing platform %s", platformRelease)}) } else { // A platform with a different version is already installed log.Info("Replacing platform " + installed.String()) - taskCB(&rpc.TaskProgress{Name: tr("Replacing platform %[1]s with %[2]s", installed, platformRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Replacing platform %[1]s with %[2]s", installed, platformRelease)}) platformRef := &PlatformReference{ Package: platformRelease.Platform.Package.Name, PlatformArchitecture: platformRelease.Platform.Architecture, @@ -131,14 +135,14 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( var err error _, installedTools, err = pme.FindPlatformReleaseDependencies(platformRef) if err != nil { - return &arduino.NotFoundError{Message: tr("Can't find dependencies for platform %s", platformRef), Cause: err} + return &cmderrors.NotFoundError{Message: i18n.Tr("Can't find dependencies for platform %s", platformRef), Cause: err} } } // Install - if err := pme.InstallPlatform(platformRelease); err != nil { + if err := pme.InstallPlatform(platformRelease, checks); err != nil { log.WithError(err).Error("Cannot install platform") - return &arduino.FailedInstallError{Message: tr("Cannot install platform"), Cause: err} + return &cmderrors.FailedInstallError{Message: i18n.Tr("Cannot install platform"), Cause: err} } // If upgrading remove previous release @@ -148,20 +152,20 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( // In case of error try to rollback if uninstallErr != nil { log.WithError(uninstallErr).Error("Error upgrading platform.") - taskCB(&rpc.TaskProgress{Message: tr("Error upgrading platform: %s", uninstallErr)}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Error upgrading platform: %s", uninstallErr)}) // Rollback if err := pme.UninstallPlatform(platformRelease, taskCB, skipPreUninstall); err != nil { log.WithError(err).Error("Error rolling-back changes.") - taskCB(&rpc.TaskProgress{Message: tr("Error rolling-back changes: %s", err)}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Error rolling-back changes: %s", err)}) } - return &arduino.FailedInstallError{Message: tr("Cannot upgrade platform"), Cause: uninstallErr} + return &cmderrors.FailedInstallError{Message: i18n.Tr("Cannot upgrade platform"), Cause: uninstallErr} } // Uninstall unused tools for _, tool := range installedTools { - taskCB(&rpc.TaskProgress{Name: tr("Uninstalling %s, tool is no more required", tool)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Uninstalling %s, tool is no more required", tool)}) if !pme.IsToolRequired(tool) { pme.UninstallTool(tool, taskCB, skipPreUninstall) } @@ -172,41 +176,41 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools( // Perform post install if !skipPostInstall { log.Info("Running post_install script") - taskCB(&rpc.TaskProgress{Message: tr("Configuring platform.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Configuring platform.")}) if !platformRelease.IsInstalled() { - return errors.New(tr("platform not installed")) + return errors.New(i18n.Tr("platform not installed")) } stdout, stderr, err := pme.RunPreOrPostScript(platformRelease.InstallDir, "post_install") skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stdout), Completed: true}) skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stderr), Completed: true}) if err != nil { - taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot configure platform: %s", err), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("WARNING cannot configure platform: %s", err), Completed: true}) } } else { log.Info("Skipping platform configuration.") - taskCB(&rpc.TaskProgress{Message: tr("Skipping platform configuration.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Skipping platform configuration.")}) } log.Info("Platform installed") - taskCB(&rpc.TaskProgress{Message: tr("Platform %s installed", platformRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Platform %s installed", platformRelease), Completed: true}) return nil } // InstallPlatform installs a specific release of a platform. -func (pme *Explorer) InstallPlatform(platformRelease *cores.PlatformRelease) error { +func (pme *Explorer) InstallPlatform(platformRelease *cores.PlatformRelease, checks resources.IntegrityCheckMode) error { destDir := pme.PackagesDir.Join( platformRelease.Platform.Package.Name, "hardware", platformRelease.Platform.Architecture, platformRelease.Version.String()) - return pme.InstallPlatformInDirectory(platformRelease, destDir) + return pme.InstallPlatformInDirectory(platformRelease, destDir, checks) } // InstallPlatformInDirectory installs a specific release of a platform in a specific directory. -func (pme *Explorer) InstallPlatformInDirectory(platformRelease *cores.PlatformRelease, destDir *paths.Path) error { - if err := platformRelease.Resource.Install(pme.DownloadDir, pme.tempDir, destDir); err != nil { - return errors.Errorf(tr("installing platform %[1]s: %[2]s"), platformRelease, err) +func (pme *Explorer) InstallPlatformInDirectory(platformRelease *cores.PlatformRelease, destDir *paths.Path, checks resources.IntegrityCheckMode) error { + if err := platformRelease.Resource.Install(pme.DownloadDir, pme.tempDir, destDir, checks); err != nil { + return errors.New(i18n.Tr("installing platform %[1]s: %[2]s", platformRelease, err)) } if d, err := destDir.Abs(); err == nil { platformRelease.InstallDir = d @@ -214,7 +218,7 @@ func (pme *Explorer) InstallPlatformInDirectory(platformRelease *cores.PlatformR return err } if err := pme.cacheInstalledJSON(platformRelease); err != nil { - return errors.Errorf(tr("creating installed.json in %[1]s: %[2]s"), platformRelease.InstallDir, err) + return errors.New(i18n.Tr("creating installed.json in %[1]s: %[2]s", platformRelease.InstallDir, err)) } return nil } @@ -239,7 +243,7 @@ func (pme *Explorer) RunPreOrPostScript(installDir *paths.Path, prefix string) ( } script := installDir.Join(scriptFilename) if script.Exist() && script.IsNotDir() { - cmd, err := executils.NewProcessFromPath(pme.GetEnvVarsForSpawnedProcess(), script) + cmd, err := paths.NewProcessFromPath(pme.GetEnvVarsForSpawnedProcess(), script) if err != nil { return []byte{}, []byte{}, err } @@ -275,75 +279,76 @@ func (pme *Explorer) UninstallPlatform(platformRelease *cores.PlatformRelease, t log := pme.log.WithField("platform", platformRelease) log.Info("Uninstalling platform") - taskCB(&rpc.TaskProgress{Name: tr("Uninstalling %s", platformRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Uninstalling %s", platformRelease)}) if platformRelease.InstallDir == nil { - err := fmt.Errorf(tr("platform not installed")) + err := errors.New(i18n.Tr("platform not installed")) log.WithError(err).Error("Error uninstalling") - return &arduino.FailedUninstallError{Message: err.Error()} + return &cmderrors.FailedUninstallError{Message: err.Error()} } // Safety measure if !pme.IsManagedPlatformRelease(platformRelease) { - err := fmt.Errorf(tr("%s is not managed by package manager"), platformRelease) + err := errors.New(i18n.Tr("%s is not managed by package manager", platformRelease)) log.WithError(err).Error("Error uninstalling") - return &arduino.FailedUninstallError{Message: err.Error()} + return &cmderrors.FailedUninstallError{Message: err.Error()} } if !skipPreUninstall { log.Info("Running pre_uninstall script") - taskCB(&rpc.TaskProgress{Message: tr("Running pre_uninstall script.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Running pre_uninstall script.")}) stdout, stderr, err := pme.RunPreOrPostScript(platformRelease.InstallDir, "pre_uninstall") skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stdout), Completed: true}) skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stderr), Completed: true}) if err != nil { - taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot run pre_uninstall script: %s", err), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("WARNING cannot run pre_uninstall script: %s", err), Completed: true}) } } else { log.Info("Skipping pre_uninstall script.") - taskCB(&rpc.TaskProgress{Message: tr("Skipping pre_uninstall script.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Skipping pre_uninstall script.")}) } if err := platformRelease.InstallDir.RemoveAll(); err != nil { - err = fmt.Errorf(tr("removing platform files: %s"), err) + err = errors.New(i18n.Tr("removing platform files: %s", err)) log.WithError(err).Error("Error uninstalling") - return &arduino.FailedUninstallError{Message: err.Error()} + return &cmderrors.FailedUninstallError{Message: err.Error()} } platformRelease.InstallDir = nil log.Info("Platform uninstalled") - taskCB(&rpc.TaskProgress{Message: tr("Platform %s uninstalled", platformRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Platform %s uninstalled", platformRelease), Completed: true}) return nil } // InstallTool installs a specific release of a tool. -func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB, skipPostInstall bool) error { +func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB, skipPostInstall bool, checks resources.IntegrityCheckMode) error { log := pme.log.WithField("Tool", toolRelease) if toolRelease.IsInstalled() { log.Warn("Tool already installed") - taskCB(&rpc.TaskProgress{Name: tr("Tool %s already installed", toolRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Tool %s already installed", toolRelease), Completed: true}) return nil } log.Info("Installing tool") - taskCB(&rpc.TaskProgress{Name: tr("Installing %s", toolRelease)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing %s", toolRelease)}) toolResource := toolRelease.GetCompatibleFlavour() if toolResource == nil { - return fmt.Errorf(tr("no compatible version of %[1]s tools found for the current os, try contacting %[2]s"), - toolRelease.Tool.Name, toolRelease.Tool.Package.Email) + return errors.New( + i18n.Tr("no compatible version of %[1]s tools found for the current os, try contacting %[2]s", + toolRelease.Tool.Name, toolRelease.Tool.Package.Email)) } destDir := pme.PackagesDir.Join( toolRelease.Tool.Package.Name, "tools", toolRelease.Tool.Name, toolRelease.Version.String()) - err := toolResource.Install(pme.DownloadDir, pme.tempDir, destDir) + err := toolResource.Install(pme.DownloadDir, pme.tempDir, destDir, checks) if err != nil { log.WithError(err).Warn("Cannot install tool") - return &arduino.FailedInstallError{Message: tr("Cannot install tool %s", toolRelease), Cause: err} + return &cmderrors.FailedInstallError{Message: i18n.Tr("Cannot install tool %s", toolRelease), Cause: err} } if d, err := destDir.Abs(); err == nil { toolRelease.InstallDir = d @@ -353,19 +358,19 @@ func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Task // Perform post install if !skipPostInstall { log.Info("Running tool post_install script") - taskCB(&rpc.TaskProgress{Message: tr("Configuring tool.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Configuring tool.")}) stdout, stderr, err := pme.RunPreOrPostScript(toolRelease.InstallDir, "post_install") skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stdout)}) skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stderr)}) if err != nil { - taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot configure tool: %s", err)}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("WARNING cannot configure tool: %s", err)}) } } else { log.Info("Skipping tool configuration.") - taskCB(&rpc.TaskProgress{Message: tr("Skipping tool configuration.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Skipping tool configuration.")}) } log.Info("Tool installed") - taskCB(&rpc.TaskProgress{Message: tr("%s installed", toolRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("%s installed", toolRelease), Completed: true}) return nil } @@ -393,32 +398,32 @@ func (pme *Explorer) UninstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Ta log.Info("Uninstalling tool") if toolRelease.InstallDir == nil { - return fmt.Errorf(tr("tool not installed")) + return errors.New(i18n.Tr("tool not installed")) } // Safety measure if !pme.IsManagedToolRelease(toolRelease) { - err := &arduino.FailedUninstallError{Message: tr("tool %s is not managed by package manager", toolRelease)} + err := &cmderrors.FailedUninstallError{Message: i18n.Tr("tool %s is not managed by package manager", toolRelease)} log.WithError(err).Error("Error uninstalling") return err } if !skipPreUninstall { log.Info("Running pre_uninstall script") - taskCB(&rpc.TaskProgress{Message: tr("Running pre_uninstall script.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Running pre_uninstall script.")}) stdout, stderr, err := pme.RunPreOrPostScript(toolRelease.InstallDir, "pre_uninstall") skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stdout), Completed: true}) skipEmptyMessageTaskProgressCB(taskCB)(&rpc.TaskProgress{Message: string(stderr), Completed: true}) if err != nil { - taskCB(&rpc.TaskProgress{Message: tr("WARNING cannot run pre_uninstall script: %s", err), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("WARNING cannot run pre_uninstall script: %s", err), Completed: true}) } } else { log.Info("Skipping pre_uninstall script.") - taskCB(&rpc.TaskProgress{Message: tr("Skipping pre_uninstall script.")}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Skipping pre_uninstall script.")}) } if err := toolRelease.InstallDir.RemoveAll(); err != nil { - err = &arduino.FailedUninstallError{Message: err.Error()} + err = &cmderrors.FailedUninstallError{Message: err.Error()} log.WithError(err).Error("Error uninstalling") return err } @@ -426,7 +431,7 @@ func (pme *Explorer) UninstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Ta toolRelease.InstallDir = nil log.Info("Tool uninstalled") - taskCB(&rpc.TaskProgress{Message: tr("Tool %s uninstalled", toolRelease), Completed: true}) + taskCB(&rpc.TaskProgress{Message: i18n.Tr("Tool %s uninstalled", toolRelease), Completed: true}) return nil } @@ -448,7 +453,7 @@ func (pme *Explorer) IsToolRequired(toolRelease *cores.ToolRelease) bool { func skipEmptyMessageTaskProgressCB(taskCB rpc.TaskProgressCB) rpc.TaskProgressCB { return func(msg *rpc.TaskProgress) { - if msg != nil && len(msg.Message) == 0 { + if msg != nil && len(msg.GetMessage()) == 0 { return } taskCB(msg) diff --git a/arduino/cores/packagemanager/loader.go b/internal/arduino/cores/packagemanager/loader.go similarity index 74% rename from arduino/cores/packagemanager/loader.go rename to internal/arduino/cores/packagemanager/loader.go index 2644a9f22e2..2effccb825d 100644 --- a/arduino/cores/packagemanager/loader.go +++ b/internal/arduino/cores/packagemanager/loader.go @@ -16,32 +16,30 @@ package packagemanager import ( + "errors" "fmt" - "os" - "path/filepath" "regexp" "strconv" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" semver "go.bug.st/relaxed-semver" ) // LoadHardware read all plaforms from the configured paths func (pm *Builder) LoadHardware() []error { - hardwareDirs := configuration.HardwareDirectories(configuration.Settings) - merr := pm.LoadHardwareFromDirectories(hardwareDirs) - - bundleToolDirs := configuration.BuiltinToolsDirectories(configuration.Settings) - merr = append(merr, pm.LoadToolsFromBundleDirectories(bundleToolDirs)...) - - return merr + hardwareDirs := paths.NewPathList() + if pm.PackagesDir.IsDir() { + hardwareDirs.Add(pm.PackagesDir) + } + if pm.userPackagesDir != nil && pm.userPackagesDir.IsDir() { + hardwareDirs.Add(pm.userPackagesDir) + } + return pm.LoadHardwareFromDirectories(hardwareDirs) } // LoadHardwareFromDirectories load plaforms from a set of directories @@ -58,17 +56,17 @@ func (pm *Builder) LoadHardwareFromDirectory(path *paths.Path) []error { var merr []error pm.log.Infof("Loading hardware from: %s", path) if err := path.ToAbs(); err != nil { - return append(merr, fmt.Errorf("%s: %w", tr("finding absolute path of %s", path), err)) + return append(merr, fmt.Errorf("%s: %w", i18n.Tr("finding absolute path of %s", path), err)) } if path.IsNotDir() { - return append(merr, errors.New(tr("%s is not a directory", path))) + return append(merr, errors.New(i18n.Tr("%s is not a directory", path))) } // Scan subdirs packagersPaths, err := path.ReadDir() if err != nil { - return append(merr, fmt.Errorf("%s: %w", tr("reading directory %s", path), err)) + return append(merr, fmt.Errorf("%s: %w", i18n.Tr("reading directory %s", path), err)) } packagersPaths.FilterOutHiddenFiles() packagersPaths.FilterDirs() @@ -97,7 +95,7 @@ func (pm *Builder) LoadHardwareFromDirectory(path *paths.Path) []error { // Follow symlinks err := packagerPath.FollowSymLink() // ex: .arduino15/packages/arduino/ if err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("following symlink %s", path), err)) + merr = append(merr, fmt.Errorf("%s: %w", i18n.Tr("following symlink %s", path), err)) continue } @@ -150,7 +148,7 @@ func (pm *Builder) loadPlatforms(targetPackage *cores.Package, packageDir *paths platformsDirs, err := packageDir.ReadDir() if err != nil { - return append(merr, fmt.Errorf("%s: %w", tr("reading directory %s", packageDir), err)) + return append(merr, fmt.Errorf("%s: %w", i18n.Tr("reading directory %s", packageDir), err)) } // A platform can only be inside a directory, thus we skip everything else. @@ -178,7 +176,7 @@ func (pm *Builder) loadPlatforms(targetPackage *cores.Package, packageDir *paths func (pm *Builder) loadPlatform(targetPackage *cores.Package, architecture string, platformPath *paths.Path) error { // This is not a platform if platformPath.IsNotDir() { - return errors.New(tr("path is not a platform directory: %s", platformPath)) + return errors.New(i18n.Tr("path is not a platform directory: %s", platformPath)) } // There are two possible platform directory structures: @@ -187,67 +185,27 @@ func (pm *Builder) loadPlatform(targetPackage *cores.Package, architecture strin // We identify them by checking where is the bords.txt file possibleBoardTxtPath := platformPath.Join("boards.txt") if exist, err := possibleBoardTxtPath.ExistCheck(); err != nil { - return fmt.Errorf("%s: %w", tr("looking for boards.txt in %s", possibleBoardTxtPath), err) + return fmt.Errorf("%s: %w", i18n.Tr("looking for boards.txt in %s", possibleBoardTxtPath), err) } else if exist { // case: ARCHITECTURE/boards.txt platformTxtPath := platformPath.Join("platform.txt") platformProperties, err := properties.SafeLoad(platformTxtPath.String()) if err != nil { - return fmt.Errorf("%s: %w", tr("loading platform.txt"), err) + return fmt.Errorf("%s: %w", i18n.Tr("loading platform.txt"), err) } versionString := platformProperties.ExpandPropsInString(platformProperties.Get("version")) version, err := semver.Parse(versionString) if err != nil { - return &arduino.InvalidVersionError{Cause: fmt.Errorf("%s: %s", platformTxtPath, err)} - } - - // Check if package_bundled_index.json exists. - // This is used indirectly by the Java IDE since it's necessary for the arduino-builder - // to find cores bundled with that version of the IDE. - // TODO: This piece of logic MUST be removed as soon as the Java IDE stops using the arduino-builder. - isIDEBundled := false - packageBundledIndexPath := platformPath.Parent().Parent().Join("package_index_bundled.json") - if packageBundledIndexPath.Exist() { - // particular case: ARCHITECTURE/boards.txt with package_bundled_index.json - - // this is an unversioned Platform with a package_index_bundled.json that - // gives information about the version and tools needed - - // Parse the bundled index and merge to the general index - index, err := pm.LoadPackageIndexFromFile(packageBundledIndexPath) - if err != nil { - return fmt.Errorf("%s: %w", tr("parsing IDE bundled index"), err) - } - - // Now export the bundled index in a temporary core.Packages to retrieve the bundled package version - tmp := cores.NewPackages() - index.MergeIntoPackages(tmp) - if tmpPackage := tmp.GetOrCreatePackage(targetPackage.Name); tmpPackage == nil { - pm.log.Warnf("Can't determine bundle platform version for %s", targetPackage.Name) - } else if tmpPlatform := tmpPackage.GetOrCreatePlatform(architecture); tmpPlatform == nil { - pm.log.Warnf("Can't determine bundle platform version for %s:%s", targetPackage.Name, architecture) - } else if tmpPlatformRelease := tmpPlatform.GetLatestRelease(); tmpPlatformRelease == nil { - pm.log.Warnf("Can't determine bundle platform version for %s:%s, no valid release found", targetPackage.Name, architecture) - } else { - version = tmpPlatformRelease.Version - } - - isIDEBundled = true + return &cmderrors.InvalidVersionError{Cause: fmt.Errorf("%s: %s", platformTxtPath, err)} } platform := targetPackage.GetOrCreatePlatform(architecture) - if !isIDEBundled { - platform.ManuallyInstalled = true - } + platform.ManuallyInstalled = true release := platform.GetOrCreateRelease(version) - release.IsIDEBundled = isIDEBundled - if isIDEBundled { - pm.log.Infof("Package is built-in") - } if err := pm.loadPlatformRelease(release, platformPath); err != nil { - return fmt.Errorf("%s: %w", tr("loading platform release %s", release), err) + return fmt.Errorf("%s: %w", i18n.Tr("loading platform release %s", release), err) } pm.log.WithField("platform", release).Infof("Loaded platform") @@ -257,25 +215,25 @@ func (pm *Builder) loadPlatform(targetPackage *cores.Package, architecture strin versionDirs, err := platformPath.ReadDir() if err != nil { - return fmt.Errorf("%s: %w", tr("reading directory %s", platformPath), err) + return fmt.Errorf("%s: %w", i18n.Tr("reading directory %s", platformPath), err) } versionDirs.FilterDirs() versionDirs.FilterOutHiddenFiles() for _, versionDir := range versionDirs { if exist, err := versionDir.Join("boards.txt").ExistCheck(); err != nil { - return fmt.Errorf("%s: %w", tr("opening boards.txt"), err) + return fmt.Errorf("%s: %w", i18n.Tr("opening boards.txt"), err) } else if !exist { continue } version, err := semver.Parse(versionDir.Base()) if err != nil { - return fmt.Errorf("%s: %w", tr("invalid version directory %s", versionDir), err) + return fmt.Errorf("%s: %w", i18n.Tr("invalid version directory %s", versionDir), err) } platform := targetPackage.GetOrCreatePlatform(architecture) release := platform.GetOrCreateRelease(version) if err := pm.loadPlatformRelease(release, versionDir); err != nil { - return fmt.Errorf("%s: %w", tr("loading platform release %s", release), err) + return fmt.Errorf("%s: %w", i18n.Tr("loading platform release %s", release), err) } pm.log.WithField("platform", release).Infof("Loaded platform") } @@ -287,32 +245,35 @@ func (pm *Builder) loadPlatform(targetPackage *cores.Package, architecture strin func (pm *Builder) loadPlatformRelease(platform *cores.PlatformRelease, path *paths.Path) error { platform.InstallDir = path - // Some useful paths - installedJSONPath := path.Join("installed.json") - platformTxtPath := path.Join("platform.txt") - platformTxtLocalPath := path.Join("platform.local.txt") - programmersTxtPath := path.Join("programmers.txt") - // If the installed.json file is found load it, this is done to handle the // case in which the platform's index and its url have been deleted locally, // if we don't load it some information about the platform is lost + installedJSONPath := path.Join("installed.json") + platform.Timestamps.AddFile(installedJSONPath) if installedJSONPath.Exist() { if _, err := pm.LoadPackageIndexFromFile(installedJSONPath); err != nil { - return fmt.Errorf(tr("loading %[1]s: %[2]s"), installedJSONPath, err) + return errors.New(i18n.Tr("loading %[1]s: %[2]s", installedJSONPath, err)) } } + // TODO: why CLONE? + platform.Properties = platform.Properties.Clone() + // Create platform properties - platform.Properties = platform.Properties.Clone() // TODO: why CLONE? - if p, err := properties.SafeLoad(platformTxtPath.String()); err == nil { + platformTxtPath := path.Join("platform.txt") + platform.Timestamps.AddFile(platformTxtPath) + if p, err := properties.SafeLoadFromPath(platformTxtPath); err == nil { platform.Properties.Merge(p) } else { - return fmt.Errorf(tr("loading %[1]s: %[2]s"), platformTxtPath, err) + return errors.New(i18n.Tr("loading %[1]s: %[2]s", platformTxtPath, err)) } - if p, err := properties.SafeLoad(platformTxtLocalPath.String()); err == nil { + + platformTxtLocalPath := path.Join("platform.local.txt") + platform.Timestamps.AddFile(platformTxtLocalPath) + if p, err := properties.SafeLoadFromPath(platformTxtLocalPath); err == nil { platform.Properties.Merge(p) } else { - return fmt.Errorf(tr("loading %[1]s: %[2]s"), platformTxtLocalPath, err) + return errors.New(i18n.Tr("loading %[1]s: %[2]s", platformTxtLocalPath, err)) } if platform.Properties.SubTree("pluggable_discovery").Size() > 0 || platform.Properties.SubTree("pluggable_monitor").Size() > 0 { @@ -323,19 +284,21 @@ func (pm *Builder) loadPlatformRelease(platform *cores.PlatformRelease, path *pa platform.Properties.Set("pluggable_monitor.required.serial", "builtin:serial-monitor") } - if platform.Platform.Name == "" { + if platform.Name == "" { if name, ok := platform.Properties.GetOk("name"); ok { - platform.Platform.Name = name + platform.Name = name } else { // If the platform.txt file doesn't exist for this platform and it's not in any // package index there is no way of retrieving its name, so we build one using // the available information, that is the packager name and the architecture. - platform.Platform.Name = fmt.Sprintf("%s-%s", platform.Platform.Package.Name, platform.Platform.Architecture) + platform.Name = fmt.Sprintf("%s-%s", platform.Platform.Package.Name, platform.Platform.Architecture) } } // Create programmers properties - if programmersProperties, err := properties.SafeLoad(programmersTxtPath.String()); err == nil { + programmersTxtPath := path.Join("programmers.txt") + platform.Timestamps.AddFile(programmersTxtPath) + if programmersProperties, err := properties.SafeLoadFromPath(programmersTxtPath); err == nil { for programmerID, programmerProps := range programmersProperties.FirstLevelOf() { if !platform.PluggableDiscoveryAware { convertUploadToolsToPluggableDiscovery(programmerProps) @@ -348,7 +311,7 @@ func (pm *Builder) loadPlatformRelease(platform *cores.PlatformRelease, path *pa } if err := pm.loadBoards(platform); err != nil { - return fmt.Errorf(tr("loading boards: %s"), err) + return errors.New(i18n.Tr("loading boards: %s", err)) } if !platform.PluggableDiscoveryAware { @@ -360,7 +323,7 @@ func (pm *Builder) loadPlatformRelease(platform *cores.PlatformRelease, path *pa for protocol, ref := range platform.Properties.SubTree("pluggable_monitor.required").AsMap() { split := strings.Split(ref, ":") if len(split) != 2 { - return fmt.Errorf(tr("invalid pluggable monitor reference: %s"), ref) + return errors.New(i18n.Tr("invalid pluggable monitor reference: %s", ref)) } pm.log.WithField("protocol", protocol).WithField("tool", ref).Info("Adding monitor tool") platform.Monitors[protocol] = &cores.MonitorDependency{ @@ -401,10 +364,7 @@ func convertLegacyPlatformToPluggableDiscovery(platform *cores.PlatformRelease) // Add identification properties for network protocol i := 0 - for { - if !board.Properties.ContainsKey(fmt.Sprintf("upload_port.%d.vid", i)) { - break - } + for board.Properties.ContainsKey(fmt.Sprintf("upload_port.%d.vid", i)) { i++ } board.Properties.Set(fmt.Sprintf("upload_port.%d.board", i), board.BoardID) @@ -454,16 +414,18 @@ func (pm *Builder) loadProgrammer(programmerProperties *properties.Map) *cores.P func (pm *Builder) loadBoards(platform *cores.PlatformRelease) error { if platform.InstallDir == nil { - return fmt.Errorf(tr("platform not installed")) + return errors.New(i18n.Tr("platform not installed")) } boardsTxtPath := platform.InstallDir.Join("boards.txt") + platform.Timestamps.AddFile(boardsTxtPath) allBoardsProperties, err := properties.LoadFromPath(boardsTxtPath) if err != nil { return err } boardsLocalTxtPath := platform.InstallDir.Join("boards.local.txt") + platform.Timestamps.AddFile(boardsLocalTxtPath) if boardsLocalProperties, err := properties.SafeLoadFromPath(boardsLocalTxtPath); err == nil { allBoardsProperties.Merge(boardsLocalProperties) } else { @@ -614,7 +576,7 @@ func (pm *Builder) LoadToolsFromPackageDir(targetPackage *cores.Package, toolsPa toolsPaths, err := toolsPath.ReadDir() if err != nil { - return append(merr, fmt.Errorf("%s: %w", tr("reading directory %s", toolsPath), err)) + return append(merr, fmt.Errorf("%s: %w", i18n.Tr("reading directory %s", toolsPath), err)) } toolsPaths.FilterDirs() toolsPaths.FilterOutHiddenFiles() @@ -622,7 +584,7 @@ func (pm *Builder) LoadToolsFromPackageDir(targetPackage *cores.Package, toolsPa name := toolPath.Base() tool := targetPackage.GetOrCreateTool(name) if err = pm.loadToolReleasesFromTool(tool, toolPath); err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("loading tool release in %s", toolPath), err)) + merr = append(merr, fmt.Errorf("%s: %w", i18n.Tr("loading tool release in %s", toolPath), err)) } } return merr @@ -647,9 +609,9 @@ func (pm *Builder) loadToolReleasesFromTool(tool *cores.Tool, toolPath *paths.Pa func (pm *Builder) loadToolReleaseFromDirectory(tool *cores.Tool, version *semver.RelaxedVersion, toolReleasePath *paths.Path) error { if absToolReleasePath, err := toolReleasePath.Abs(); err != nil { - return errors.New(tr("error opening %s", absToolReleasePath)) + return errors.New(i18n.Tr("error opening %s", absToolReleasePath)) } else if !absToolReleasePath.IsDir() { - return errors.New(tr("%s is not a directory", absToolReleasePath)) + return errors.New(i18n.Tr("%s is not a directory", absToolReleasePath)) } else { toolRelease := tool.GetOrCreateRelease(version) toolRelease.InstallDir = absToolReleasePath @@ -658,83 +620,6 @@ func (pm *Builder) loadToolReleaseFromDirectory(tool *cores.Tool, version *semve } } -// LoadToolsFromBundleDirectories FIXMEDOC -func (pm *Builder) LoadToolsFromBundleDirectories(dirs paths.PathList) []error { - var merr []error - for _, dir := range dirs { - if err := pm.LoadToolsFromBundleDirectory(dir); err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("loading bundled tools from %s", dir), err)) - } - } - return merr -} - -// LoadToolsFromBundleDirectory FIXMEDOC -func (pm *Builder) LoadToolsFromBundleDirectory(toolsPath *paths.Path) error { - pm.log.Infof("Loading tools from bundle dir: %s", toolsPath) - - // We scan toolsPath content to find a "builtin_tools_versions.txt", if such file exists - // then the all the tools are available in the same directory, mixed together, and their - // name and version are written in the "builtin_tools_versions.txt" file. - // If no "builtin_tools_versions.txt" is found, then the directory structure is the classic - // TOOLSPATH/TOOL-NAME/TOOL-VERSION and it will be parsed as such and associated to an - // "unnamed" packager. - - // TODO: get rid of "builtin_tools_versions.txt" - - // Search for builtin_tools_versions.txt - builtinToolsVersionsTxtPath := "" - findBuiltInToolsVersionsTxt := func(currentPath string, info os.FileInfo, err error) error { - if err != nil { - // Ignore errors - return nil - } - if builtinToolsVersionsTxtPath != "" { - return filepath.SkipDir - } - if info.Name() == "builtin_tools_versions.txt" { - builtinToolsVersionsTxtPath = currentPath - return filepath.SkipDir - } - return nil - } - if err := filepath.Walk(toolsPath.String(), findBuiltInToolsVersionsTxt); err != nil { - return fmt.Errorf(tr("searching for builtin_tools_versions.txt in %[1]s: %[2]s"), toolsPath, err) - } - - if builtinToolsVersionsTxtPath != "" { - // If builtin_tools_versions.txt is found create tools based on the info - // contained in that file - pm.log.Infof("Found builtin_tools_versions.txt") - toolPath, err := paths.New(builtinToolsVersionsTxtPath).Parent().Abs() - if err != nil { - return fmt.Errorf(tr("getting parent dir of %[1]s: %[2]s"), builtinToolsVersionsTxtPath, err) - } - - all, err := properties.Load(builtinToolsVersionsTxtPath) - if err != nil { - return fmt.Errorf(tr("reading %[1]s: %[2]s"), builtinToolsVersionsTxtPath, err) - } - - for packager, toolsData := range all.FirstLevelOf() { - targetPackage := pm.packages.GetOrCreatePackage(packager) - - for toolName, toolVersion := range toolsData.AsMap() { - tool := targetPackage.GetOrCreateTool(toolName) - version := semver.ParseRelaxed(toolVersion) - release := tool.GetOrCreateRelease(version) - release.InstallDir = toolPath - pm.log.WithField("tool", release).Infof("Loaded tool") - } - } - } else { - // otherwise load the tools inside the unnamed package - unnamedPackage := pm.packages.GetOrCreatePackage("") - pm.LoadToolsFromPackageDir(unnamedPackage, toolsPath) - } - return nil -} - // LoadDiscoveries load all discoveries for all loaded platforms // Returns error if: // * A PluggableDiscovery instance can't be created @@ -753,15 +638,14 @@ func (pme *Explorer) LoadDiscoveries() []error { func (pme *Explorer) loadDiscovery(id string) error { tool := pme.GetTool(id) if tool == nil { - return errors.New(tr("discovery %s not found", id)) + return errors.New(i18n.Tr("discovery %s not found", id)) } toolRelease := tool.GetLatestInstalled() if toolRelease == nil { - return errors.New(tr("discovery %s not installed", id)) + return errors.New(i18n.Tr("discovery %s not installed", id)) } discoveryPath := toolRelease.InstallDir.Join(tool.Name).String() - d := discovery.New(id, discoveryPath) - pme.discoveryManager.Add(d) + pme.discoveryManager.Add(id, discoveryPath) return nil } @@ -822,7 +706,7 @@ func (pme *Explorer) loadDiscoveries(release *cores.PlatformRelease) []error { for discoveryID, props := range discoveryIDs { pattern, ok := props.GetOk("pattern") if !ok { - merr = append(merr, errors.New(tr("can't find pattern for discovery with id %s", discoveryID))) + merr = append(merr, errors.New(i18n.Tr("can't find pattern for discovery with id %s", discoveryID))) continue } configuration := release.Properties.Clone() @@ -837,8 +721,7 @@ func (pme *Explorer) loadDiscoveries(release *cores.PlatformRelease) []error { if cmdArgs, err := properties.SplitQuotedString(cmd, `"'`, true); err != nil { merr = append(merr, err) } else { - d := discovery.New(discoveryID, cmdArgs...) - pme.discoveryManager.Add(d) + pme.discoveryManager.Add(discoveryID, cmdArgs...) } } diff --git a/arduino/cores/packagemanager/loader_test.go b/internal/arduino/cores/packagemanager/loader_test.go similarity index 99% rename from arduino/cores/packagemanager/loader_test.go rename to internal/arduino/cores/packagemanager/loader_test.go index d0d41992179..5d394280aa8 100644 --- a/arduino/cores/packagemanager/loader_test.go +++ b/internal/arduino/cores/packagemanager/loader_test.go @@ -21,6 +21,7 @@ import ( "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" semver "go.bug.st/relaxed-semver" ) @@ -174,7 +175,7 @@ func TestLoadDiscoveries(t *testing.T) { defer fakePath.RemoveAll() createTestPackageManager := func() *PackageManager { - pmb := NewBuilder(fakePath, fakePath, fakePath, fakePath, "test") + pmb := NewBuilder(fakePath, fakePath, nil, fakePath, fakePath, "test", downloader.GetDefaultConfig()) pack := pmb.packages.GetOrCreatePackage("arduino") // ble-discovery tool tool := pack.GetOrCreateTool("ble-discovery") diff --git a/arduino/cores/packagemanager/package_manager.go b/internal/arduino/cores/packagemanager/package_manager.go similarity index 83% rename from arduino/cores/packagemanager/package_manager.go rename to internal/arduino/cores/packagemanager/package_manager.go index 7773b407109..deb14931053 100644 --- a/arduino/cores/packagemanager/package_manager.go +++ b/internal/arduino/cores/packagemanager/package_manager.go @@ -16,27 +16,29 @@ package packagemanager import ( - "fmt" + "errors" "net/url" "os" "path" "path/filepath" + "slices" "strconv" "strings" "sync" "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/cores/packageindex" - "github.com/arduino/arduino-cli/arduino/discovery/discoverymanager" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packageindex" + "github.com/arduino/arduino-cli/internal/arduino/discovery/discoverymanager" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" "github.com/arduino/go-timeutils" - "github.com/pkg/errors" "github.com/sirupsen/logrus" + "go.bug.st/downloader/v2" semver "go.bug.st/relaxed-semver" ) @@ -53,11 +55,13 @@ type PackageManager struct { log logrus.FieldLogger IndexDir *paths.Path PackagesDir *paths.Path + userPackagesDir *paths.Path DownloadDir *paths.Path tempDir *paths.Path profile *sketch.Profile discoveryManager *discoverymanager.DiscoveryManager userAgent string + downloaderConfig downloader.Config } // Builder is used to create a new PackageManager. The builder @@ -70,20 +74,20 @@ type Builder PackageManager // job is completed. type Explorer PackageManager -var tr = i18n.Tr - // NewBuilder returns a new Builder -func NewBuilder(indexDir, packagesDir, downloadDir, tempDir *paths.Path, userAgent string) *Builder { +func NewBuilder(indexDir, packagesDir, userPackagesDir, downloadDir, tempDir *paths.Path, userAgent string, downloaderConfig downloader.Config) *Builder { return &Builder{ log: logrus.StandardLogger(), packages: cores.NewPackages(), IndexDir: indexDir, PackagesDir: packagesDir, + userPackagesDir: userPackagesDir, DownloadDir: downloadDir, tempDir: tempDir, packagesCustomGlobalProperties: properties.NewMap(), - discoveryManager: discoverymanager.New(), + discoveryManager: discoverymanager.New(userAgent), userAgent: userAgent, + downloaderConfig: downloaderConfig, } } @@ -96,6 +100,7 @@ func (pmb *Builder) BuildIntoExistingPackageManager(target *PackageManager) { target.packages = pmb.packages target.IndexDir = pmb.IndexDir target.PackagesDir = pmb.PackagesDir + target.userPackagesDir = pmb.userPackagesDir target.DownloadDir = pmb.DownloadDir target.tempDir = pmb.tempDir target.packagesCustomGlobalProperties = pmb.packagesCustomGlobalProperties @@ -112,12 +117,50 @@ func (pmb *Builder) Build() *PackageManager { packages: pmb.packages, IndexDir: pmb.IndexDir, PackagesDir: pmb.PackagesDir, + userPackagesDir: pmb.userPackagesDir, DownloadDir: pmb.DownloadDir, tempDir: pmb.tempDir, packagesCustomGlobalProperties: pmb.packagesCustomGlobalProperties, profile: pmb.profile, discoveryManager: pmb.discoveryManager, userAgent: pmb.userAgent, + downloaderConfig: pmb.downloaderConfig, + } +} + +// calculate Compatible PlatformRelease +func (pmb *Builder) calculateCompatibleReleases() { + for _, op := range pmb.packages { + for _, p := range op.Platforms { + for _, pr := range p.Releases { + platformHasAllCompatibleTools := func() bool { + for _, td := range pr.ToolDependencies { + if td == nil { + return false + } + + _, ok := pmb.packages[td.ToolPackager] + if !ok { + return false + } + tool := pmb.packages[td.ToolPackager].Tools[td.ToolName] + if tool == nil { + return false + } + tr := tool.Releases[td.ToolVersion.NormalizedString()] + if tr == nil { + return false + } + + if tr.GetCompatibleFlavour() == nil { + return false + } + } + return true + } + pr.Compatible = platformHasAllCompatibleTools() + } + } } } @@ -126,8 +169,9 @@ func (pmb *Builder) Build() *PackageManager { // this function will make the builder write the new configuration into this // PackageManager. func (pm *PackageManager) NewBuilder() (builder *Builder, commit func()) { - pmb := NewBuilder(pm.IndexDir, pm.PackagesDir, pm.DownloadDir, pm.tempDir, pm.userAgent) + pmb := NewBuilder(pm.IndexDir, pm.PackagesDir, pm.userPackagesDir, pm.DownloadDir, pm.tempDir, pm.userAgent, pm.downloaderConfig) return pmb, func() { + pmb.calculateCompatibleReleases() pmb.BuildIntoExistingPackageManager(pm) } } @@ -149,6 +193,7 @@ func (pm *PackageManager) NewExplorer() (explorer *Explorer, release func()) { profile: pm.profile, discoveryManager: pm.discoveryManager, userAgent: pm.userAgent, + downloaderConfig: pm.downloaderConfig, }, pm.packagesLock.RUnlock } @@ -192,8 +237,8 @@ func (pme *Explorer) GetCustomGlobalProperties() *properties.Map { } // FindPlatformReleaseProvidingBoardsWithVidPid FIXMEDOC -func (pme *Explorer) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid string) []*cores.PlatformRelease { - res := []*cores.PlatformRelease{} +func (pme *Explorer) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid string) []*cores.Platform { + res := []*cores.Platform{} for _, targetPackage := range pme.packages { for _, targetPlatform := range targetPackage.Platforms { platformRelease := targetPlatform.GetLatestRelease() @@ -202,7 +247,7 @@ func (pme *Explorer) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid strin } for _, boardManifest := range platformRelease.BoardsManifest { if boardManifest.HasUsbID(vid, pid) { - res = append(res, platformRelease) + res = append(res, targetPlatform) break } } @@ -211,45 +256,11 @@ func (pme *Explorer) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid strin return res } -// FindBoardsWithVidPid FIXMEDOC -func (pme *Explorer) FindBoardsWithVidPid(vid, pid string) []*cores.Board { - res := []*cores.Board{} - for _, targetPackage := range pme.packages { - for _, targetPlatform := range targetPackage.Platforms { - if platform := pme.GetInstalledPlatformRelease(targetPlatform); platform != nil { - for _, board := range platform.Boards { - if board.HasUsbID(vid, pid) { - res = append(res, board) - } - } - } - } - } - return res -} - -// FindBoardsWithID FIXMEDOC -func (pme *Explorer) FindBoardsWithID(id string) []*cores.Board { - res := []*cores.Board{} - for _, targetPackage := range pme.packages { - for _, targetPlatform := range targetPackage.Platforms { - if platform := pme.GetInstalledPlatformRelease(targetPlatform); platform != nil { - for _, board := range platform.Boards { - if board.BoardID == id { - res = append(res, board) - } - } - } - } - } - return res -} - // FindBoardWithFQBN returns the board identified by the fqbn, or an error func (pme *Explorer) FindBoardWithFQBN(fqbnIn string) (*cores.Board, error) { - fqbn, err := cores.ParseFQBN(fqbnIn) + fqbn, err := fqbn.Parse(fqbnIn) if err != nil { - return nil, fmt.Errorf(tr("parsing fqbn: %s"), err) + return nil, errors.New(i18n.Tr("parsing fqbn: %s", err)) } _, _, board, _, _, err := pme.ResolveFQBN(fqbn) @@ -275,40 +286,40 @@ func (pme *Explorer) FindBoardWithFQBN(fqbnIn string) (*cores.Board, error) { // // In case of error the partial results found in the meantime are // returned together with the error. -func (pme *Explorer) ResolveFQBN(fqbn *cores.FQBN) ( +func (pme *Explorer) ResolveFQBN(fqbn *fqbn.FQBN) ( *cores.Package, *cores.PlatformRelease, *cores.Board, *properties.Map, *cores.PlatformRelease, error) { // Find package - targetPackage := pme.packages[fqbn.Package] + targetPackage := pme.packages[fqbn.Vendor] if targetPackage == nil { return nil, nil, nil, nil, nil, - fmt.Errorf(tr("unknown package %s"), fqbn.Package) + errors.New(i18n.Tr("unknown package %s", fqbn.Vendor)) } // Find platform - platform := targetPackage.Platforms[fqbn.PlatformArch] + platform := targetPackage.Platforms[fqbn.Architecture] if platform == nil { return targetPackage, nil, nil, nil, nil, - fmt.Errorf(tr("unknown platform %s:%s"), targetPackage, fqbn.PlatformArch) + errors.New(i18n.Tr("unknown platform %s:%s", targetPackage, fqbn.Architecture)) } boardPlatformRelease := pme.GetInstalledPlatformRelease(platform) if boardPlatformRelease == nil { return targetPackage, nil, nil, nil, nil, - fmt.Errorf(tr("platform %s is not installed"), platform) + errors.New(i18n.Tr("platform %s is not installed", platform)) } // Find board board := boardPlatformRelease.Boards[fqbn.BoardID] if board == nil { return targetPackage, boardPlatformRelease, nil, nil, nil, - fmt.Errorf(tr("board %s not found"), fqbn.StringWithoutConfig()) + errors.New(i18n.Tr("board %s not found", fqbn.StringWithoutConfig())) } boardBuildProperties, err := board.GetBuildProperties(fqbn) if err != nil { return targetPackage, boardPlatformRelease, board, nil, nil, - fmt.Errorf(tr("getting build properties for board %[1]s: %[2]s"), board, err) + errors.New(i18n.Tr("getting build properties for board %[1]s: %[2]s", board, err)) } // Determine the platform used for the build and the variant (in case the board refers @@ -329,12 +340,17 @@ func (pme *Explorer) ResolveFQBN(fqbn *cores.FQBN) ( // Add runtime build properties buildProperties.Merge(boardPlatformRelease.RuntimeProperties()) + buildProperties.SetPath("build.board.platform.path", boardPlatformRelease.InstallDir) + buildProperties.SetPath("build.core.platform.path", corePlatformRelease.InstallDir) buildProperties.SetPath("build.core.path", corePlatformRelease.InstallDir.Join("cores", core)) buildProperties.SetPath("build.system.path", corePlatformRelease.InstallDir.Join("system")) buildProperties.Set("build.variant.path", "") if variant != "" { buildProperties.SetPath("build.variant.path", variantPlatformRelease.InstallDir.Join("variants", variant)) } + if buildProperties.GetBoolean("runtime.use_core_platform_path_for_runtime_platform_path") { + buildProperties.Set("runtime.platform.path", buildProperties.Get("build.core.platform.path")) + } for _, tool := range pme.GetAllInstalledToolsReleases() { buildProperties.Merge(tool.RuntimeProperties()) @@ -381,7 +397,7 @@ func (pme *Explorer) ResolveFQBN(fqbn *cores.FQBN) ( return targetPackage, boardPlatformRelease, board, buildProperties, corePlatformRelease, nil } -func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *properties.Map, boardPlatformRelease *cores.PlatformRelease, fqbn *cores.FQBN) (string, *cores.PlatformRelease, string, *cores.PlatformRelease, error) { +func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *properties.Map, boardPlatformRelease *cores.PlatformRelease, fqbn *fqbn.FQBN) (string, *cores.PlatformRelease, string, *cores.PlatformRelease, error) { core := boardBuildProperties.ExpandPropsInString(boardBuildProperties.Get("build.core")) referredCore := "" if split := strings.Split(core, ":"); len(split) > 1 { @@ -397,7 +413,8 @@ func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *pr // core and variant cannot refer to two different platforms if referredCore != "" && referredVariant != "" && referredCore != referredVariant { return "", nil, "", nil, - fmt.Errorf(tr("'build.core' and 'build.variant' refer to different platforms: %[1]s and %[2]s"), referredCore+":"+core, referredVariant+":"+variant) + errors.New(i18n.Tr("'build.core' and 'build.variant' refer to different platforms: %[1]s and %[2]s", + referredCore+":"+core, referredVariant+":"+variant)) } // extract the referred platform @@ -410,17 +427,17 @@ func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *pr referredPackage := pme.packages[referredPackageName] if referredPackage == nil { return "", nil, "", nil, - fmt.Errorf(tr("missing package %[1]s referenced by board %[2]s"), referredPackageName, fqbn) + errors.New(i18n.Tr("missing package %[1]s referenced by board %[2]s", referredPackageName, fqbn)) } - referredPlatform := referredPackage.Platforms[fqbn.PlatformArch] + referredPlatform := referredPackage.Platforms[fqbn.Architecture] if referredPlatform == nil { return "", nil, "", nil, - fmt.Errorf(tr("missing platform %[1]s:%[2]s referenced by board %[3]s"), referredPackageName, fqbn.PlatformArch, fqbn) + errors.New(i18n.Tr("missing platform %[1]s:%[2]s referenced by board %[3]s", referredPackageName, fqbn.Architecture, fqbn)) } referredPlatformRelease = pme.GetInstalledPlatformRelease(referredPlatform) if referredPlatformRelease == nil { return "", nil, "", nil, - fmt.Errorf(tr("missing platform release %[1]s:%[2]s referenced by board %[3]s"), referredPackageName, fqbn.PlatformArch, fqbn) + errors.New(i18n.Tr("missing platform release %[1]s:%[2]s referenced by board %[3]s", referredPackageName, fqbn.Architecture, fqbn)) } } @@ -441,7 +458,7 @@ func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *pr func (pmb *Builder) LoadPackageIndex(URL *url.URL) error { indexFileName := path.Base(URL.Path) if indexFileName == "." || indexFileName == "" { - return &arduino.InvalidURLError{Cause: errors.New(URL.String())} + return &cmderrors.InvalidURLError{Cause: errors.New(URL.String())} } if strings.HasSuffix(indexFileName, ".tar.bz2") { indexFileName = strings.TrimSuffix(indexFileName, ".tar.bz2") + ".json" @@ -449,7 +466,7 @@ func (pmb *Builder) LoadPackageIndex(URL *url.URL) error { indexPath := pmb.IndexDir.Join(indexFileName) index, err := packageindex.LoadIndex(indexPath) if err != nil { - return fmt.Errorf(tr("loading json index file %[1]s: %[2]s"), indexPath, err) + return errors.New(i18n.Tr("loading json index file %[1]s: %[2]s", indexPath, err)) } for _, p := range index.Packages { @@ -464,7 +481,7 @@ func (pmb *Builder) LoadPackageIndex(URL *url.URL) error { func (pmb *Builder) LoadPackageIndexFromFile(indexPath *paths.Path) (*packageindex.Index, error) { index, err := packageindex.LoadIndex(indexPath) if err != nil { - return nil, fmt.Errorf(tr("loading json index file %[1]s: %[2]s"), indexPath, err) + return nil, errors.New(i18n.Tr("loading json index file %[1]s: %[2]s", indexPath, err)) } index.MergeIntoPackages(pmb.packages) @@ -478,7 +495,7 @@ func (pme *Explorer) Package(name string) *PackageActions { var err error thePackage := pme.packages[name] if thePackage == nil { - err = fmt.Errorf(tr("package '%s' not found"), name) + err = errors.New(i18n.Tr("package '%s' not found", name)) } return &PackageActions{ aPackage: thePackage, @@ -504,7 +521,7 @@ func (pa *PackageActions) Tool(name string) *ToolActions { tool = pa.aPackage.Tools[name] if tool == nil { - err = fmt.Errorf(tr("tool '%[1]s' not found in package '%[2]s'"), name, pa.aPackage.Name) + err = errors.New(i18n.Tr("tool '%[1]s' not found in package '%[2]s'", name, pa.aPackage.Name)) } } return &ToolActions{ @@ -554,7 +571,7 @@ func (ta *ToolActions) Release(version *semver.RelaxedVersion) *ToolReleaseActio } release := ta.tool.FindReleaseWithRelaxedVersion(version) if release == nil { - return &ToolReleaseActions{forwardError: fmt.Errorf(tr("release %[1]s not found for tool %[2]s"), version, ta.tool.String())} + return &ToolReleaseActions{forwardError: errors.New(i18n.Tr("release %[1]s not found for tool %[2]s", version, ta.tool))} } return &ToolReleaseActions{release: release} } @@ -584,8 +601,7 @@ func (pme *Explorer) GetInstalledPlatformRelease(platform *cores.Platform) *core } debug := func(msg string, pl *cores.PlatformRelease) { - pme.log.WithField("bundle", pl.IsIDEBundled). - WithField("version", pl.Version). + pme.log.WithField("version", pl.Version). WithField("managed", pme.IsManagedPlatformRelease(pl)). Debugf("%s: %s", msg, pl) } @@ -597,20 +613,20 @@ func (pme *Explorer) GetInstalledPlatformRelease(platform *cores.Platform) *core for _, candidate := range releases[1:] { candidateIsManaged := pme.IsManagedPlatformRelease(candidate) debug("candidate", candidate) - // TODO: Disentangle this algorithm and make it more straightforward - if bestIsManaged == candidateIsManaged { - if best.IsIDEBundled == candidate.IsIDEBundled { - if candidate.Version.GreaterThan(best.Version) { - best = candidate - } - } - if best.IsIDEBundled && !candidate.IsIDEBundled { + if !candidateIsManaged && !bestIsManaged { + if candidate.Version.GreaterThan(best.Version) { best = candidate } + continue + } + if !candidateIsManaged { + continue } - if !bestIsManaged && candidateIsManaged { + if !bestIsManaged { best = candidate bestIsManaged = true + } else if candidate.Version.GreaterThan(best.Version) { + best = candidate } debug("current best", best) } @@ -684,7 +700,7 @@ func (pme *Explorer) FindToolsRequiredFromPlatformRelease(platform *cores.Platfo pme.log.WithField("tool", toolDep).Debugf("Required tool") tool := pme.FindToolDependency(toolDep) if tool == nil { - return nil, fmt.Errorf(tr("tool release not found: %s"), toolDep) + return nil, errors.New(i18n.Tr("tool release not found: %s", toolDep)) } requiredTools = append(requiredTools, tool) delete(foundTools, tool.Tool.Name) @@ -695,7 +711,7 @@ func (pme *Explorer) FindToolsRequiredFromPlatformRelease(platform *cores.Platfo pme.log.WithField("discovery", discoveryDep).Infof("Required discovery") tool := pme.FindDiscoveryDependency(discoveryDep) if tool == nil { - return nil, fmt.Errorf(tr("discovery release not found: %s"), discoveryDep) + return nil, errors.New(i18n.Tr("discovery release not found: %s", discoveryDep)) } requiredTools = append(requiredTools, tool) delete(foundTools, tool.Tool.Name) @@ -706,7 +722,7 @@ func (pme *Explorer) FindToolsRequiredFromPlatformRelease(platform *cores.Platfo pme.log.WithField("monitor", monitorDep).Infof("Required monitor") tool := pme.FindMonitorDependency(monitorDep) if tool == nil { - return nil, fmt.Errorf(tr("monitor release not found: %s"), monitorDep) + return nil, errors.New(i18n.Tr("monitor release not found: %s", monitorDep)) } requiredTools = append(requiredTools, tool) delete(foundTools, tool.Tool.Name) @@ -790,7 +806,7 @@ func (pme *Explorer) FindToolsRequiredForBuild(platform, buildPlatform *cores.Pl pme.log.WithField("tool", toolDep).Debugf("Required tool") tool := pme.FindToolDependency(toolDep) if tool == nil { - return nil, fmt.Errorf(tr("tool release not found: %s"), toolDep) + return nil, errors.New(i18n.Tr("tool release not found: %s", toolDep)) } requiredTools = append(requiredTools, tool) delete(allToolsAlternatives, tool.Tool.Name) @@ -842,7 +858,7 @@ func (pme *Explorer) FindMonitorDependency(discovery *cores.MonitorDependency) * // NormalizeFQBN return a normalized copy of the given FQBN, that is the same // FQBN but with the unneeded or invalid options removed. -func (pme *Explorer) NormalizeFQBN(fqbn *cores.FQBN) (*cores.FQBN, error) { +func (pme *Explorer) NormalizeFQBN(fqbn *fqbn.FQBN) (*fqbn.FQBN, error) { _, _, board, _, _, err := pme.ResolveFQBN(fqbn) if err != nil { return nil, err @@ -862,3 +878,11 @@ func (pme *Explorer) NormalizeFQBN(fqbn *cores.FQBN) (*cores.FQBN, error) { } return normalizedFqbn, nil } + +// Dirty returns true if one of the loaded platforms needs to be re-initialized +// due to file changes in the platform releases. +func (pme *Explorer) Dirty() bool { + return slices.ContainsFunc( + pme.InstalledPlatformReleases(), + (*cores.PlatformRelease).Dirty) +} diff --git a/arduino/cores/packagemanager/package_manager_test.go b/internal/arduino/cores/packagemanager/package_manager_test.go similarity index 87% rename from arduino/cores/packagemanager/package_manager_test.go rename to internal/arduino/cores/packagemanager/package_manager_test.go index c02fa34eaa6..daef6987191 100644 --- a/arduino/cores/packagemanager/package_manager_test.go +++ b/internal/arduino/cores/packagemanager/package_manager_test.go @@ -17,17 +17,20 @@ package packagemanager import ( "fmt" + "net/http" "net/url" "os" "runtime" "strings" "testing" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/pkg/fqbn" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" "github.com/stretchr/testify/require" + "go.bug.st/downloader/v2" + "go.bug.st/f" semver "go.bug.st/relaxed-semver" ) @@ -38,7 +41,7 @@ var dataDir1 = paths.New("testdata", "data_dir_1") var extraHardware = paths.New("testdata", "extra_hardware") func TestFindBoardWithFQBN(t *testing.T) { - pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + pmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pm := pmb.Build() pme, release := pm.NewExplorer() @@ -56,7 +59,7 @@ func TestFindBoardWithFQBN(t *testing.T) { func TestResolveFQBN(t *testing.T) { // Pass nil, since these paths are only used for installing - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) // Hardware from main packages directory pmb.LoadHardwareFromDirectory(dataDir1.Join("packages")) // This contains the arduino:avr core @@ -69,7 +72,7 @@ func TestResolveFQBN(t *testing.T) { t.Run("NormalizeFQBN", func(t *testing.T) { testNormalization := func(in, expected string) { - fqbn, err := cores.ParseFQBN(in) + fqbn, err := fqbn.Parse(in) require.Nil(t, err) require.NotNil(t, fqbn) normalized, err := pme.NormalizeFQBN(fqbn) @@ -92,7 +95,7 @@ func TestResolveFQBN(t *testing.T) { }) t.Run("BoardAndBuildPropertiesArduinoUno", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("arduino:avr:uno") + fqbn, err := fqbn.Parse("arduino:avr:uno") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -113,7 +116,7 @@ func TestResolveFQBN(t *testing.T) { }) t.Run("BoardAndBuildPropertiesArduinoMega", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("arduino:avr:mega") + fqbn, err := fqbn.Parse("arduino:avr:mega") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -129,7 +132,7 @@ func TestResolveFQBN(t *testing.T) { }) t.Run("BoardAndBuildPropertiesArduinoMegaWithNonDefaultCpuOption", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("arduino:avr:mega:cpu=atmega1280") + fqbn, err := fqbn.Parse("arduino:avr:mega:cpu=atmega1280") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -147,7 +150,7 @@ func TestResolveFQBN(t *testing.T) { }) t.Run("BoardAndBuildPropertiesArduinoMegaWithDefaultCpuOption", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("arduino:avr:mega:cpu=atmega2560") + fqbn, err := fqbn.Parse("arduino:avr:mega:cpu=atmega2560") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -167,7 +170,7 @@ func TestResolveFQBN(t *testing.T) { t.Run("BoardAndBuildPropertiesForReferencedArduinoUno", func(t *testing.T) { // Test a board referenced from the main AVR arduino platform - fqbn, err := cores.ParseFQBN("referenced:avr:uno") + fqbn, err := fqbn.Parse("referenced:avr:uno") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -185,7 +188,7 @@ func TestResolveFQBN(t *testing.T) { }) t.Run("BoardAndBuildPropertiesForArduinoDue", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("arduino:sam:arduino_due_x") + fqbn, err := fqbn.Parse("arduino:sam:arduino_due_x") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -200,7 +203,7 @@ func TestResolveFQBN(t *testing.T) { }) t.Run("BoardAndBuildPropertiesForCustomArduinoYun", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("my_avr_platform:avr:custom_yun") + fqbn, err := fqbn.Parse("my_avr_platform:avr:custom_yun") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -216,7 +219,7 @@ func TestResolveFQBN(t *testing.T) { }) t.Run("BoardAndBuildPropertiesForWatterotCore", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("watterott:avr:attiny841:core=spencekonde,info=info") + fqbn, err := fqbn.Parse("watterott:avr:attiny841:core=spencekonde,info=info") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -234,7 +237,7 @@ func TestResolveFQBN(t *testing.T) { t.Run("BoardAndBuildPropertiesForReferencedFeatherM0", func(t *testing.T) { // Test a board referenced from the Adafruit SAMD core (this tests // deriving where the package and core name are different) - fqbn, err := cores.ParseFQBN("referenced:samd:feather_m0") + fqbn, err := fqbn.Parse("referenced:samd:feather_m0") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -253,7 +256,7 @@ func TestResolveFQBN(t *testing.T) { t.Run("BoardAndBuildPropertiesForNonExistentPackage", func(t *testing.T) { // Test a board referenced from a non-existent package - fqbn, err := cores.ParseFQBN("referenced:avr:dummy_invalid_package") + fqbn, err := fqbn.Parse("referenced:avr:dummy_invalid_package") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -270,7 +273,7 @@ func TestResolveFQBN(t *testing.T) { t.Run("BoardAndBuildPropertiesForNonExistentArchitecture", func(t *testing.T) { // Test a board referenced from a non-existent platform/architecture - fqbn, err := cores.ParseFQBN("referenced:avr:dummy_invalid_platform") + fqbn, err := fqbn.Parse("referenced:avr:dummy_invalid_platform") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -288,7 +291,7 @@ func TestResolveFQBN(t *testing.T) { t.Run("BoardAndBuildPropertiesForNonExistentCore", func(t *testing.T) { // Test a board referenced from a non-existent core // Note that ResolveFQBN does not actually check this currently - fqbn, err := cores.ParseFQBN("referenced:avr:dummy_invalid_core") + fqbn, err := fqbn.Parse("referenced:avr:dummy_invalid_core") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -306,7 +309,7 @@ func TestResolveFQBN(t *testing.T) { }) t.Run("AddBuildBoardPropertyIfMissing", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("my_avr_platform:avr:mymega") + fqbn, err := fqbn.Parse("my_avr_platform:avr:mymega") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -324,7 +327,7 @@ func TestResolveFQBN(t *testing.T) { }) t.Run("AddBuildBoardPropertyIfNotMissing", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("my_avr_platform:avr:mymega:cpu=atmega1280") + fqbn, err := fqbn.Parse("my_avr_platform:avr:mymega:cpu=atmega1280") require.Nil(t, err) require.NotNil(t, fqbn) pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn) @@ -341,7 +344,7 @@ func TestResolveFQBN(t *testing.T) { } func TestBoardOptionsFunctions(t *testing.T) { - pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + pmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pm := pmb.Build() pme, release := pm.NewExplorer() @@ -381,7 +384,7 @@ func TestBoardOptionsFunctions(t *testing.T) { } func TestBoardOrdering(t *testing.T) { - pmb := NewBuilder(dataDir1, dataDir1.Join("packages"), nil, nil, "") + pmb := NewBuilder(dataDir1, dataDir1.Join("packages"), nil, nil, nil, "", downloader.GetDefaultConfig()) _ = pmb.LoadHardwareFromDirectories(paths.NewPathList(dataDir1.Join("packages").String())) pm := pmb.Build() pme, release := pm.NewExplorer() @@ -432,13 +435,14 @@ func TestBoardOrdering(t *testing.T) { func TestFindToolsRequiredForBoard(t *testing.T) { t.Setenv("ARDUINO_DATA_DIR", dataDir1.String()) - configuration.Settings = configuration.Init("") pmb := NewBuilder( dataDir1, - configuration.PackagesDir(configuration.Settings), - configuration.DownloadsDir(configuration.Settings), + dataDir1.Join("packages"), + nil, + dataDir1.Join("staging"), dataDir1, "test", + downloader.GetDefaultConfig(), ) loadIndex := func(addr string) { @@ -566,8 +570,54 @@ func TestFindToolsRequiredForBoard(t *testing.T) { require.Equal(t, bossac18.InstallDir.String(), uploadProperties.Get("runtime.tools.bossac.path")) } +func TestIndexMerger(t *testing.T) { + t.Setenv("ARDUINO_DATA_DIR", dataDir1.String()) + pmb := NewBuilder( + dataDir1, + dataDir1.Join("packages"), + nil, + dataDir1.Join("staging"), + dataDir1, + "test", + downloader.GetDefaultConfig(), + ) + + loadIndex := func(addr string) { + res, err := url.Parse(addr) + require.NoError(t, err) + require.NoError(t, pmb.LoadPackageIndex(res)) + } + loadIndex("https://test.com/package_with_regular_dfu_util_index.json") // this is not downloaded, it just picks the "local cached" file package_test_index.json + loadIndex("https://test.com/package_with_empty_dfu_util_index.json") // this is not downloaded, it just picks the "local cached" file package_test_index.json + + // We ignore the errors returned since they might not be necessarily blocking + // but just warnings for the user, like in the case a board is not loaded + // because of malformed menus + pmb.LoadHardware() + pm := pmb.Build() + pme, release := pm.NewExplorer() + defer release() + + dfu_util := pme.GetTool("arduino:dfu-util") + require.NotNil(t, dfu_util) + dfu_release := dfu_util.GetOrCreateRelease(semver.ParseRelaxed("0.11.0-arduino5")) + require.NotNil(t, dfu_release) + require.Len(t, dfu_release.Flavors, 6) + + test_tool := pme.GetTool("arduino:test-tool") + require.NotNil(t, test_tool) + test_tool_release := test_tool.GetOrCreateRelease(semver.ParseRelaxed("1.0.0")) + require.NotNil(t, test_tool_release) + // Check that the new entry has been added + require.Len(t, test_tool_release.Flavors, 2) + require.Equal(t, test_tool_release.Flavors[1].OS, "arm-linux-gnueabihf") + require.Equal(t, test_tool_release.Flavors[1].Resource.URL, "http://downloads.arduino.cc/tools/dfu-util-0.11-arduino5-linux_arm.tar.gz") + // Check that the invalid entry did not replace existing one + require.NotEqual(t, test_tool_release.Flavors[0].Resource.URL, "INVALID") +} + func TestIdentifyBoard(t *testing.T) { - pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + pmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pm := pmb.Build() pme, release := pm.NewExplorer() @@ -594,12 +644,12 @@ func TestIdentifyBoard(t *testing.T) { func TestPackageManagerClear(t *testing.T) { // Create a PackageManager and load the harware - pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + pmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) pmb.LoadHardwareFromDirectory(customHardware) pm := pmb.Build() // Creates another PackageManager but don't load the hardware - emptyPmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test") + emptyPmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloader.GetDefaultConfig()) emptyPm := emptyPmb.Build() // Verifies they're not equal @@ -621,7 +671,7 @@ func TestFindToolsRequiredFromPlatformRelease(t *testing.T) { require.NoError(t, err) defer fakePath.RemoveAll() - pmb := NewBuilder(fakePath, fakePath, fakePath, fakePath, "test") + pmb := NewBuilder(fakePath, fakePath, nil, fakePath, fakePath, "test", downloader.GetDefaultConfig()) pack := pmb.GetOrCreatePackage("arduino") { @@ -742,8 +792,9 @@ func TestFindToolsRequiredFromPlatformRelease(t *testing.T) { } func TestFindPlatformReleaseDependencies(t *testing.T) { - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) pmb.LoadPackageIndexFromFile(paths.New("testdata", "package_tooltest_index.json")) + pmb.calculateCompatibleReleases() pm := pmb.Build() pme, release := pm.NewExplorer() defer release() @@ -757,7 +808,7 @@ func TestFindPlatformReleaseDependencies(t *testing.T) { func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) { // Pass nil, since these paths are only used for installing - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) // Hardware from main packages directory pmb.LoadHardwareFromDirectory(dataDir1.Join("packages")) pm := pmb.Build() @@ -765,7 +816,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) { defer release() { - fqbn, err := cores.ParseFQBN("esp32:esp32:esp32") + fqbn, err := fqbn.Parse("esp32:esp32:esp32") require.NoError(t, err) require.NotNil(t, fqbn) _, platformRelease, board, _, _, err := pme.ResolveFQBN(fqbn) @@ -788,7 +839,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) { require.Equal(t, "{network_cmd} -i \"{upload.port.address}\" -p \"{upload.port.properties.port}\" \"--auth={upload.field.password}\" -f \"{build.path}/{build.project_name}.bin\"", platformProps.Get("tools.esptool__pluggable_network.upload.pattern")) } { - fqbn, err := cores.ParseFQBN("esp8266:esp8266:generic") + fqbn, err := fqbn.Parse("esp8266:esp8266:generic") require.NoError(t, err) require.NotNil(t, fqbn) _, platformRelease, board, _, _, err := pme.ResolveFQBN(fqbn) @@ -810,7 +861,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) { require.Equal(t, "\"{network_cmd}\" -I \"{runtime.platform.path}/tools/espota.py\" -i \"{upload.port.address}\" -p \"{upload.port.properties.port}\" \"--auth={upload.field.password}\" -f \"{build.path}/{build.project_name}.bin\"", platformProps.Get("tools.esptool__pluggable_network.upload.pattern")) } { - fqbn, err := cores.ParseFQBN("arduino:avr:uno") + fqbn, err := fqbn.Parse("arduino:avr:uno") require.NoError(t, err) require.NotNil(t, fqbn) _, platformRelease, board, _, _, err := pme.ResolveFQBN(fqbn) @@ -827,7 +878,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) { func TestVariantAndCoreSelection(t *testing.T) { // Pass nil, since these paths are only used for installing - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) // Hardware from main packages directory pmb.LoadHardwareFromDirectory(dataDir1.Join("packages")) pm := pmb.Build() @@ -840,7 +891,7 @@ func TestVariantAndCoreSelection(t *testing.T) { // build.core test suite t.Run("CoreWithoutSubstitutions", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("test2:avr:test") + fqbn, err := fqbn.Parse("test2:avr:test") require.NoError(t, err) require.NotNil(t, fqbn) _, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn) @@ -849,7 +900,7 @@ func TestVariantAndCoreSelection(t *testing.T) { requireSameFile(buildProps.GetPath("build.core.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "cores", "arduino")) }) t.Run("CoreWithSubstitutions", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("test2:avr:test2") + fqbn, err := fqbn.Parse("test2:avr:test2") require.NoError(t, err) require.NotNil(t, fqbn) _, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn) @@ -859,7 +910,7 @@ func TestVariantAndCoreSelection(t *testing.T) { requireSameFile(buildProps.GetPath("build.core.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "cores", "arduino")) }) t.Run("CoreWithSubstitutionsAndDefaultOption", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("test2:avr:test3") + fqbn, err := fqbn.Parse("test2:avr:test3") require.NoError(t, err) require.NotNil(t, fqbn) _, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn) @@ -869,7 +920,7 @@ func TestVariantAndCoreSelection(t *testing.T) { requireSameFile(buildProps.GetPath("build.core.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "cores", "arduino")) }) t.Run("CoreWithSubstitutionsAndNonDefaultOption", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("test2:avr:test3:core=referenced") + fqbn, err := fqbn.Parse("test2:avr:test3:core=referenced") require.NoError(t, err) require.NotNil(t, fqbn) _, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn) @@ -881,7 +932,7 @@ func TestVariantAndCoreSelection(t *testing.T) { // build.variant test suite t.Run("VariantWithoutSubstitutions", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("test2:avr:test4") + fqbn, err := fqbn.Parse("test2:avr:test4") require.NoError(t, err) require.NotNil(t, fqbn) _, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn) @@ -890,7 +941,7 @@ func TestVariantAndCoreSelection(t *testing.T) { requireSameFile(buildProps.GetPath("build.variant.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "variants", "standard")) }) t.Run("VariantWithSubstitutions", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("test2:avr:test5") + fqbn, err := fqbn.Parse("test2:avr:test5") require.NoError(t, err) require.NotNil(t, fqbn) _, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn) @@ -900,7 +951,7 @@ func TestVariantAndCoreSelection(t *testing.T) { requireSameFile(buildProps.GetPath("build.variant.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "variants", "standard")) }) t.Run("VariantWithSubstitutionsAndDefaultOption", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("test2:avr:test6") + fqbn, err := fqbn.Parse("test2:avr:test6") require.NoError(t, err) require.NotNil(t, fqbn) _, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn) @@ -910,7 +961,7 @@ func TestVariantAndCoreSelection(t *testing.T) { requireSameFile(buildProps.GetPath("build.variant.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "variants", "standard")) }) t.Run("VariantWithSubstitutionsAndNonDefaultOption", func(t *testing.T) { - fqbn, err := cores.ParseFQBN("test2:avr:test6:variant=referenced") + fqbn, err := fqbn.Parse("test2:avr:test6:variant=referenced") require.NoError(t, err) require.NotNil(t, fqbn) _, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn) @@ -922,7 +973,7 @@ func TestVariantAndCoreSelection(t *testing.T) { } func TestRunScript(t *testing.T) { - pmb := NewBuilder(nil, nil, nil, nil, "test") + pmb := NewBuilder(nil, nil, nil, nil, nil, "test", downloader.GetDefaultConfig()) pm := pmb.Build() pme, release := pm.NewExplorer() defer release() @@ -976,3 +1027,20 @@ func TestRunScript(t *testing.T) { }) } } + +func TestCorrectlyUsesDownloaderConfig(t *testing.T) { + proxyURL := f.Must(url.Parse("http://proxy:test@test.test/404:42")) + + downloaderCfg := downloader.Config{ + HttpClient: http.Client{ + Transport: &http.Transport{ + Proxy: http.ProxyURL(proxyURL), + }, + Timeout: 123, + }, + } + pmb := NewBuilder(customHardware, customHardware, nil, customHardware, customHardware, "test", downloaderCfg) + pmb.LoadHardwareFromDirectory(customHardware) + pm := pmb.Build() + require.Equal(t, downloaderCfg, pm.downloaderConfig) +} diff --git a/arduino/cores/packagemanager/profiles.go b/internal/arduino/cores/packagemanager/profiles.go similarity index 50% rename from arduino/cores/packagemanager/profiles.go rename to internal/arduino/cores/packagemanager/profiles.go index 423bfdaeffa..d11682b32c0 100644 --- a/arduino/cores/packagemanager/profiles.go +++ b/internal/arduino/cores/packagemanager/profiles.go @@ -16,15 +16,18 @@ package packagemanager import ( + "context" + "errors" "fmt" "net/url" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/arduino/sketch" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/sketch" + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" @@ -32,7 +35,7 @@ import ( // LoadHardwareForProfile load the hardware platforms for the given profile. // If installMissing is true then possibly missing tools and platforms will be downloaded and installed. -func (pmb *Builder) LoadHardwareForProfile(p *sketch.Profile, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) []error { +func (pmb *Builder) LoadHardwareForProfile(ctx context.Context, p *sketch.Profile, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, settings *configuration.Settings) []error { pmb.profile = p // Load required platforms @@ -40,12 +43,12 @@ func (pmb *Builder) LoadHardwareForProfile(p *sketch.Profile, installMissing boo var platformReleases []*cores.PlatformRelease indexURLs := map[string]*url.URL{} for _, platformRef := range p.Platforms { - if platformRelease, err := pmb.loadProfilePlatform(platformRef, installMissing, downloadCB, taskCB); err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("loading required platform %s", platformRef), err)) + if platformRelease, err := pmb.loadProfilePlatform(ctx, platformRef, installMissing, downloadCB, taskCB, settings); err != nil { + merr = append(merr, fmt.Errorf("%s: %w", i18n.Tr("loading required platform %s", platformRef), err)) logrus.WithField("platform", platformRef).WithError(err).Debugf("Error loading platform for profile") } else { platformReleases = append(platformReleases, platformRelease) - indexURLs[platformRelease.Platform.Name] = platformRef.PlatformIndexURL + indexURLs[platformRelease.Name] = platformRef.PlatformIndexURL logrus.WithField("platform", platformRef).Debugf("Loaded platform for profile") } } @@ -56,8 +59,8 @@ func (pmb *Builder) LoadHardwareForProfile(p *sketch.Profile, installMissing boo for _, toolDep := range platformRelease.ToolDependencies { indexURL := indexURLs[toolDep.ToolPackager] - if err := pmb.loadProfileTool(toolDep, indexURL, installMissing, downloadCB, taskCB); err != nil { - merr = append(merr, fmt.Errorf("%s: %w", tr("loading required tool %s", toolDep), err)) + if err := pmb.loadProfileTool(ctx, toolDep, indexURL, installMissing, downloadCB, taskCB, settings); err != nil { + merr = append(merr, fmt.Errorf("%s: %w", i18n.Tr("loading required tool %s", toolDep), err)) logrus.WithField("tool", toolDep).WithField("index_url", indexURL).WithError(err).Debugf("Error loading tool for profile") } else { logrus.WithField("tool", toolDep).WithField("index_url", indexURL).Debugf("Loaded tool for profile") @@ -68,52 +71,48 @@ func (pmb *Builder) LoadHardwareForProfile(p *sketch.Profile, installMissing boo return merr } -func (pmb *Builder) loadProfilePlatform(platformRef *sketch.ProfilePlatformReference, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (*cores.PlatformRelease, error) { +func (pmb *Builder) loadProfilePlatform(ctx context.Context, platformRef *sketch.ProfilePlatformReference, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, settings *configuration.Settings) (*cores.PlatformRelease, error) { targetPackage := pmb.packages.GetOrCreatePackage(platformRef.Packager) platform := targetPackage.GetOrCreatePlatform(platformRef.Architecture) release := platform.GetOrCreateRelease(platformRef.Version) uid := platformRef.InternalUniqueIdentifier() - destDir := configuration.ProfilesCacheDir(configuration.Settings).Join(uid) + destDir := settings.ProfilesCacheDir().Join(uid) if !destDir.IsDir() && installMissing { // Try installing the missing platform - if err := pmb.installMissingProfilePlatform(platformRef, destDir, downloadCB, taskCB); err != nil { + if err := pmb.installMissingProfilePlatform(ctx, platformRef, destDir, downloadCB, taskCB); err != nil { return nil, err } } return release, pmb.loadPlatformRelease(release, destDir) } -func (pmb *Builder) installMissingProfilePlatform(platformRef *sketch.ProfilePlatformReference, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { +func (pmb *Builder) installMissingProfilePlatform(ctx context.Context, platformRef *sketch.ProfilePlatformReference, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { // Instantiate a temporary package manager only for platform installation _ = pmb.tempDir.MkdirAll() tmp, err := paths.MkTempDir(pmb.tempDir.String(), "") if err != nil { return fmt.Errorf("installing missing platform: could not create temp dir %s", err) } - tmpPmb := NewBuilder(tmp, tmp, pmb.DownloadDir, tmp, pmb.userAgent) + tmpPmb := NewBuilder(tmp, tmp, nil, pmb.DownloadDir, tmp, pmb.userAgent, pmb.downloaderConfig) defer tmp.RemoveAll() // Download the main index and parse it - taskCB(&rpc.TaskProgress{Name: tr("Downloading platform %s", platformRef)}) + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading platform %s", platformRef)}) defaultIndexURL, _ := url.Parse(globals.DefaultIndexURL) indexesToDownload := []*url.URL{defaultIndexURL} if platformRef.PlatformIndexURL != nil { indexesToDownload = append(indexesToDownload, platformRef.PlatformIndexURL) } for _, indexURL := range indexesToDownload { - if err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error downloading %s", indexURL)}) - return &arduino.FailedDownloadError{Message: tr("Error downloading %s", indexURL), Cause: err} - } indexResource := resources.IndexResource{URL: indexURL} - if err := indexResource.Download(tmpPmb.IndexDir, downloadCB); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error downloading %s", indexURL)}) - return &arduino.FailedDownloadError{Message: tr("Error downloading %s", indexURL), Cause: err} + if err := indexResource.Download(ctx, tmpPmb.IndexDir, downloadCB, pmb.downloaderConfig); err != nil { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error downloading %s", indexURL)}) + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Error downloading %s", indexURL), Cause: err} } if err := tmpPmb.LoadPackageIndex(indexURL); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error loading index %s", indexURL)}) - return &arduino.FailedInstallError{Message: tr("Error loading index %s", indexURL), Cause: err} + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error loading index %s", indexURL)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error loading index %s", indexURL), Cause: err} } } @@ -125,36 +124,36 @@ func (pmb *Builder) installMissingProfilePlatform(platformRef *sketch.ProfilePla tmpPme, tmpRelease := tmpPm.NewExplorer() defer tmpRelease() - if err := tmpPme.DownloadPlatformRelease(tmpPlatformRelease, nil, downloadCB); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error downloading platform %s", tmpPlatformRelease)}) - return &arduino.FailedInstallError{Message: tr("Error downloading platform %s", tmpPlatformRelease), Cause: err} + if err := tmpPme.DownloadPlatformRelease(ctx, tmpPlatformRelease, downloadCB); err != nil { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error downloading platform %s", tmpPlatformRelease)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error downloading platform %s", tmpPlatformRelease), Cause: err} } taskCB(&rpc.TaskProgress{Completed: true}) // Perform install - taskCB(&rpc.TaskProgress{Name: tr("Installing platform %s", tmpPlatformRelease)}) - if err := tmpPme.InstallPlatformInDirectory(tmpPlatformRelease, destDir); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error installing platform %s", tmpPlatformRelease)}) - return &arduino.FailedInstallError{Message: tr("Error installing platform %s", tmpPlatformRelease), Cause: err} + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing platform %s", tmpPlatformRelease)}) + if err := tmpPme.InstallPlatformInDirectory(tmpPlatformRelease, destDir, resources.IntegrityCheckFull); err != nil { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error installing platform %s", tmpPlatformRelease)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error installing platform %s", tmpPlatformRelease), Cause: err} } taskCB(&rpc.TaskProgress{Completed: true}) return nil } -func (pmb *Builder) loadProfileTool(toolRef *cores.ToolDependency, indexURL *url.URL, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { +func (pmb *Builder) loadProfileTool(ctx context.Context, toolRef *cores.ToolDependency, indexURL *url.URL, installMissing bool, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB, settings *configuration.Settings) error { targetPackage := pmb.packages.GetOrCreatePackage(toolRef.ToolPackager) tool := targetPackage.GetOrCreateTool(toolRef.ToolName) uid := toolRef.InternalUniqueIdentifier(indexURL) - destDir := configuration.ProfilesCacheDir(configuration.Settings).Join(uid) + destDir := settings.ProfilesCacheDir().Join(uid) if !destDir.IsDir() && installMissing { // Try installing the missing tool toolRelease := tool.GetOrCreateRelease(toolRef.ToolVersion) if toolRelease == nil { - return &arduino.InvalidVersionError{Cause: fmt.Errorf(tr("version %s not found", toolRef.ToolVersion))} + return &cmderrors.InvalidVersionError{Cause: errors.New(i18n.Tr("version %s not found", toolRef.ToolVersion))} } - if err := pmb.installMissingProfileTool(toolRelease, destDir, downloadCB, taskCB); err != nil { + if err := pmb.installMissingProfileTool(ctx, toolRelease, destDir, downloadCB, taskCB); err != nil { return err } } @@ -162,7 +161,7 @@ func (pmb *Builder) loadProfileTool(toolRef *cores.ToolDependency, indexURL *url return pmb.loadToolReleaseFromDirectory(tool, toolRef.ToolVersion, destDir) } -func (pmb *Builder) installMissingProfileTool(toolRelease *cores.ToolRelease, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { +func (pmb *Builder) installMissingProfileTool(ctx context.Context, toolRelease *cores.ToolRelease, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) error { // Instantiate a temporary package manager only for platform installation tmp, err := paths.MkTempDir(destDir.Parent().String(), "") if err != nil { @@ -173,20 +172,20 @@ func (pmb *Builder) installMissingProfileTool(toolRelease *cores.ToolRelease, de // Download the tool toolResource := toolRelease.GetCompatibleFlavour() if toolResource == nil { - return &arduino.InvalidVersionError{Cause: fmt.Errorf(tr("version %s not available for this operating system", toolRelease))} + return &cmderrors.InvalidVersionError{Cause: errors.New(i18n.Tr("version %s not available for this operating system", toolRelease))} } - taskCB(&rpc.TaskProgress{Name: tr("Downloading tool %s", toolRelease)}) - if err := toolResource.Download(pmb.DownloadDir, nil, toolRelease.String(), downloadCB, ""); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error downloading tool %s", toolRelease)}) - return &arduino.FailedInstallError{Message: tr("Error installing tool %s", toolRelease), Cause: err} + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Downloading tool %s", toolRelease)}) + if err := toolResource.Download(ctx, pmb.DownloadDir, pmb.downloaderConfig, toolRelease.String(), downloadCB, ""); err != nil { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error downloading tool %s", toolRelease)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error installing tool %s", toolRelease), Cause: err} } taskCB(&rpc.TaskProgress{Completed: true}) // Install tool - taskCB(&rpc.TaskProgress{Name: tr("Installing tool %s", toolRelease)}) - if err := toolResource.Install(pmb.DownloadDir, tmp, destDir); err != nil { - taskCB(&rpc.TaskProgress{Name: tr("Error installing tool %s", toolRelease)}) - return &arduino.FailedInstallError{Message: tr("Error installing tool %s", toolRelease), Cause: err} + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Installing tool %s", toolRelease)}) + if err := toolResource.Install(pmb.DownloadDir, tmp, destDir, resources.IntegrityCheckFull); err != nil { + taskCB(&rpc.TaskProgress{Name: i18n.Tr("Error installing tool %s", toolRelease)}) + return &cmderrors.FailedInstallError{Message: i18n.Tr("Error installing tool %s", toolRelease), Cause: err} } taskCB(&rpc.TaskProgress{Completed: true}) return nil diff --git a/arduino/cores/packagemanager/testdata/.gitignore b/internal/arduino/cores/packagemanager/testdata/.gitignore similarity index 100% rename from arduino/cores/packagemanager/testdata/.gitignore rename to internal/arduino/cores/packagemanager/testdata/.gitignore diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/arduino/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/arduino/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/platform.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/platform.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/arduino/sam/platform.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/esp8266/esp8266/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/esp8266/esp8266/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/esp8266/esp8266/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/esp8266/esp8266/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.cpp b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.cpp similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.cpp rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.cpp diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.h b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.h similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.h rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/SPI.h diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/keywords.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/keywords.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/keywords.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/keywords.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/library.properties b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/library.properties similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/library.properties rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/libraries/SPI/library.properties diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/platform.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/platform.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/my_avr_platform/avr/platform.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/test/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/test/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/test/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/test/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/platform.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/platform.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/platform.txt diff --git a/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/programmers.txt b/internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/custom_hardware/watterott/avr/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/package_adafruit_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_adafruit_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/package_adafruit_index.json rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/package_adafruit_index.json diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/package_esp32_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_esp32_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/package_esp32_index.json rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/package_esp32_index.json diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/package_esp8266com_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_esp8266com_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/package_esp8266com_index.json rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/package_esp8266com_index.json diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/package_test_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_test_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/package_test_index.json rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/package_test_index.json diff --git a/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_with_empty_dfu_util_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_with_empty_dfu_util_index.json new file mode 100644 index 00000000000..36a120a3ccd --- /dev/null +++ b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_with_empty_dfu_util_index.json @@ -0,0 +1,41 @@ +{ + "packages": [ + { + "name": "arduino", + "maintainer": "Arduino", + "websiteURL": "http://www.arduino.cc/", + "email": "packages@arduino.cc", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "platforms": [], + "tools": [ + { + "name": "test-tool", + "version": "1.0.0", + "systems": [ + { + "host": "i386-apple-darwin11", + "url": "INVALID", + "archiveFileName": "INVALID", + "size": "100", + "checksum": "SHA-256:9e576c6e44f54b1e921a43ea77bcc08ec99e0e4e0905f4b9acf9ab2c979f0a22" + }, + { + "host": "arm-linux-gnueabihf", + "url": "http://downloads.arduino.cc/tools/dfu-util-0.11-arduino5-linux_arm.tar.gz", + "archiveFileName": "dfu-util-0.11-arduino5-linux_arm.tar.gz", + "size": "2512819", + "checksum": "SHA-256:acd4bd283fd408515279a44dd830499ad37b0767e8f2fde5c27e878ded909dc3" + } + ] + }, + { + "name": "dfu-util", + "version": "0.11.0-arduino5", + "systems": [] + } + ] + } + ] +} \ No newline at end of file diff --git a/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_with_regular_dfu_util_index.json b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_with_regular_dfu_util_index.json new file mode 100644 index 00000000000..e0f56808434 --- /dev/null +++ b/internal/arduino/cores/packagemanager/testdata/data_dir_1/package_with_regular_dfu_util_index.json @@ -0,0 +1,77 @@ +{ + "packages": [ + { + "name": "arduino", + "maintainer": "Arduino", + "websiteURL": "http://www.arduino.cc/", + "email": "packages@arduino.cc", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "platforms": [], + "tools": [ + { + "name": "test-tool", + "version": "1.0.0", + "systems": [ + { + "host": "i386-apple-darwin11", + "url": "http://downloads.arduino.cc/tools/dfu-util-0.11-arduino5-darwin_amd64.tar.gz", + "archiveFileName": "dfu-util-0.11-arduino5-darwin_amd64.tar.gz", + "size": "72429", + "checksum": "SHA-256:9e576c6e44f54b1e921a43ea77bcc08ec99e0e4e0905f4b9acf9ab2c979f0a22" + } + ] + }, + { + "name": "dfu-util", + "version": "0.11.0-arduino5", + "systems": [ + { + "host": "i386-apple-darwin11", + "url": "http://downloads.arduino.cc/tools/dfu-util-0.11-arduino5-darwin_amd64.tar.gz", + "archiveFileName": "dfu-util-0.11-arduino5-darwin_amd64.tar.gz", + "size": "72429", + "checksum": "SHA-256:9e576c6e44f54b1e921a43ea77bcc08ec99e0e4e0905f4b9acf9ab2c979f0a22" + }, + { + "host": "arm-linux-gnueabihf", + "url": "http://downloads.arduino.cc/tools/dfu-util-0.11-arduino5-linux_arm.tar.gz", + "archiveFileName": "dfu-util-0.11-arduino5-linux_arm.tar.gz", + "size": "2512819", + "checksum": "SHA-256:acd4bd283fd408515279a44dd830499ad37b0767e8f2fde5c27e878ded909dc3" + }, + { + "host": "aarch64-linux-gnu", + "url": "http://downloads.arduino.cc/tools/dfu-util-0.11-arduino5-linux_arm64.tar.gz", + "archiveFileName": "dfu-util-0.11-arduino5-linux_arm64.tar.gz", + "size": "2607592", + "checksum": "SHA-256:b3f46a65da0c2fed2449dc5a3351c3c74953a868aa7f8d99ba2bb8c418344fe9" + }, + { + "host": "x86_64-linux-gnu", + "url": "http://downloads.arduino.cc/tools/dfu-util-0.11-arduino5-linux_amd64.tar.gz", + "archiveFileName": "dfu-util-0.11-arduino5-linux_amd64.tar.gz", + "size": "2283425", + "checksum": "SHA-256:96c64c278561af806b585c123c85748926ad02b1aedc07e5578ca9bee2be0d2a" + }, + { + "host": "i686-linux-gnu", + "url": "http://downloads.arduino.cc/tools/dfu-util-0.11-arduino5-linux_386.tar.gz", + "archiveFileName": "dfu-util-0.11-arduino5-linux_386.tar.gz", + "size": "2524406", + "checksum": "SHA-256:9a707692261e5710ed79a6d8a4031ffd0bfe1e585216569934346e9b2d68d0c2" + }, + { + "host": "i686-mingw32", + "url": "http://downloads.arduino.cc/tools/dfu-util-0.11-arduino5-windows_386.tar.gz", + "archiveFileName": "dfu-util-0.11-arduino5-windows_386.tar.gz", + "size": "571340", + "checksum": "SHA-256:6451e16bf77600fe2436c8708ab4b75077c49997cf8bedf03221d9d6726bb641" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/keywords.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/keywords.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/keywords.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/keywords.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/platform.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/platform.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/platform.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/programmers.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/adafruit/hardware/samd/1.5.3/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/platform.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/platform.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/platform.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/programmers.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/hardware/avr/1.8.3/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS-Atmel/1.2.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS-Atmel/1.2.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS-Atmel/1.2.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS-Atmel/1.2.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS/4.5.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS/4.5.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS/4.5.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/CMSIS/4.5.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.7.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.7.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.7.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.7.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.8.0-48-gb176eee/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.8.0-48-gb176eee/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.8.0-48-gb176eee/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/bossac/1.8.0-48-gb176eee/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/openocd/0.9.0-arduino/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/openocd/0.9.0-arduino/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/openocd/0.9.0-arduino/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/arduino/tools/openocd/0.9.0-arduino/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/platform.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/platform.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/platform.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/programmers.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/hardware/esp32/1.0.0/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/esptool/2.3.1/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/esptool/2.3.1/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/esptool/2.3.1/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/esptool/2.3.1/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/mkspiffs/0.2.3/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/mkspiffs/0.2.3/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/mkspiffs/0.2.3/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/mkspiffs/0.2.3/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/platform.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/platform.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/platform.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/platform.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/programmers.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/programmers.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/programmers.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/hardware/esp8266/3.0.2/programmers.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/esptool/0.4.13/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/esptool/0.4.13/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/esptool/0.4.13/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/esptool/0.4.13/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/mkspiffs/0.2.0/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/mkspiffs/0.2.0/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/mkspiffs/0.2.0/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/mkspiffs/0.2.0/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/hardware/avr/1.1.0/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/hardware/avr/1.1.0/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/test/hardware/avr/1.1.0/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/hardware/avr/1.1.0/boards.txt diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/tools/bossac/1.7.5/.keep b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/tools/bossac/1.7.5/.keep similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/test/tools/bossac/1.7.5/.keep rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test/tools/bossac/1.7.5/.keep diff --git a/arduino/cores/packagemanager/testdata/data_dir_1/packages/test2/hardware/avr/1.0.0/boards.txt b/internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test2/hardware/avr/1.0.0/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/data_dir_1/packages/test2/hardware/avr/1.0.0/boards.txt rename to internal/arduino/cores/packagemanager/testdata/data_dir_1/packages/test2/hardware/avr/1.0.0/boards.txt diff --git a/arduino/cores/packagemanager/testdata/extra_hardware/referenced/avr/boards.txt b/internal/arduino/cores/packagemanager/testdata/extra_hardware/referenced/avr/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/extra_hardware/referenced/avr/boards.txt rename to internal/arduino/cores/packagemanager/testdata/extra_hardware/referenced/avr/boards.txt diff --git a/arduino/cores/packagemanager/testdata/extra_hardware/referenced/samd/boards.txt b/internal/arduino/cores/packagemanager/testdata/extra_hardware/referenced/samd/boards.txt similarity index 100% rename from arduino/cores/packagemanager/testdata/extra_hardware/referenced/samd/boards.txt rename to internal/arduino/cores/packagemanager/testdata/extra_hardware/referenced/samd/boards.txt diff --git a/arduino/cores/packagemanager/testdata/package_tooltest_index.json b/internal/arduino/cores/packagemanager/testdata/package_tooltest_index.json similarity index 100% rename from arduino/cores/packagemanager/testdata/package_tooltest_index.json rename to internal/arduino/cores/packagemanager/testdata/package_tooltest_index.json diff --git a/arduino/cores/programmers.go b/internal/arduino/cores/programmers.go similarity index 100% rename from arduino/cores/programmers.go rename to internal/arduino/cores/programmers.go diff --git a/arduino/cores/status.go b/internal/arduino/cores/status.go similarity index 85% rename from arduino/cores/status.go rename to internal/arduino/cores/status.go index 85517bf7a56..42ed1177e0a 100644 --- a/arduino/cores/status.go +++ b/internal/arduino/cores/status.go @@ -17,10 +17,10 @@ package cores import ( "errors" - "fmt" "slices" "strings" + "github.com/arduino/arduino-cli/internal/i18n" semver "go.bug.st/relaxed-semver" ) @@ -88,21 +88,21 @@ func (packages Packages) Names() []string { // GetPlatformReleaseToolDependencies returns the tool releases needed by the specified PlatformRelease func (packages Packages) GetPlatformReleaseToolDependencies(release *PlatformRelease) ([]*ToolRelease, error) { if release == nil { - return nil, errors.New(tr("release cannot be nil")) + return nil, errors.New(i18n.Tr("release cannot be nil")) } ret := []*ToolRelease{} for _, dep := range release.ToolDependencies { pkg, exists := packages[dep.ToolPackager] if !exists { - return nil, fmt.Errorf(tr("package %s not found"), dep.ToolPackager) + return nil, errors.New(i18n.Tr("package %s not found", dep.ToolPackager)) } tool, exists := pkg.Tools[dep.ToolName] if !exists { - return nil, fmt.Errorf(tr("tool %s not found"), dep.ToolName) + return nil, errors.New(i18n.Tr("tool %s not found", dep.ToolName)) } toolRelease, exists := tool.Releases[dep.ToolVersion.NormalizedString()] if !exists { - return nil, fmt.Errorf(tr("tool version %s not found"), dep.ToolVersion) + return nil, errors.New(i18n.Tr("tool version %s not found", dep.ToolVersion)) } ret = append(ret, toolRelease) } @@ -112,24 +112,24 @@ func (packages Packages) GetPlatformReleaseToolDependencies(release *PlatformRel // GetPlatformReleaseDiscoveryDependencies returns the discovery releases needed by the specified PlatformRelease func (packages Packages) GetPlatformReleaseDiscoveryDependencies(release *PlatformRelease) ([]*ToolRelease, error) { if release == nil { - return nil, fmt.Errorf(tr("release cannot be nil")) + return nil, errors.New(i18n.Tr("release cannot be nil")) } res := []*ToolRelease{} for _, discovery := range release.DiscoveryDependencies { pkg, exists := packages[discovery.Packager] if !exists { - return nil, fmt.Errorf(tr("package %s not found"), discovery.Packager) + return nil, errors.New(i18n.Tr("package %s not found", discovery.Packager)) } tool, exists := pkg.Tools[discovery.Name] if !exists { - return nil, fmt.Errorf(tr("tool %s not found"), discovery.Name) + return nil, errors.New(i18n.Tr("tool %s not found", discovery.Name)) } // We always want to use the latest available release for discoveries latestRelease := tool.LatestRelease() if latestRelease == nil { - return nil, fmt.Errorf(tr("can't find latest release of %s"), discovery.Name) + return nil, errors.New(i18n.Tr("can't find latest release of %s", discovery.Name)) } res = append(res, latestRelease) } @@ -139,24 +139,24 @@ func (packages Packages) GetPlatformReleaseDiscoveryDependencies(release *Platfo // GetPlatformReleaseMonitorDependencies returns the monitor releases needed by the specified PlatformRelease func (packages Packages) GetPlatformReleaseMonitorDependencies(release *PlatformRelease) ([]*ToolRelease, error) { if release == nil { - return nil, fmt.Errorf(tr("release cannot be nil")) + return nil, errors.New(i18n.Tr("release cannot be nil")) } res := []*ToolRelease{} for _, monitor := range release.MonitorDependencies { pkg, exists := packages[monitor.Packager] if !exists { - return nil, fmt.Errorf(tr("package %s not found"), monitor.Packager) + return nil, errors.New(i18n.Tr("package %s not found", monitor.Packager)) } tool, exists := pkg.Tools[monitor.Name] if !exists { - return nil, fmt.Errorf(tr("tool %s not found"), monitor.Name) + return nil, errors.New(i18n.Tr("tool %s not found", monitor.Name)) } // We always want to use the latest available release for monitors latestRelease := tool.LatestRelease() if latestRelease == nil { - return nil, fmt.Errorf(tr("can't find latest release of %s"), monitor.Name) + return nil, errors.New(i18n.Tr("can't find latest release of %s", monitor.Name)) } res = append(res, latestRelease) } diff --git a/arduino/cores/tools.go b/internal/arduino/cores/tools.go similarity index 86% rename from arduino/cores/tools.go rename to internal/arduino/cores/tools.go index 616e80090a3..b858e7eab62 100644 --- a/arduino/cores/tools.go +++ b/internal/arduino/cores/tools.go @@ -19,7 +19,7 @@ import ( "regexp" "runtime" - "github.com/arduino/arduino-cli/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/resources" "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" semver "go.bug.st/relaxed-semver" @@ -127,18 +127,19 @@ func (tr *ToolRelease) RuntimeProperties() *properties.Map { } var ( - regexpLinuxArm = regexp.MustCompile("arm.*-linux-gnueabihf") - regexpLinuxArm64 = regexp.MustCompile("(aarch64|arm64)-linux-gnu") - regexpLinux64 = regexp.MustCompile("x86_64-.*linux-gnu") - regexpLinux32 = regexp.MustCompile("i[3456]86-.*linux-gnu") - regexpWindows32 = regexp.MustCompile("i[3456]86-.*(mingw32|cygwin)") - regexpWindows64 = regexp.MustCompile("(amd64|x86_64)-.*(mingw32|cygwin)") - regexpMac64 = regexp.MustCompile("x86_64-apple-darwin.*") - regexpMac32 = regexp.MustCompile("i[3456]86-apple-darwin.*") - regexpMacArm64 = regexp.MustCompile("arm64-apple-darwin.*") - regexpFreeBSDArm = regexp.MustCompile("arm.*-freebsd[0-9]*") - regexpFreeBSD32 = regexp.MustCompile("i?[3456]86-freebsd[0-9]*") - regexpFreeBSD64 = regexp.MustCompile("amd64-freebsd[0-9]*") + regexpLinuxArm = regexp.MustCompile("arm.*-linux-gnueabihf") + regexpLinuxArm64 = regexp.MustCompile("(aarch64|arm64)-linux-gnu") + regexpLinuxRiscv64 = regexp.MustCompile("riscv64-linux-gnu") + regexpLinux64 = regexp.MustCompile("x86_64-.*linux-gnu") + regexpLinux32 = regexp.MustCompile("i[3456]86-.*linux-gnu") + regexpWindows32 = regexp.MustCompile("i[3456]86-.*(mingw32|cygwin)") + regexpWindows64 = regexp.MustCompile("(amd64|x86_64)-.*(mingw32|cygwin)") + regexpMac64 = regexp.MustCompile("x86_64-apple-darwin.*") + regexpMac32 = regexp.MustCompile("i[3456]86-apple-darwin.*") + regexpMacArm64 = regexp.MustCompile("arm64-apple-darwin.*") + regexpFreeBSDArm = regexp.MustCompile("arm.*-freebsd[0-9]*") + regexpFreeBSD32 = regexp.MustCompile("i?[3456]86-freebsd[0-9]*") + regexpFreeBSD64 = regexp.MustCompile("amd64-freebsd[0-9]*") ) func (f *Flavor) isExactMatchWith(osName, osArch string) bool { @@ -151,6 +152,8 @@ func (f *Flavor) isExactMatchWith(osName, osArch string) bool { return regexpLinuxArm.MatchString(f.OS) case "linux,arm64": return regexpLinuxArm64.MatchString(f.OS) + case "linux,riscv64": + return regexpLinuxRiscv64.MatchString(f.OS) case "linux,amd64": return regexpLinux64.MatchString(f.OS) case "linux,386": diff --git a/arduino/cores/tools_test.go b/internal/arduino/cores/tools_test.go similarity index 96% rename from arduino/cores/tools_test.go rename to internal/arduino/cores/tools_test.go index 2597e1a9a66..f4a3097a3ca 100644 --- a/arduino/cores/tools_test.go +++ b/internal/arduino/cores/tools_test.go @@ -18,7 +18,7 @@ package cores import ( "testing" - "github.com/arduino/arduino-cli/arduino/resources" + "github.com/arduino/arduino-cli/internal/arduino/resources" "github.com/stretchr/testify/require" ) @@ -34,6 +34,7 @@ func TestFlavorCompatibility(t *testing.T) { linuxArm := &os{"linux", "arm"} linuxArmbe := &os{"linux", "armbe"} linuxArm64 := &os{"linux", "arm64"} + linuxRiscv64 := &os{"linux", "riscv64"} darwin32 := &os{"darwin", "386"} darwin64 := &os{"darwin", "amd64"} darwinArm64 := &os{"darwin", "arm64"} @@ -47,6 +48,7 @@ func TestFlavorCompatibility(t *testing.T) { linuxArm, linuxArmbe, linuxArm64, + linuxRiscv64, darwin32, darwin64, darwinArm64, @@ -82,6 +84,7 @@ func TestFlavorCompatibility(t *testing.T) { {&Flavor{OS: "x86_64-pc-linux-gnu"}, []*os{linux64}, []*os{linux64}}, {&Flavor{OS: "aarch64-linux-gnu"}, []*os{linuxArm64}, []*os{linuxArm64}}, {&Flavor{OS: "arm64-linux-gnu"}, []*os{linuxArm64}, []*os{linuxArm64}}, + {&Flavor{OS: "riscv64-linux-gnu"}, []*os{linuxRiscv64}, []*os{linuxRiscv64}}, } checkCompatible := func(test *test, os *os) { diff --git a/arduino/discovery/discovery_client/main.go b/internal/arduino/discovery/discovery_client/main.go similarity index 88% rename from arduino/discovery/discovery_client/main.go rename to internal/arduino/discovery/discovery_client/main.go index b9e1cfd0988..b1e461d123c 100644 --- a/arduino/discovery/discovery_client/main.go +++ b/internal/arduino/discovery/discovery_client/main.go @@ -22,8 +22,7 @@ import ( "os" "sort" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/arduino/discovery/discoverymanager" + "github.com/arduino/arduino-cli/internal/arduino/discovery/discoverymanager" "github.com/sirupsen/logrus" ) @@ -33,10 +32,9 @@ func main() { os.Exit(1) } logrus.SetLevel(logrus.ErrorLevel) - dm := discoverymanager.New() + dm := discoverymanager.New("discovery_client/1.0.0") for _, discCmd := range os.Args[1:] { - disc := discovery.New(discCmd, discCmd) - dm.Add(disc) + dm.Add(discCmd, discCmd) } dm.Start() diff --git a/arduino/discovery/discoverymanager/discoverymanager.go b/internal/arduino/discovery/discoverymanager/discoverymanager.go similarity index 82% rename from arduino/discovery/discoverymanager/discoverymanager.go rename to internal/arduino/discovery/discoverymanager/discoverymanager.go index 7d33115ce31..102d0f72389 100644 --- a/arduino/discovery/discoverymanager/discoverymanager.go +++ b/internal/arduino/discovery/discoverymanager/discoverymanager.go @@ -16,13 +16,13 @@ package discoverymanager import ( + "errors" "fmt" "sync" "time" - "github.com/arduino/arduino-cli/arduino/discovery" - "github.com/arduino/arduino-cli/i18n" - "github.com/pkg/errors" + "github.com/arduino/arduino-cli/internal/i18n" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" "github.com/sirupsen/logrus" ) @@ -34,23 +34,23 @@ import ( // is called. type DiscoveryManager struct { discoveriesMutex sync.Mutex - discoveries map[string]*discovery.PluggableDiscovery // all registered PluggableDiscovery - discoveriesRunning bool // set to true once discoveries are started - feed chan *discovery.Event // all events will pass through this channel + discoveries map[string]*discovery.Client // all registered PluggableDiscovery + discoveriesRunning bool // set to true once discoveries are started + feed chan *discovery.Event // all events will pass through this channel watchersMutex sync.Mutex watchers map[*PortWatcher]bool // all registered Watcher watchersCache map[string]map[string]*discovery.Event // this is a cache of all active ports + userAgent string } -var tr = i18n.Tr - // New creates a new DiscoveryManager -func New() *DiscoveryManager { +func New(userAgent string) *DiscoveryManager { return &DiscoveryManager{ - discoveries: map[string]*discovery.PluggableDiscovery{}, + discoveries: map[string]*discovery.Client{}, watchers: map[*PortWatcher]bool{}, feed: make(chan *discovery.Event, 50), watchersCache: map[string]map[string]*discovery.Event{}, + userAgent: userAgent, } } @@ -65,7 +65,7 @@ func (dm *DiscoveryManager) Clear() { logrus.Infof("Closed and removed discovery %s", d.GetID()) } } - dm.discoveries = map[string]*discovery.PluggableDiscovery{} + dm.discoveries = map[string]*discovery.Client{} } // IDs returns the list of discoveries' ids in this DiscoveryManager @@ -101,7 +101,7 @@ func (dm *DiscoveryManager) Start() []error { var wg sync.WaitGroup for _, d := range dm.discoveries { wg.Add(1) - go func(d *discovery.PluggableDiscovery) { + go func(d *discovery.Client) { if err := dm.startDiscovery(d); err != nil { errsLock.Lock() errs = append(errs, err) @@ -117,13 +117,20 @@ func (dm *DiscoveryManager) Start() []error { } // Add adds a discovery to the list of managed discoveries -func (dm *DiscoveryManager) Add(d *discovery.PluggableDiscovery) error { +func (dm *DiscoveryManager) Add(id string, args ...string) error { + d := discovery.NewClient(id, args...) + d.SetLogger(logrus.WithField("discovery", id)) + d.SetUserAgent(dm.userAgent) + return dm.add(d) +} + +func (dm *DiscoveryManager) add(d *discovery.Client) error { dm.discoveriesMutex.Lock() defer dm.discoveriesMutex.Unlock() id := d.GetID() if _, has := dm.discoveries[id]; has { - return errors.Errorf(tr("pluggable discovery already added: %s"), id) + return errors.New(i18n.Tr("pluggable discovery already added: %s", id)) } dm.discoveries[id] = d @@ -162,9 +169,17 @@ func (dm *DiscoveryManager) Watch() (*PortWatcher, error) { defer dm.watchersMutex.Unlock() delete(dm.watchers, watcher) close(watcher.feed) + watcher.feed = nil } go func() { dm.watchersMutex.Lock() + defer dm.watchersMutex.Unlock() + + // Check if the watcher is still alive (it could have been closed before the goroutine started...) + if watcher.feed == nil { + return + } + // When a watcher is started, send all the current active ports first... for _, cache := range dm.watchersCache { for _, ev := range cache { @@ -173,12 +188,11 @@ func (dm *DiscoveryManager) Watch() (*PortWatcher, error) { } // ...and after that add the watcher to the list of watchers receiving events dm.watchers[watcher] = true - dm.watchersMutex.Unlock() }() return watcher, nil } -func (dm *DiscoveryManager) startDiscovery(d *discovery.PluggableDiscovery) (discErr error) { +func (dm *DiscoveryManager) startDiscovery(d *discovery.Client) (discErr error) { defer func() { // If this function returns an error log it if discErr != nil { @@ -187,14 +201,14 @@ func (dm *DiscoveryManager) startDiscovery(d *discovery.PluggableDiscovery) (dis }() if err := d.Run(); err != nil { - return fmt.Errorf(tr("discovery %[1]s process not started: %[2]w"), d.GetID(), err) + return fmt.Errorf("%s: %w", i18n.Tr("discovery %[1]s process not started", d.GetID()), err) } eventCh, err := d.StartSync(5) if err != nil { - return fmt.Errorf("%s: %s", tr("starting discovery %s", d.GetID()), err) + return fmt.Errorf("%s: %s", i18n.Tr("starting discovery %s", d.GetID()), err) } - go func(d *discovery.PluggableDiscovery) { + go func(d *discovery.Client) { // Transfer all incoming events from this discovery to the feed channel for ev := range eventCh { dm.feed <- ev @@ -281,6 +295,6 @@ func (dm *DiscoveryManager) List() []*discovery.Port { // AddAllDiscoveriesFrom transfers discoveries from src to the receiver func (dm *DiscoveryManager) AddAllDiscoveriesFrom(src *DiscoveryManager) { for _, d := range src.discoveries { - dm.Add(d) + dm.add(d) } } diff --git a/arduino/globals/globals.go b/internal/arduino/globals/globals.go similarity index 81% rename from arduino/globals/globals.go rename to internal/arduino/globals/globals.go index 68b5dd577c9..9f91213c492 100644 --- a/arduino/globals/globals.go +++ b/internal/arduino/globals/globals.go @@ -15,6 +15,12 @@ package globals +import ( + "net/url" + + "github.com/arduino/arduino-cli/internal/arduino/resources" +) + var ( // MainFileValidExtension is the extension that must be used for files in new sketches MainFileValidExtension = ".ino" @@ -63,4 +69,13 @@ var ( // DefaultIndexURL is the default index url DefaultIndexURL = "https://downloads.arduino.cc/packages/package_index.tar.bz2" + + // LibrariesIndexURL is the URL where to get the libraries index. + LibrariesIndexURL, _ = url.Parse("https://downloads.arduino.cc/libraries/library_index.tar.bz2") + + // LibrariesIndexResource is the IndexResource to get the libraries index. + LibrariesIndexResource = resources.IndexResource{ + URL: LibrariesIndexURL, + EnforceSignatureVerification: true, + } ) diff --git a/internal/arduino/httpclient/httpclient.go b/internal/arduino/httpclient/httpclient.go new file mode 100644 index 00000000000..8c61c5b3249 --- /dev/null +++ b/internal/arduino/httpclient/httpclient.go @@ -0,0 +1,66 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package httpclient + +import ( + "context" + "time" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" + "go.bug.st/downloader/v2" +) + +// DownloadFile downloads a file from a URL into the specified path. An optional config and options may be passed (or nil to use the defaults). +// A DownloadProgressCB callback function must be passed to monitor download progress. +// If a not empty queryParameter is passed, it is appended to the URL for analysis purposes. +func DownloadFile(ctx context.Context, path *paths.Path, URL string, queryParameter string, label string, downloadCB rpc.DownloadProgressCB, config downloader.Config, options ...downloader.DownloadOptions) (returnedError error) { + if queryParameter != "" { + URL = URL + "?query=" + queryParameter + } + logrus.WithField("url", URL).Info("Starting download") + downloadCB.Start(URL, label) + defer func() { + if returnedError == nil { + downloadCB.End(true, "") + } else { + downloadCB.End(false, returnedError.Error()) + } + }() + + d, err := downloader.DownloadWithConfigAndContext(ctx, path.String(), URL, config, options...) + if err != nil { + return err + } + + err = d.RunAndPoll(func(downloaded int64) { + downloadCB.Update(downloaded, d.Size()) + }, 250*time.Millisecond) + if err != nil { + return err + } + + // The URL is not reachable for some reason + if d.Resp.StatusCode >= 400 && d.Resp.StatusCode <= 599 { + msg := i18n.Tr("Server responded with: %s", d.Resp.Status) + return &cmderrors.FailedDownloadError{Message: msg} + } + + return nil +} diff --git a/arduino/libraries/libraries.go b/internal/arduino/libraries/libraries.go similarity index 95% rename from arduino/libraries/libraries.go rename to internal/arduino/libraries/libraries.go index 1235023e9e5..9ffa1e27eea 100644 --- a/arduino/libraries/libraries.go +++ b/internal/arduino/libraries/libraries.go @@ -16,11 +16,12 @@ package libraries import ( + "errors" "fmt" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" @@ -47,8 +48,6 @@ var ValidCategories = map[string]bool{ "Uncategorized": true, } -var tr = i18n.Tr - // Library represents a library in the system type Library struct { Name string @@ -113,7 +112,7 @@ func (library *Library) ToRPCLibrary() (*rpc.Library, error) { var err error headers, err = library.SourceHeaders() if err != nil { - return nil, fmt.Errorf(tr("reading library headers: %w"), err) + return nil, fmt.Errorf("%s: %w", i18n.Tr("reading library headers"), err) } } @@ -225,7 +224,7 @@ func (library *Library) SourceHeaders() ([]string, error) { if library.sourceHeaders == nil { cppHeaders, err := library.SourceDir.ReadDir() if err != nil { - return nil, fmt.Errorf(tr("reading lib src dir: %s"), err) + return nil, errors.New(i18n.Tr("reading library source directory: %s", err)) } headerExtensions := []string{} for k := range globals.HeaderFilesValidExtensions { diff --git a/arduino/libraries/libraries_layout.go b/internal/arduino/libraries/libraries_layout.go similarity index 94% rename from arduino/libraries/libraries_layout.go rename to internal/arduino/libraries/libraries_layout.go index 8391141322a..ced64c90654 100644 --- a/arduino/libraries/libraries_layout.go +++ b/internal/arduino/libraries/libraries_layout.go @@ -17,8 +17,10 @@ package libraries import ( "encoding/json" + "errors" "fmt" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) @@ -62,7 +64,7 @@ func (d *LibraryLayout) UnmarshalJSON(b []byte) error { *d = RecursiveLayout return nil default: - return fmt.Errorf(tr("invalid library layout: %s"), s) + return errors.New(i18n.Tr("invalid library layout: %s", s)) } } diff --git a/arduino/libraries/libraries_location.go b/internal/arduino/libraries/libraries_location.go similarity index 97% rename from arduino/libraries/libraries_location.go rename to internal/arduino/libraries/libraries_location.go index 709bca8b96f..a2a4423a54d 100644 --- a/arduino/libraries/libraries_location.go +++ b/internal/arduino/libraries/libraries_location.go @@ -17,8 +17,10 @@ package libraries import ( "encoding/json" + "errors" "fmt" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) @@ -85,7 +87,7 @@ func (d *LibraryLocation) UnmarshalJSON(b []byte) error { *d = Unmanaged return nil default: - return fmt.Errorf(tr("invalid library location: %s"), s) + return errors.New(i18n.Tr("invalid library location: %s", s)) } } diff --git a/arduino/libraries/libraries_test.go b/internal/arduino/libraries/libraries_test.go similarity index 91% rename from arduino/libraries/libraries_test.go rename to internal/arduino/libraries/libraries_test.go index 9896ae577fb..33b0de48a3b 100644 --- a/arduino/libraries/libraries_test.go +++ b/internal/arduino/libraries/libraries_test.go @@ -95,15 +95,16 @@ func TestLibrariesLoader(t *testing.T) { func TestSymlinkLoop(t *testing.T) { // Set up directory structure of test library. testLib := paths.New("testdata", "TestLib") - examplesPath := testLib.Join("examples") + examplesPath, err := testLib.Join("examples").Abs() + require.NoError(t, err) require.NoError(t, examplesPath.Mkdir()) defer examplesPath.RemoveAll() // It's probably most friendly for contributors using Windows to create the symlinks needed for the test on demand. - err := os.Symlink(examplesPath.Join("..").String(), examplesPath.Join("UpGoer1").String()) + err = os.Symlink(examplesPath.String(), examplesPath.Join("UpGoer1").String()) require.NoError(t, err, "This test must be run as administrator on Windows to have symlink creation privilege.") // It's necessary to have multiple symlinks to a parent directory to create the loop. - err = os.Symlink(examplesPath.Join("..").String(), examplesPath.Join("UpGoer2").String()) + err = os.Symlink(examplesPath.String(), examplesPath.Join("UpGoer2").String()) require.NoError(t, err) // The failure condition is Load() never returning, testing for which requires setting up a timeout. @@ -123,15 +124,16 @@ func TestSymlinkLoop(t *testing.T) { func TestLegacySymlinkLoop(t *testing.T) { // Set up directory structure of test library. testLib := paths.New("testdata", "LegacyLib") - examplesPath := testLib.Join("examples") + examplesPath, err := testLib.Join("examples").Abs() + require.NoError(t, err) require.NoError(t, examplesPath.Mkdir()) defer examplesPath.RemoveAll() // It's probably most friendly for contributors using Windows to create the symlinks needed for the test on demand. - err := os.Symlink(examplesPath.Join("..").String(), examplesPath.Join("UpGoer1").String()) + err = os.Symlink(examplesPath.String(), examplesPath.Join("UpGoer1").String()) require.NoError(t, err, "This test must be run as administrator on Windows to have symlink creation privilege.") // It's necessary to have multiple symlinks to a parent directory to create the loop. - err = os.Symlink(examplesPath.Join("..").String(), examplesPath.Join("UpGoer2").String()) + err = os.Symlink(examplesPath.String(), examplesPath.Join("UpGoer2").String()) require.NoError(t, err) // The failure condition is Load() never returning, testing for which requires setting up a timeout. diff --git a/arduino/libraries/librariesindex/index.go b/internal/arduino/libraries/librariesindex/index.go similarity index 73% rename from arduino/libraries/librariesindex/index.go rename to internal/arduino/libraries/librariesindex/index.go index f7ebc6ba172..033630f910d 100644 --- a/arduino/libraries/librariesindex/index.go +++ b/internal/arduino/libraries/librariesindex/index.go @@ -18,8 +18,9 @@ package librariesindex import ( "sort" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/resources" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/resources" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" semver "go.bug.st/relaxed-semver" ) @@ -44,7 +45,7 @@ type Library struct { type Release struct { Author string Version *semver.Version - Dependencies []semver.Dependency + Dependencies []*Dependency Maintainer string Sentence string Paragraph string @@ -85,7 +86,7 @@ func (r *Release) GetVersion() *semver.Version { } // GetDependencies returns the dependencies of this library. -func (r *Release) GetDependencies() []semver.Dependency { +func (r *Release) GetDependencies() []*Dependency { return r.Dependencies } @@ -112,14 +113,19 @@ func (r *Release) String() string { // FindRelease search a library Release in the index. Returns nil if the // release is not found. If the version is not specified returns the latest // version available. -func (idx *Index) FindRelease(ref *Reference) *Release { - if library, exists := idx.Libraries[ref.Name]; exists { - if ref.Version == nil { - return library.Latest +func (idx *Index) FindRelease(name string, version *semver.Version) (*Release, error) { + if library, exists := idx.Libraries[name]; exists { + if version == nil { + return library.Latest, nil + } + if release, exists := library.Releases[version.NormalizedString()]; exists { + return release, nil } - return library.Releases[ref.Version.NormalizedString()] } - return nil + if version == nil { + return nil, &cmderrors.LibraryNotFoundError{Library: name + "@latest"} + } + return nil, &cmderrors.LibraryNotFoundError{Library: name + "@" + version.String()} } // FindIndexedLibrary search an indexed library that matches the provided @@ -144,31 +150,31 @@ func (idx *Index) FindLibraryUpdate(lib *libraries.Library) *Release { return nil } -// ResolveDependencies returns the dependencies of a library release. -func (idx *Index) ResolveDependencies(lib *Release) []*Release { - // Box lib index *Release to be digested by dep-resolver - // (TODO: There is a better use of golang interfaces to avoid this?) - allReleases := map[string]semver.Releases{} - for _, indexLib := range idx.Libraries { - releases := semver.Releases{} +// ResolveDependencies resolve the dependencies of a library release and returns a +// possible solution (the set of library releases to install together with the library). +// An optional "override" releases may be passed if we want to exclude the same +// libraries from the index (for example if we want to keep an installed library). +func (idx *Index) ResolveDependencies(lib *Release, overrides []*Release) []*Release { + resolver := semver.NewResolver[*Release, *Dependency]() + + overridden := map[string]bool{} + for _, override := range overrides { + resolver.AddRelease(override) + overridden[override.GetName()] = true + } + + // Create and populate the library resolver + for libName, indexLib := range idx.Libraries { + if _, ok := overridden[libName]; ok { + continue + } for _, indexLibRelease := range indexLib.Releases { - releases = append(releases, indexLibRelease) + resolver.AddRelease(indexLibRelease) } - allReleases[indexLib.Name] = releases } // Perform lib resolution - archive := &semver.Archive{ - Releases: allReleases, - } - deps := archive.Resolve(lib) - - // Unbox resolved deps back into *Release - res := []*Release{} - for _, dep := range deps { - res = append(res, dep.(*Release)) - } - return res + return resolver.Resolve(lib) } // Versions returns an array of all versions available of the library diff --git a/arduino/libraries/librariesindex/index_test.go b/internal/arduino/libraries/librariesindex/index_test.go similarity index 79% rename from arduino/libraries/librariesindex/index_test.go rename to internal/arduino/libraries/librariesindex/index_test.go index 59b245b4978..2340d550b85 100644 --- a/arduino/libraries/librariesindex/index_test.go +++ b/internal/arduino/libraries/librariesindex/index_test.go @@ -20,7 +20,7 @@ import ( "fmt" "testing" - "github.com/arduino/arduino-cli/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries" "github.com/arduino/go-paths-helper" easyjson "github.com/mailru/easyjson" "github.com/stretchr/testify/require" @@ -49,27 +49,22 @@ func TestIndexer(t *testing.T) { require.Equal(t, "", alp.Latest.Dependencies[0].GetConstraint().String()) require.Equal(t, "[1.0.0 1.1.0 1.2.0 1.2.1 1.2.2]", fmt.Sprintf("%v", alp.Versions())) - rtc100ref := &Reference{Name: "RTCZero", Version: semver.MustParse("1.0.0")} - require.Equal(t, "RTCZero@1.0.0", rtc100ref.String()) - rtc100 := index.FindRelease(rtc100ref) + rtc100, err := index.FindRelease("RTCZero", semver.MustParse("1.0.0")) + require.NoError(t, err) require.NotNil(t, rtc100) require.Equal(t, "RTCZero@1.0.0", rtc100.String()) - rtcLatestRef := &Reference{Name: "RTCZero"} - require.Equal(t, "RTCZero", rtcLatestRef.String()) - rtcLatest := index.FindRelease(rtcLatestRef) + rtcLatest, err := index.FindRelease("RTCZero", nil) + require.NoError(t, err) require.NotNil(t, rtcLatest) require.Equal(t, "RTCZero@1.6.0", rtcLatest.String()) - rtcInexistent := index.FindRelease(&Reference{ - Name: "RTCZero", - Version: semver.MustParse("0.0.0-blah"), - }) + rtcInexistent, err := index.FindRelease("RTCZero", semver.MustParse("0.0.0-blah")) + require.Error(t, err) require.Nil(t, rtcInexistent) - rtcInexistent = index.FindRelease(&Reference{ - Name: "RTCZero-blah", - }) + rtcInexistent, err = index.FindRelease("RTCZero-blah", nil) + require.Error(t, err) require.Nil(t, rtcInexistent) rtc := index.FindIndexedLibrary(&libraries.Library{Name: "RTCZero"}) @@ -90,25 +85,29 @@ func TestIndexer(t *testing.T) { rtcInexistent2 := index.FindLibraryUpdate(&libraries.Library{Name: "RTCZero-blah", Version: semver.MustParse("1.0.0")}) require.Nil(t, rtcInexistent2) - resolve1 := index.ResolveDependencies(alp.Releases["1.2.1"]) + resolve1 := index.ResolveDependencies(alp.Releases["1.2.1"], nil) require.Len(t, resolve1, 2) require.Contains(t, resolve1, alp.Releases["1.2.1"]) require.Contains(t, resolve1, rtc.Releases["1.6.0"]) - oauth010 := index.FindRelease(&Reference{Name: "Arduino_OAuth", Version: semver.MustParse("0.1.0")}) + oauth010, err := index.FindRelease("Arduino_OAuth", semver.MustParse("0.1.0")) + require.NoError(t, err) require.NotNil(t, oauth010) require.Equal(t, "Arduino_OAuth@0.1.0", oauth010.String()) - eccx135 := index.FindRelease(&Reference{Name: "ArduinoECCX08", Version: semver.MustParse("1.3.5")}) + eccx135, err := index.FindRelease("ArduinoECCX08", semver.MustParse("1.3.5")) + require.NoError(t, err) require.NotNil(t, eccx135) require.Equal(t, "ArduinoECCX08@1.3.5", eccx135.String()) - bear172 := index.FindRelease(&Reference{Name: "ArduinoBearSSL", Version: semver.MustParse("1.7.2")}) + bear172, err := index.FindRelease("ArduinoBearSSL", semver.MustParse("1.7.2")) + require.NoError(t, err) require.NotNil(t, bear172) require.Equal(t, "ArduinoBearSSL@1.7.2", bear172.String()) - http040 := index.FindRelease(&Reference{Name: "ArduinoHttpClient", Version: semver.MustParse("0.4.0")}) + http040, err := index.FindRelease("ArduinoHttpClient", semver.MustParse("0.4.0")) + require.NoError(t, err) require.NotNil(t, http040) require.Equal(t, "ArduinoHttpClient@0.4.0", http040.String()) - resolve2 := index.ResolveDependencies(oauth010) + resolve2 := index.ResolveDependencies(oauth010, nil) require.Len(t, resolve2, 4) require.Contains(t, resolve2, oauth010) require.Contains(t, resolve2, eccx135) diff --git a/arduino/libraries/librariesindex/json.go b/internal/arduino/libraries/librariesindex/json.go similarity index 91% rename from arduino/libraries/librariesindex/json.go rename to internal/arduino/libraries/librariesindex/json.go index f1820ba9eb9..c5c8dd4de90 100644 --- a/arduino/libraries/librariesindex/json.go +++ b/internal/arduino/libraries/librariesindex/json.go @@ -16,10 +16,10 @@ package librariesindex import ( - "fmt" + "errors" - "github.com/arduino/arduino-cli/arduino/resources" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/resources" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" easyjson "github.com/mailru/easyjson" semver "go.bug.st/relaxed-semver" @@ -57,19 +57,17 @@ type indexDependency struct { Version string `json:"version,omitempty"` } -var tr = i18n.Tr - // LoadIndex reads a library_index.json and create the corresponding Index func LoadIndex(indexFile *paths.Path) (*Index, error) { buff, err := indexFile.ReadFile() if err != nil { - return nil, fmt.Errorf(tr("reading library_index.json: %s"), err) + return nil, errors.New(i18n.Tr("reading library_index.json: %s", err)) } var i indexJSON err = easyjson.Unmarshal(buff, &i) if err != nil { - return nil, fmt.Errorf(tr("parsing library_index.json: %s"), err) + return nil, errors.New(i18n.Tr("parsing library_index.json: %s", err)) } return i.extractIndex() @@ -126,9 +124,9 @@ func (indexLib *indexRelease) extractReleaseIn(library *Library) { } } -func (indexLib *indexRelease) extractDependencies() []semver.Dependency { - res := []semver.Dependency{} - if indexLib.Dependencies == nil || len(indexLib.Dependencies) == 0 { +func (indexLib *indexRelease) extractDependencies() []*Dependency { + res := []*Dependency{} + if len(indexLib.Dependencies) == 0 { return res } for _, indexDep := range indexLib.Dependencies { diff --git a/arduino/libraries/librariesindex/json_easyjson.go b/internal/arduino/libraries/librariesindex/json_easyjson.go similarity index 88% rename from arduino/libraries/librariesindex/json_easyjson.go rename to internal/arduino/libraries/librariesindex/json_easyjson.go index 197c24412fa..5af24fa5fdd 100644 --- a/arduino/libraries/librariesindex/json_easyjson.go +++ b/internal/arduino/libraries/librariesindex/json_easyjson.go @@ -19,7 +19,7 @@ var ( _ easyjson.Marshaler ) -func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(in *jlexer.Lexer, out *indexRelease) { +func easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(in *jlexer.Lexer, out *indexRelease) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -323,7 +323,7 @@ func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin in.Consumed() } } -func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(out *jwriter.Writer, in indexRelease) { +func easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(out *jwriter.Writer, in indexRelease) { out.RawByte('{') first := true _ = first @@ -468,27 +468,27 @@ func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin // MarshalJSON supports json.Marshaler interface func (v indexRelease) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(&w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexRelease) MarshalEasyJSON(w *jwriter.Writer) { - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexRelease) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(&r, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexRelease) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex(l, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex(l, v) } -func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(in *jlexer.Lexer, out *indexJSON) { +func easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(in *jlexer.Lexer, out *indexJSON) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -566,7 +566,7 @@ func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin in.Consumed() } } -func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(out *jwriter.Writer, in indexJSON) { +func easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(out *jwriter.Writer, in indexJSON) { out.RawByte('{') first := true _ = first @@ -592,27 +592,27 @@ func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin // MarshalJSON supports json.Marshaler interface func (v indexJSON) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(&w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexJSON) MarshalEasyJSON(w *jwriter.Writer) { - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexJSON) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(&r, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexJSON) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex1(l, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex1(l, v) } -func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(in *jlexer.Lexer, out *indexDependency) { +func easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(in *jlexer.Lexer, out *indexDependency) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -652,7 +652,7 @@ func easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin in.Consumed() } } -func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(out *jwriter.Writer, in indexDependency) { +func easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(out *jwriter.Writer, in indexDependency) { out.RawByte('{') first := true _ = first @@ -672,23 +672,23 @@ func easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesin // MarshalJSON supports json.Marshaler interface func (v indexDependency) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(&w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v indexDependency) MarshalEasyJSON(w *jwriter.Writer) { - easyjson42239ddeEncodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(w, v) + easyjson42239ddeEncodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *indexDependency) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(&r, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *indexDependency) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson42239ddeDecodeGithubComArduinoArduinoCliArduinoLibrariesLibrariesindex2(l, v) + easyjson42239ddeDecodeGithubComArduinoArduinoCliInternalArduinoLibrariesLibrariesindex2(l, v) } diff --git a/arduino/libraries/librariesindex/testdata/invalid.json b/internal/arduino/libraries/librariesindex/testdata/invalid.json similarity index 100% rename from arduino/libraries/librariesindex/testdata/invalid.json rename to internal/arduino/libraries/librariesindex/testdata/invalid.json diff --git a/arduino/libraries/librariesindex/testdata/library_index.json b/internal/arduino/libraries/librariesindex/testdata/library_index.json similarity index 100% rename from arduino/libraries/librariesindex/testdata/library_index.json rename to internal/arduino/libraries/librariesindex/testdata/library_index.json diff --git a/arduino/libraries/librarieslist.go b/internal/arduino/libraries/librarieslist.go similarity index 100% rename from arduino/libraries/librarieslist.go rename to internal/arduino/libraries/librarieslist.go diff --git a/arduino/libraries/librariesmanager/install.go b/internal/arduino/libraries/librariesmanager/install.go similarity index 54% rename from arduino/libraries/librariesmanager/install.go rename to internal/arduino/libraries/librariesmanager/install.go index e52d3f9d59a..9b53910d41a 100644 --- a/arduino/libraries/librariesmanager/install.go +++ b/internal/arduino/libraries/librariesmanager/install.go @@ -17,18 +17,18 @@ package librariesmanager import ( "context" + "errors" "fmt" "net/url" - "os" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesindex" - "github.com/arduino/arduino-cli/arduino/utils" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/i18n" paths "github.com/arduino/go-paths-helper" - "github.com/codeclysm/extract/v3" + "github.com/codeclysm/extract/v4" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" semver "go.bug.st/relaxed-semver" @@ -58,24 +58,24 @@ type LibraryInstallPlan struct { // InstallPrerequisiteCheck performs prequisite checks to install a library. It returns the // install path, where the library should be installed and the possible library that is already // installed on the same folder and it's going to be replaced by the new one. -func (lm *LibrariesManager) InstallPrerequisiteCheck(name string, version *semver.Version, installLocation libraries.LibraryLocation) (*LibraryInstallPlan, error) { - installDir, err := lm.getLibrariesDir(installLocation) +func (lmi *Installer) InstallPrerequisiteCheck(name string, version *semver.Version, installLocation libraries.LibraryLocation) (*LibraryInstallPlan, error) { + installDir, err := lmi.getLibrariesDir(installLocation) if err != nil { return nil, err } - lm.RescanLibraries() - libs := lm.FindByReference(&librariesindex.Reference{Name: name}, installLocation) + lmi.RescanLibraries() + libs := lmi.FindByReference(name, nil, installLocation) if len(libs) > 1 { libsDir := paths.NewPathList() for _, lib := range libs { libsDir.Add(lib.InstallDir) } - return nil, &arduino.MultipleLibraryInstallDetected{ + return nil, &cmderrors.MultipleLibraryInstallDetected{ LibName: name, LibsDir: libsDir, - Message: tr("Automatic library install can't be performed in this case, please manually remove all duplicates and retry."), + Message: i18n.Tr("Automatic library install can't be performed in this case, please manually remove all duplicates and retry."), } } @@ -90,7 +90,7 @@ func (lm *LibrariesManager) InstallPrerequisiteCheck(name string, version *semve libPath := installDir.Join(utils.SanitizeName(name)) if libPath.IsDir() { if replaced == nil || !replaced.InstallDir.EquivalentTo(libPath) { - return nil, fmt.Errorf(tr("destination dir %s already exists, cannot install"), libPath) + return nil, errors.New(i18n.Tr("destination dir %s already exists, cannot install", libPath)) } } @@ -103,13 +103,8 @@ func (lm *LibrariesManager) InstallPrerequisiteCheck(name string, version *semve }, nil } -// Install installs a library on the specified path. -func (lm *LibrariesManager) Install(indexLibrary *librariesindex.Release, installPath *paths.Path) error { - return indexLibrary.Resource.Install(lm.DownloadsDir, installPath.Parent(), installPath) -} - // importLibraryFromDirectory installs a library by copying it from the given directory. -func (lm *LibrariesManager) importLibraryFromDirectory(libPath *paths.Path, overwrite bool) error { +func (lmi *Installer) importLibraryFromDirectory(libPath *paths.Path, overwrite bool) error { // Check if the library is valid and load metatada if err := validateLibrary(libPath); err != nil { return err @@ -120,50 +115,50 @@ func (lm *LibrariesManager) importLibraryFromDirectory(libPath *paths.Path, over } // Check if the library is already installed and determine install path - installPlan, err := lm.InstallPrerequisiteCheck(library.Name, library.Version, libraries.User) + installPlan, err := lmi.InstallPrerequisiteCheck(library.Name, library.Version, libraries.User) if err != nil { return err } if installPlan.UpToDate { if !overwrite { - return fmt.Errorf(tr("library %s already installed"), installPlan.Name) + return errors.New(i18n.Tr("library %s already installed", installPlan.Name)) } } if installPlan.ReplacedLib != nil { if !overwrite { - return fmt.Errorf(tr("Library %[1]s is already installed, but with a different version: %[2]s", installPlan.Name, installPlan.ReplacedLib)) + return errors.New(i18n.Tr("Library %[1]s is already installed, but with a different version: %[2]s", installPlan.Name, installPlan.ReplacedLib)) } - if err := lm.Uninstall(installPlan.ReplacedLib); err != nil { + if err := lmi.Uninstall(installPlan.ReplacedLib); err != nil { return err } } if installPlan.TargetPath.Exist() { - return fmt.Errorf("%s: %s", tr("destination directory already exists"), installPlan.TargetPath) + return fmt.Errorf("%s: %s", i18n.Tr("destination directory already exists"), installPlan.TargetPath) } if err := libPath.CopyDirTo(installPlan.TargetPath); err != nil { - return fmt.Errorf("%s: %w", tr("copying library to destination directory:"), err) + return fmt.Errorf("%s: %w", i18n.Tr("copying library to destination directory:"), err) } return nil } // Uninstall removes a Library -func (lm *LibrariesManager) Uninstall(lib *libraries.Library) error { +func (lmi *Installer) Uninstall(lib *libraries.Library) error { if lib == nil || lib.InstallDir == nil { - return fmt.Errorf(tr("install directory not set")) + return errors.New(i18n.Tr("install directory not set")) } if err := lib.InstallDir.RemoveAll(); err != nil { - return fmt.Errorf(tr("removing library directory: %s"), err) + return errors.New(i18n.Tr("removing library directory: %s", err)) } - alternatives := lm.Libraries[lib.Name] + alternatives := lmi.libraries[lib.Name] alternatives.Remove(lib) - lm.Libraries[lib.Name] = alternatives + lmi.libraries[lib.Name] = alternatives return nil } // InstallZipLib installs a Zip library on the specified path. -func (lm *LibrariesManager) InstallZipLib(ctx context.Context, archivePath *paths.Path, overwrite bool) error { +func (lmi *Installer) InstallZipLib(ctx context.Context, archivePath *paths.Path, overwrite bool) error { // Clone library in a temporary directory tmpDir, err := paths.MkTempDir("", "") if err != nil { @@ -180,7 +175,7 @@ func (lm *LibrariesManager) InstallZipLib(ctx context.Context, archivePath *path // Extract to a temporary directory so we can check if the zip is structured correctly. // We also use the top level folder from the archive to infer the library name. if err := extract.Archive(ctx, file, tmpDir.String(), nil); err != nil { - return fmt.Errorf(tr("extracting archive: %w"), err) + return fmt.Errorf("%s: %w", i18n.Tr("extracting archive"), err) } libRootFiles, err := tmpDir.ReadDir() @@ -189,24 +184,24 @@ func (lm *LibrariesManager) InstallZipLib(ctx context.Context, archivePath *path } libRootFiles.FilterOutPrefix("__MACOSX") // Ignores metadata from Mac OS X if len(libRootFiles) > 1 { - return fmt.Errorf(tr("archive is not valid: multiple files found in zip file top level")) + return errors.New(i18n.Tr("archive is not valid: multiple files found in zip file top level")) } if len(libRootFiles) == 0 { - return fmt.Errorf(tr("archive is not valid: no files found in zip file top level")) + return errors.New(i18n.Tr("archive is not valid: no files found in zip file top level")) } tmpInstallPath := libRootFiles[0] // Install extracted library in the destination directory - if err := lm.importLibraryFromDirectory(tmpInstallPath, overwrite); err != nil { - return fmt.Errorf(tr("moving extracted archive to destination dir: %s"), err) + if err := lmi.importLibraryFromDirectory(tmpInstallPath, overwrite); err != nil { + return errors.New(i18n.Tr("moving extracted archive to destination dir: %s", err)) } return nil } // InstallGitLib installs a library hosted on a git repository on the specified path. -func (lm *LibrariesManager) InstallGitLib(gitURL string, overwrite bool) error { - gitLibraryName, ref, err := parseGitURL(gitURL) +func (lmi *Installer) InstallGitLib(argURL string, overwrite bool) error { + libraryName, gitURL, ref, err := parseGitArgURL(argURL) if err != nil { return err } @@ -217,27 +212,29 @@ func (lm *LibrariesManager) InstallGitLib(gitURL string, overwrite bool) error { return err } defer tmp.RemoveAll() - tmpInstallPath := tmp.Join(gitLibraryName) + tmpInstallPath := tmp.Join(libraryName) - depth := 1 - if ref != "" { - depth = 0 - } - repo, err := git.PlainClone(tmpInstallPath.String(), false, &git.CloneOptions{ - URL: gitURL, - Depth: depth, - Progress: os.Stdout, - }) - if err != nil { - return err - } + if _, err := git.PlainClone(tmpInstallPath.String(), false, &git.CloneOptions{ + URL: gitURL, + ReferenceName: plumbing.ReferenceName(ref), + }); err != nil { + if err.Error() != "reference not found" { + return err + } - if ref != "" { - if h, err := repo.ResolveRevision(ref); err != nil { + // We did not find the requested reference, let's do a PlainClone and use + // "ResolveRevision" to find and checkout the requested revision + if repo, err := git.PlainClone(tmpInstallPath.String(), false, &git.CloneOptions{ + URL: gitURL, + }); err != nil { + return err + } else if h, err := repo.ResolveRevision(plumbing.Revision(ref)); err != nil { return err } else if w, err := repo.Worktree(); err != nil { return err - } else if err := w.Checkout(&git.CheckoutOptions{Hash: plumbing.NewHash(h.String())}); err != nil { + } else if err := w.Checkout(&git.CheckoutOptions{ + Force: true, // workaround for: https://github.com/go-git/go-git/issues/1411 + Hash: plumbing.NewHash(h.String())}); err != nil { return err } } @@ -246,32 +243,58 @@ func (lm *LibrariesManager) InstallGitLib(gitURL string, overwrite bool) error { tmpInstallPath.Join(".git").RemoveAll() // Install extracted library in the destination directory - if err := lm.importLibraryFromDirectory(tmpInstallPath, overwrite); err != nil { - return fmt.Errorf(tr("moving extracted archive to destination dir: %s"), err) + if err := lmi.importLibraryFromDirectory(tmpInstallPath, overwrite); err != nil { + return errors.New(i18n.Tr("moving extracted archive to destination dir: %s", err)) } return nil } -// parseGitURL tries to recover a library name from a git URL. +// parseGitArgURL tries to recover a library name from a git URL. // Returns an error in case the URL is not a valid git URL. -func parseGitURL(gitURL string) (string, plumbing.Revision, error) { - var res string - var rev plumbing.Revision - if strings.HasPrefix(gitURL, "git@") { - // We can't parse these as URLs - i := strings.LastIndex(gitURL, "/") - res = strings.TrimSuffix(gitURL[i+1:], ".git") - } else if path := paths.New(gitURL); path != nil && path.Exist() { - res = path.Base() - } else if parsed, err := url.Parse(gitURL); parsed.String() != "" && err == nil { - i := strings.LastIndex(parsed.Path, "/") - res = strings.TrimSuffix(parsed.Path[i+1:], ".git") - rev = plumbing.Revision(parsed.Fragment) - } else { - return "", "", fmt.Errorf(tr("invalid git url")) - } - return res, rev, nil +func parseGitArgURL(argURL string) (string, string, string, error) { + // On Windows handle paths with backslashes in the form C:\Path\to\library + if path := paths.New(argURL); path != nil && path.Exist() { + return path.Base(), argURL, "", nil + } + + // Handle commercial git-specific address in the form "git@xxxxx.com:arduino-libraries/SigFox.git" + prefixes := map[string]string{ + "git@github.com:": "https://github.com/", + "git@gitlab.com:": "https://gitlab.com/", + "git@bitbucket.org:": "https://bitbucket.org/", + } + for prefix, replacement := range prefixes { + if strings.HasPrefix(argURL, prefix) { + // We can't parse these as URLs + argURL = replacement + strings.TrimPrefix(argURL, prefix) + } + } + + parsedURL, err := url.Parse(argURL) + if err != nil { + return "", "", "", fmt.Errorf("%s: %w", i18n.Tr("invalid git url"), err) + } + if parsedURL.String() == "" { + return "", "", "", errors.New(i18n.Tr("invalid git url")) + } + + // Extract lib name from "https://github.com/arduino-libraries/SigFox.git#1.0.3" + // path == "/arduino-libraries/SigFox.git" + slash := strings.LastIndex(parsedURL.Path, "/") + if slash == -1 { + return "", "", "", errors.New(i18n.Tr("invalid git url")) + } + libName := strings.TrimSuffix(parsedURL.Path[slash+1:], ".git") + if libName == "" { + return "", "", "", errors.New(i18n.Tr("invalid git url")) + } + // fragment == "1.0.3" + rev := parsedURL.Fragment + // gitURL == "https://github.com/arduino-libraries/SigFox.git" + parsedURL.Fragment = "" + gitURL := parsedURL.String() + return libName, gitURL, rev, nil } // validateLibrary verifies the dir contains a valid library, meaning it has either @@ -279,7 +302,7 @@ func parseGitURL(gitURL string) (string, plumbing.Revision, error) { // Returns nil if dir contains a valid library, error on all other cases. func validateLibrary(dir *paths.Path) error { if dir.NotExist() { - return fmt.Errorf(tr("directory doesn't exist: %s", dir)) + return errors.New(i18n.Tr("directory doesn't exist: %s", dir)) } searchHeaderFile := func(d *paths.Path) (bool, error) { @@ -289,7 +312,7 @@ func validateLibrary(dir *paths.Path) error { } dirContent, err := d.ReadDir() if err != nil { - return false, fmt.Errorf(tr("reading directory %s content: %w", dir, err)) + return false, fmt.Errorf("%s: %w", i18n.Tr("reading directory %s content", dir), err) } dirContent.FilterOutDirs() headerExtensions := []string{} @@ -316,5 +339,5 @@ func validateLibrary(dir *paths.Path) error { return nil } - return fmt.Errorf(tr("library not valid")) + return errors.New(i18n.Tr("library not valid")) } diff --git a/internal/arduino/libraries/librariesmanager/install_test.go b/internal/arduino/libraries/librariesmanager/install_test.go new file mode 100644 index 00000000000..85ab27f358e --- /dev/null +++ b/internal/arduino/libraries/librariesmanager/install_test.go @@ -0,0 +1,145 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package librariesmanager + +import ( + "testing" + + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestParseGitURL(t *testing.T) { + { + _, _, _, err := parseGitArgURL("") + require.EqualError(t, err, "invalid git url") + } + { + libraryName, gitURL, ref, err := parseGitArgURL("https://github.com/arduino/arduino-lib.git") + require.NoError(t, err) + require.Equal(t, "arduino-lib", libraryName) + require.Equal(t, "https://github.com/arduino/arduino-lib.git", gitURL) + require.EqualValues(t, "", ref) + } + { + libraryName, gitURL, ref, err := parseGitArgURL("https://github.com/arduino/arduino-lib.git#0.1.2") + require.NoError(t, err) + require.Equal(t, "arduino-lib", libraryName) + require.Equal(t, "https://github.com/arduino/arduino-lib.git", gitURL) + require.EqualValues(t, "0.1.2", ref) + } + { + libraryName, gitURL, ref, err := parseGitArgURL("git@github.com:arduino/arduino-lib.git") + require.NoError(t, err) + require.Equal(t, "arduino-lib", libraryName) + require.Equal(t, "https://github.com/arduino/arduino-lib.git", gitURL) + require.EqualValues(t, "", ref) + } + { + libraryName, gitURL, ref, err := parseGitArgURL("git@bitbucket.org:arduino/arduino-lib.git") + require.NoError(t, err) + require.Equal(t, "arduino-lib", libraryName) + require.Equal(t, "https://bitbucket.org/arduino/arduino-lib.git", gitURL) + require.EqualValues(t, "", ref) + } + { + libraryName, gitURL, ref, err := parseGitArgURL("git@github.com:arduino/arduino-lib.git#0.1.2") + require.NoError(t, err) + require.Equal(t, "arduino-lib", libraryName) + require.Equal(t, "https://github.com/arduino/arduino-lib.git", gitURL) + require.EqualValues(t, "0.1.2", ref) + } + { + libraryName, gitURL, ref, err := parseGitArgURL("file:///path/to/arduino-lib") + require.NoError(t, err) + require.Equal(t, "arduino-lib", libraryName) + require.Equal(t, "file:///path/to/arduino-lib", gitURL) + require.EqualValues(t, "", ref) + } + { + libraryName, gitURL, ref, err := parseGitArgURL("file:///path/to/arduino-lib.git") + require.NoError(t, err) + require.Equal(t, "arduino-lib", libraryName) + require.Equal(t, "file:///path/to/arduino-lib.git", gitURL) + require.EqualValues(t, "", ref) + } + { + libraryName, gitURL, ref, err := parseGitArgURL("/path/to/arduino-lib") + require.NoError(t, err) + require.Equal(t, "arduino-lib", libraryName) + require.Equal(t, "/path/to/arduino-lib", gitURL) + require.EqualValues(t, "", ref) + } + { + libraryName, gitURL, ref, err := parseGitArgURL("/path/to/arduino-lib.git") + require.NoError(t, err) + require.Equal(t, "arduino-lib", libraryName) + require.Equal(t, "/path/to/arduino-lib.git", gitURL) + require.EqualValues(t, "", ref) + } + { + _, _, _, err := parseGitArgURL("https://arduino.cc") + require.EqualError(t, err, "invalid git url") + } + { + _, _, _, err := parseGitArgURL("https://arduino.cc/") + require.EqualError(t, err, "invalid git url") + } + { + _, _, _, err := parseGitArgURL("://not@a@url") + require.EqualError(t, err, "invalid git url: parse \"://not@a@url\": missing protocol scheme") + } +} + +func TestValidateLibrary(t *testing.T) { + tmpDir := paths.New(t.TempDir()) + + nonExistingDirLib := tmpDir.Join("nonExistingDirLib") + err := validateLibrary(nonExistingDirLib) + require.Errorf(t, err, "directory doesn't exist: %s", nonExistingDirLib) + + emptyLib := tmpDir.Join("emptyLib") + emptyLib.Mkdir() + err = validateLibrary(emptyLib) + require.Errorf(t, err, "library not valid") + + onlyPropertiesLib := tmpDir.Join("onlyPropertiesLib") + onlyPropertiesLib.Mkdir() + onlyPropertiesLib.Join("library.properties").WriteFile([]byte{}) + err = validateLibrary(onlyPropertiesLib) + require.Errorf(t, err, "library not valid") + + missingPropertiesLib := tmpDir.Join("missingPropertiesLib") + missingPropertiesLibSourceDir := missingPropertiesLib.Join("src") + missingPropertiesLibSourceDir.MkdirAll() + missingPropertiesLibSourceDir.Join("some_file.hpp").WriteFile([]byte{}) + err = validateLibrary(missingPropertiesLib) + require.Errorf(t, err, "library not valid") + + validLib := tmpDir.Join("valiLib") + validLibSourceDir := validLib.Join("src") + validLibSourceDir.MkdirAll() + validLibSourceDir.Join("some_file.hpp").WriteFile([]byte{}) + validLib.Join("library.properties").WriteFile([]byte{}) + err = validateLibrary(validLib) + require.NoError(t, err) + + validLegacyLib := tmpDir.Join("validLegacyLib") + validLegacyLib.Mkdir() + validLegacyLib.Join("some_file.hpp").WriteFile([]byte{}) + err = validateLibrary(validLib) + require.NoError(t, err) +} diff --git a/internal/arduino/libraries/librariesmanager/librariesmanager.go b/internal/arduino/libraries/librariesmanager/librariesmanager.go new file mode 100644 index 00000000000..457d20b32ff --- /dev/null +++ b/internal/arduino/libraries/librariesmanager/librariesmanager.go @@ -0,0 +1,261 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package librariesmanager + +import ( + "errors" + "fmt" + "os" + "slices" + "strings" + "sync" + + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/i18n" + paths "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" + semver "go.bug.st/relaxed-semver" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +// Builder is used to create a new LibrariesManager. The builder has +// methods to load and parse libraries and to actually build the +// LibraryManager. Once the LibrariesManager is built, it cannot be +// altered anymore. +type Builder struct { + *LibrariesManager +} + +// Explorer is used to query the library manager about the installed libraries. +type Explorer struct { + *LibrariesManager +} + +// Installer is used to rescan installed libraries after install/uninstall. +type Installer struct { + *LibrariesManager +} + +// LibrariesManager keeps the current status of the libraries in the system +// (the list of libraries, revisions, installed paths, etc.) +type LibrariesManager struct { + librariesLock sync.RWMutex + librariesDir []*LibrariesDir + libraries map[string]libraries.List +} + +// LibrariesDir is a directory containing libraries +type LibrariesDir struct { + Path *paths.Path + Location libraries.LibraryLocation + PlatformRelease *cores.PlatformRelease + IsSingleLibrary bool // true if Path points directly to a library instad of a dir of libraries + scanned bool +} + +// Names returns an array with all the names of the installed libraries. +func (lm *Explorer) Names() []string { + res := make([]string, len(lm.libraries)) + i := 0 + for n := range lm.libraries { + res[i] = n + i++ + } + slices.SortFunc(res, func(a, b string) int { + if strings.ToLower(a) < strings.ToLower(b) { + return -1 + } + return 1 + }) + return res +} + +// NewBuilder creates a new library manager builder. +func NewBuilder() *Builder { + return &Builder{ + &LibrariesManager{ + libraries: map[string]libraries.List{}, + }, + } +} + +// Clone creates a Builder starting with a copy of the same configuration +// of this LibrariesManager. At the moment of the Build() only the added +// libraries directories will be scanned, keeping the existing directories +// "cached" to optimize scan. If you need to do a full rescan you must use +// the RescanLibraries method of the Installer. +func (lm *LibrariesManager) Clone() *Builder { + lmb := NewBuilder() + lmb.librariesDir = append(lmb.librariesDir, lm.librariesDir...) + for libName, libAlternatives := range lm.libraries { + // TODO: Maybe we should deep clone libAlternatives... + lmb.libraries[libName] = append(lmb.libraries[libName], libAlternatives...) + } + return lmb +} + +// NewExplorer returns a new Explorer. The returned function must be called +// to release the lock on the LibrariesManager. +func (lm *LibrariesManager) NewExplorer() (*Explorer, func()) { + lm.librariesLock.RLock() + return &Explorer{lm}, lm.librariesLock.RUnlock +} + +// NewInstaller returns a new Installer. The returned function must be called +// to release the lock on the LibrariesManager. +func (lm *LibrariesManager) NewInstaller() (*Installer, func()) { + lm.librariesLock.Lock() + return &Installer{lm}, lm.librariesLock.Unlock +} + +// Build builds a new LibrariesManager. +func (lmb *Builder) Build() (*LibrariesManager, []*status.Status) { + var statuses []*status.Status + res := &LibrariesManager{} + for _, dir := range lmb.librariesDir { + if !dir.scanned { + if errs := lmb.loadLibrariesFromDir(dir); len(errs) > 0 { + statuses = append(statuses, errs...) + } + } + } + lmb.BuildIntoExistingLibrariesManager(res) + return res, statuses +} + +// BuildIntoExistingLibrariesManager will overwrite the given LibrariesManager instead +// of building a new one. +func (lmb *Builder) BuildIntoExistingLibrariesManager(old *LibrariesManager) { + old.librariesLock.Lock() + old.librariesDir = lmb.librariesDir + old.libraries = lmb.libraries + old.librariesLock.Unlock() +} + +// AddLibrariesDir adds path to the list of directories +// to scan when searching for libraries. If a path is already +// in the list it is ignored. +func (lmb *Builder) AddLibrariesDir(libDir LibrariesDir) { + if libDir.Path == nil { + return + } + for _, dir := range lmb.librariesDir { + if dir.Path.EquivalentTo(libDir.Path) { + return + } + } + logrus.WithField("dir", libDir.Path). + WithField("location", libDir.Location.String()). + WithField("isSingleLibrary", libDir.IsSingleLibrary). + Info("Adding libraries dir") + lmb.librariesDir = append(lmb.librariesDir, &libDir) +} + +// RescanLibraries reload all installed libraries in the system. +func (lmi *Installer) RescanLibraries() []*status.Status { + lmi.libraries = map[string]libraries.List{} + statuses := []*status.Status{} + for _, dir := range lmi.librariesDir { + if errs := lmi.loadLibrariesFromDir(dir); len(errs) > 0 { + statuses = append(statuses, errs...) + } + } + return statuses +} + +func (lm *LibrariesManager) getLibrariesDir(installLocation libraries.LibraryLocation) (*paths.Path, error) { + for _, dir := range lm.librariesDir { + if dir.Location == installLocation { + return dir.Path, nil + } + } + switch installLocation { + case libraries.User: + return nil, errors.New(i18n.Tr("user directory not set")) + case libraries.IDEBuiltIn: + return nil, errors.New(i18n.Tr("built-in libraries directory not set")) + default: + return nil, fmt.Errorf("libraries directory not set: %s", installLocation.String()) + } +} + +// loadLibrariesFromDir loads all libraries in the given directory. Returns +// nil if the directory doesn't exists. +func (lm *LibrariesManager) loadLibrariesFromDir(librariesDir *LibrariesDir) []*status.Status { + statuses := []*status.Status{} + + librariesDir.scanned = true + + var libDirs paths.PathList + if librariesDir.IsSingleLibrary { + libDirs.Add(librariesDir.Path) + } else { + d, err := librariesDir.Path.ReadDir() + if os.IsNotExist(err) { + return statuses + } + if err != nil { + s := status.New(codes.FailedPrecondition, i18n.Tr("reading dir %[1]s: %[2]s", librariesDir.Path, err)) + return append(statuses, s) + } + d.FilterDirs() + d.FilterOutHiddenFiles() + libDirs = d + } + + for _, libDir := range libDirs { + library, err := libraries.Load(libDir, librariesDir.Location) + if err != nil { + s := status.New(codes.Internal, i18n.Tr("loading library from %[1]s: %[2]s", libDir, err)) + statuses = append(statuses, s) + continue + } + library.ContainerPlatform = librariesDir.PlatformRelease + alternatives := lm.libraries[library.Name] + alternatives.Add(library) + lm.libraries[library.Name] = alternatives + } + + return statuses +} + +// FindByReference return the installed libraries matching the Reference +// name and version or, if the version is nil, the libraries installed +// in the installLocation. +func (lmi *Installer) FindByReference(name string, version *semver.Version, installLocation libraries.LibraryLocation) libraries.List { + alternatives := lmi.libraries[name] + if alternatives == nil { + return nil + } + return alternatives.FilterByVersionAndInstallLocation(version, installLocation) +} + +// FindAllInstalled returns all the installed libraries +func (lm *LibrariesManager) FindAllInstalled() libraries.List { + var res libraries.List + for _, libAlternatives := range lm.libraries { + for _, libRelease := range libAlternatives { + // TODO: is this check redundant? + if libRelease.InstallDir == nil { + continue + } + res.Add(libRelease) + } + } + return res +} diff --git a/arduino/libraries/librariesmanager/librariesmanager_test.go b/internal/arduino/libraries/librariesmanager/librariesmanager_test.go similarity index 53% rename from arduino/libraries/librariesmanager/librariesmanager_test.go rename to internal/arduino/libraries/librariesmanager/librariesmanager_test.go index a987462b6b2..0b7fd3a7857 100644 --- a/arduino/libraries/librariesmanager/librariesmanager_test.go +++ b/internal/arduino/libraries/librariesmanager/librariesmanager_test.go @@ -17,16 +17,29 @@ package librariesmanager import ( "testing" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/go-paths-helper" + "github.com/arduino/arduino-cli/internal/arduino/libraries" "github.com/stretchr/testify/require" ) -func Test_RescanLibrariesCallClear(t *testing.T) { - baseDir := paths.New(t.TempDir()) - lm := NewLibraryManager(baseDir.Join("index_dir"), baseDir.Join("downloads_dir")) - lm.Libraries["testLibA"] = libraries.List{} - lm.Libraries["testLibB"] = libraries.List{} - lm.RescanLibraries() - require.Len(t, lm.Libraries, 0) +func TestLibrariesBuilderScanCloneRescan(t *testing.T) { + lmb := NewBuilder() + lmb.libraries["testLibA"] = libraries.List{} + lmb.libraries["testLibB"] = libraries.List{} + lm, warns := lmb.Build() + require.Empty(t, warns) + require.Len(t, lm.libraries, 2) + + // Cloning should keep existing libraries + lm2, warns2 := lm.Clone().Build() + require.Empty(t, warns2) + require.Len(t, lm2.libraries, 2) + + // Full rescan should update libs + { + lmi2, release := lm2.NewInstaller() + lmi2.RescanLibraries() + release() + } + require.Len(t, lm.libraries, 2) // Ensure deep-coping worked as expected... + require.Len(t, lm2.libraries, 0) } diff --git a/arduino/libraries/librariesresolver/cpp.go b/internal/arduino/libraries/librariesresolver/cpp.go similarity index 77% rename from arduino/libraries/librariesresolver/cpp.go rename to internal/arduino/libraries/librariesresolver/cpp.go index f817a68f7eb..0b1d770671f 100644 --- a/arduino/libraries/librariesresolver/cpp.go +++ b/internal/arduino/libraries/librariesresolver/cpp.go @@ -16,15 +16,15 @@ package librariesresolver import ( + "errors" "fmt" "path/filepath" "strings" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/arduino/libraries" - "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" - "github.com/arduino/arduino-cli/arduino/utils" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/schollz/closestmatch" "github.com/sirupsen/logrus" ) @@ -34,74 +34,60 @@ type Cpp struct { headers map[string]libraries.List } -var tr = i18n.Tr - // NewCppResolver creates a new Cpp resolver -func NewCppResolver() *Cpp { - return &Cpp{ +func NewCppResolver(allLibs []*libraries.Library, targetPlatform, actualPlatform *cores.PlatformRelease) *Cpp { + resolver := &Cpp{ headers: map[string]libraries.List{}, } -} - -// ScanFromLibrariesManager reads all librariers loaded in the LibrariesManager to find -// and cache all C++ headers for later retrieval -func (resolver *Cpp) ScanFromLibrariesManager(lm *librariesmanager.LibrariesManager) error { - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - resolver.ScanLibrary(lib) - } + resolver.ScanIDEBuiltinLibraries(allLibs) + resolver.ScanUserAndUnmanagedLibraries(allLibs) + resolver.ScanPlatformLibraries(allLibs, targetPlatform) + if actualPlatform != targetPlatform { + resolver.ScanPlatformLibraries(allLibs, actualPlatform) } - return nil + + return resolver } // ScanIDEBuiltinLibraries reads ide-builtin librariers loaded in the LibrariesManager to find // and cache all C++ headers for later retrieval. -func (resolver *Cpp) ScanIDEBuiltinLibraries(lm *librariesmanager.LibrariesManager) error { - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - if lib.Location == libraries.IDEBuiltIn { - resolver.ScanLibrary(lib) - } +func (resolver *Cpp) ScanIDEBuiltinLibraries(allLibs []*libraries.Library) { + for _, lib := range allLibs { + if lib.Location == libraries.IDEBuiltIn { + _ = resolver.ScanLibrary(lib) } } - return nil } // ScanUserAndUnmanagedLibraries reads user/unmanaged librariers loaded in the LibrariesManager to find // and cache all C++ headers for later retrieval. -func (resolver *Cpp) ScanUserAndUnmanagedLibraries(lm *librariesmanager.LibrariesManager) error { - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - if lib.Location == libraries.User || lib.Location == libraries.Unmanaged { - resolver.ScanLibrary(lib) - } +func (resolver *Cpp) ScanUserAndUnmanagedLibraries(allLibs []*libraries.Library) { + for _, lib := range allLibs { + if lib.Location == libraries.User || lib.Location == libraries.Unmanaged { + _ = resolver.ScanLibrary(lib) } } - return nil } // ScanPlatformLibraries reads platform-bundled libraries for a specific platform loaded in the LibrariesManager // to find and cache all C++ headers for later retrieval. -func (resolver *Cpp) ScanPlatformLibraries(lm *librariesmanager.LibrariesManager, platform *cores.PlatformRelease) error { - for _, libAlternatives := range lm.Libraries { - for _, lib := range libAlternatives { - if lib.Location != libraries.PlatformBuiltIn && lib.Location != libraries.ReferencedPlatformBuiltIn { - continue - } - if lib.ContainerPlatform != platform { - continue - } - resolver.ScanLibrary(lib) +func (resolver *Cpp) ScanPlatformLibraries(allLibs []*libraries.Library, platform *cores.PlatformRelease) { + for _, lib := range allLibs { + if lib.Location != libraries.PlatformBuiltIn && lib.Location != libraries.ReferencedPlatformBuiltIn { + continue } + if lib.ContainerPlatform != platform { + continue + } + _ = resolver.ScanLibrary(lib) } - return nil } // ScanLibrary reads a library to find and cache C++ headers for later retrieval func (resolver *Cpp) ScanLibrary(lib *libraries.Library) error { cppHeaders, err := lib.SourceHeaders() if err != nil { - return fmt.Errorf(tr("reading lib headers: %s"), err) + return errors.New(i18n.Tr("reading lib headers: %s", err)) } for _, cppHeader := range cppHeaders { l := resolver.headers[cppHeader] @@ -137,7 +123,7 @@ func (resolver *Cpp) ResolveFor(header, architecture string) *libraries.Library logrus. WithField("lib", lib.Name). WithField("prio", fmt.Sprintf("%03X", libPriority)). - Infof(msg) + Info(msg) } if found == nil { return nil diff --git a/arduino/libraries/librariesresolver/cpp_test.go b/internal/arduino/libraries/librariesresolver/cpp_test.go similarity index 94% rename from arduino/libraries/librariesresolver/cpp_test.go rename to internal/arduino/libraries/librariesresolver/cpp_test.go index 3be147636ac..a82da18f465 100644 --- a/arduino/libraries/librariesresolver/cpp_test.go +++ b/internal/arduino/libraries/librariesresolver/cpp_test.go @@ -18,7 +18,7 @@ package librariesresolver import ( "testing" - "github.com/arduino/arduino-cli/arduino/libraries" + "github.com/arduino/arduino-cli/internal/arduino/libraries" "github.com/stretchr/testify/require" ) @@ -35,7 +35,7 @@ var bundleServo = &libraries.Library{Name: "Servo", Location: libraries.IDEBuilt func runResolver(include string, arch string, libs ...*libraries.Library) *libraries.Library { libraryList := libraries.List{} libraryList.Add(libs...) - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} resolver.headers[include] = libraryList return resolver.ResolveFor(include, arch) } @@ -95,7 +95,7 @@ func TestClosestMatchWithTotallyDifferentNames(t *testing.T) { libraryList.Add(l6) libraryList.Add(l7) libraryList.Add(l8) - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} resolver.headers["XYZ.h"] = libraryList res := resolver.ResolveFor("XYZ.h", "xyz") require.NotNil(t, res) @@ -121,7 +121,7 @@ func TestCppHeaderPriority(t *testing.T) { } func TestCppHeaderResolverWithNilResult(t *testing.T) { - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} libraryList := libraries.List{} libraryList.Add(l1) resolver.headers["aaa.h"] = libraryList @@ -130,7 +130,7 @@ func TestCppHeaderResolverWithNilResult(t *testing.T) { func TestCppHeaderResolver(t *testing.T) { resolve := func(header string, libs ...*libraries.Library) string { - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} librarylist := libraries.List{} for _, lib := range libs { librarylist.Add(lib) @@ -149,7 +149,7 @@ func TestCppHeaderResolver(t *testing.T) { } func TestCppHeaderResolverWithLibrariesInStrangeDirectoryNames(t *testing.T) { - resolver := NewCppResolver() + resolver := &Cpp{headers: make(map[string]libraries.List)} librarylist := libraries.List{} librarylist.Add(&libraries.Library{DirName: "onewire_2_3_4", Name: "OneWire", Architectures: []string{"*"}}) librarylist.Add(&libraries.Library{DirName: "onewireng_2_3_4", Name: "OneWireNg", Architectures: []string{"avr"}}) diff --git a/arduino/libraries/loader.go b/internal/arduino/libraries/loader.go similarity index 92% rename from arduino/libraries/loader.go rename to internal/arduino/libraries/loader.go index f278c85d40f..f3d3c896383 100644 --- a/arduino/libraries/loader.go +++ b/internal/arduino/libraries/loader.go @@ -16,13 +16,14 @@ package libraries import ( + "errors" "fmt" "strings" - "github.com/arduino/arduino-cli/arduino/globals" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" properties "github.com/arduino/go-properties-orderedmap" - "github.com/pkg/errors" semver "go.bug.st/relaxed-semver" ) @@ -51,7 +52,7 @@ func addUtilityDirectory(library *Library) { func makeNewLibrary(libraryDir *paths.Path, location LibraryLocation) (*Library, error) { libProperties, err := properties.Load(libraryDir.Join("library.properties").String()) if err != nil { - return nil, fmt.Errorf(tr("loading library.properties: %s"), err) + return nil, errors.New(i18n.Tr("loading library.properties: %s", err)) } if libProperties.Get("maintainer") == "" && libProperties.Get("email") != "" { @@ -113,7 +114,7 @@ func makeNewLibrary(libraryDir *paths.Path, location LibraryLocation) (*Library, } if err := addExamples(library); err != nil { - return nil, errors.Errorf(tr("scanning examples: %s"), err) + return nil, fmt.Errorf("%s: %w", i18n.Tr("scanning sketch examples"), err) } library.DirName = libraryDir.Base() library.Name = strings.TrimSpace(libProperties.Get("name")) @@ -136,7 +137,7 @@ func makeLegacyLibrary(path *paths.Path, location LibraryLocation) (*Library, er if foundHeader, err := containsHeaderFile(path); err != nil { return nil, err } else if !foundHeader { - return nil, errors.Errorf(tr("invalid library: no header files found")) + return nil, errors.New(i18n.Tr("invalid library: no header files found")) } library := &Library{ InstallDir: path.Canonical(), @@ -151,7 +152,7 @@ func makeLegacyLibrary(path *paths.Path, location LibraryLocation) (*Library, er InDevelopment: path.Join(".development").Exist(), } if err := addExamples(library); err != nil { - return nil, errors.Errorf(tr("scanning examples: %s"), err) + return nil, fmt.Errorf("%s: %w", i18n.Tr("scanning sketch examples"), err) } addUtilityDirectory(library) return library, nil @@ -195,7 +196,7 @@ func addExamplesToPathList(examplesPath *paths.Path, list *paths.PathList) error func containsHeaderFile(d *paths.Path) (bool, error) { dirContent, err := d.ReadDir() if err != nil { - return false, fmt.Errorf(tr("reading directory %[1]s content: %[2]w", d, err)) + return false, fmt.Errorf("%s: %w", i18n.Tr("reading directory %[1]s content", d), err) } dirContent.FilterOutDirs() headerExtensions := []string{} diff --git a/arduino/libraries/testdata/LegacyLib/LegacyLib.h b/internal/arduino/libraries/testdata/LegacyLib/LegacyLib.h similarity index 100% rename from arduino/libraries/testdata/LegacyLib/LegacyLib.h rename to internal/arduino/libraries/testdata/LegacyLib/LegacyLib.h diff --git a/arduino/libraries/testdata/LibWithNonUTF8Properties/library.properties b/internal/arduino/libraries/testdata/LibWithNonUTF8Properties/library.properties similarity index 100% rename from arduino/libraries/testdata/LibWithNonUTF8Properties/library.properties rename to internal/arduino/libraries/testdata/LibWithNonUTF8Properties/library.properties diff --git a/arduino/libraries/testdata/LibWithNonUTF8Properties/src/LibWithNonUTF8Properties.h b/internal/arduino/libraries/testdata/LibWithNonUTF8Properties/src/LibWithNonUTF8Properties.h similarity index 100% rename from arduino/libraries/testdata/LibWithNonUTF8Properties/src/LibWithNonUTF8Properties.h rename to internal/arduino/libraries/testdata/LibWithNonUTF8Properties/src/LibWithNonUTF8Properties.h diff --git a/arduino/libraries/testdata/TestLib/library.properties b/internal/arduino/libraries/testdata/TestLib/library.properties similarity index 100% rename from arduino/libraries/testdata/TestLib/library.properties rename to internal/arduino/libraries/testdata/TestLib/library.properties diff --git a/arduino/libraries/testdata/TestLib/src/TestLib.h b/internal/arduino/libraries/testdata/TestLib/src/TestLib.h similarity index 100% rename from arduino/libraries/testdata/TestLib/src/TestLib.h rename to internal/arduino/libraries/testdata/TestLib/src/TestLib.h diff --git a/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.ino b/internal/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.ino similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.ino rename to internal/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.ino diff --git a/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.pde b/internal/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.pde similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.pde rename to internal/arduino/libraries/testdata/TestLibExamples/examples/MultipleFiles/MultipleFiles.pde diff --git a/arduino/libraries/testdata/TestLibExamples/examples/WrongCasing/wrongCasing.ino b/internal/arduino/libraries/testdata/TestLibExamples/examples/WrongCasing/wrongCasing.ino similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/examples/WrongCasing/wrongCasing.ino rename to internal/arduino/libraries/testdata/TestLibExamples/examples/WrongCasing/wrongCasing.ino diff --git a/arduino/libraries/testdata/TestLibExamples/examples/simple/simple.ino b/internal/arduino/libraries/testdata/TestLibExamples/examples/simple/simple.ino similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/examples/simple/simple.ino rename to internal/arduino/libraries/testdata/TestLibExamples/examples/simple/simple.ino diff --git a/arduino/libraries/testdata/TestLibExamples/library.properties b/internal/arduino/libraries/testdata/TestLibExamples/library.properties similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/library.properties rename to internal/arduino/libraries/testdata/TestLibExamples/library.properties diff --git a/arduino/libraries/testdata/TestLibExamples/src/TestLib.h b/internal/arduino/libraries/testdata/TestLibExamples/src/TestLib.h similarity index 100% rename from arduino/libraries/testdata/TestLibExamples/src/TestLib.h rename to internal/arduino/libraries/testdata/TestLibExamples/src/TestLib.h diff --git a/arduino/libraries/testdata/TestLibInDev/.development b/internal/arduino/libraries/testdata/TestLibInDev/.development similarity index 100% rename from arduino/libraries/testdata/TestLibInDev/.development rename to internal/arduino/libraries/testdata/TestLibInDev/.development diff --git a/arduino/libraries/testdata/TestLibInDev/library.properties b/internal/arduino/libraries/testdata/TestLibInDev/library.properties similarity index 100% rename from arduino/libraries/testdata/TestLibInDev/library.properties rename to internal/arduino/libraries/testdata/TestLibInDev/library.properties diff --git a/arduino/libraries/testdata/TestLibInDev/src/TestLib.h b/internal/arduino/libraries/testdata/TestLibInDev/src/TestLib.h similarity index 100% rename from arduino/libraries/testdata/TestLibInDev/src/TestLib.h rename to internal/arduino/libraries/testdata/TestLibInDev/src/TestLib.h diff --git a/arduino/monitor/monitor.go b/internal/arduino/monitor/monitor.go similarity index 91% rename from arduino/monitor/monitor.go rename to internal/arduino/monitor/monitor.go index 10650dcebc3..1e820ef5d81 100644 --- a/arduino/monitor/monitor.go +++ b/internal/arduino/monitor/monitor.go @@ -20,15 +20,16 @@ package monitor import ( "encoding/json" + "errors" "fmt" "io" "net" "strings" "time" - "github.com/arduino/arduino-cli/executils" - "github.com/arduino/arduino-cli/i18n" - "github.com/arduino/arduino-cli/version" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/version" + "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" ) @@ -36,7 +37,7 @@ import ( type PluggableMonitor struct { id string processArgs []string - process *executils.Process + process *paths.Process outgoingCommandsPipe io.Writer incomingMessagesChan <-chan *monitorMessage supportedProtocol string @@ -83,8 +84,6 @@ func (msg monitorMessage) String() string { return s } -var tr = i18n.Tr - // New create and connect to the given pluggable monitor func New(id string, args ...string) *PluggableMonitor { return &PluggableMonitor{ @@ -137,20 +136,20 @@ func (mon *PluggableMonitor) waitMessage(timeout time.Duration, expectedEvt stri } msg = m case <-time.After(timeout): - return nil, fmt.Errorf(tr("timeout waiting for message")) + return nil, errors.New(i18n.Tr("timeout waiting for message")) } if expectedEvt == "" { // No message processing required for this call return msg, nil } if msg.EventType != expectedEvt { - return msg, fmt.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), expectedEvt, msg.EventType) + return msg, errors.New(i18n.Tr("communication out of sync, expected '%[1]s', received '%[2]s'", expectedEvt, msg.EventType)) } if msg.Error { - return msg, fmt.Errorf(tr("command '%[1]s' failed: %[2]s"), expectedEvt, msg.Message) + return msg, errors.New(i18n.Tr("command '%[1]s' failed: %[2]s", expectedEvt, msg.Message)) } if strings.ToUpper(msg.Message) != "OK" { - return msg, fmt.Errorf(tr("communication out of sync, expected '%[1]s', received '%[2]s'"), "OK", msg.Message) + return msg, errors.New(i18n.Tr("communication out of sync, expected '%[1]s', received '%[2]s'", "OK", msg.Message)) } return msg, nil } @@ -172,7 +171,7 @@ func (mon *PluggableMonitor) sendCommand(command string) error { func (mon *PluggableMonitor) runProcess() error { mon.log.Infof("Starting monitor process") - proc, err := executils.NewProcess(nil, mon.processArgs...) + proc, err := paths.NewProcess(nil, mon.processArgs...) if err != nil { return err } @@ -233,7 +232,7 @@ func (mon *PluggableMonitor) Run() (err error) { if msg, err := mon.waitMessage(time.Second*10, "hello"); err != nil { return err } else if msg.ProtocolVersion > 1 { - return fmt.Errorf(tr("protocol version not supported: requested %[1]d, got %[2]d"), 1, msg.ProtocolVersion) + return errors.New(i18n.Tr("protocol version not supported: requested %[1]d, got %[2]d", 1, msg.ProtocolVersion)) } return nil } @@ -292,7 +291,7 @@ func (mon *PluggableMonitor) Close() error { if err := mon.sendCommand("CLOSE\n"); err != nil { return err } - _, err := mon.waitMessage(time.Millisecond*250, "close") + _, err := mon.waitMessage(time.Millisecond*5000, "close") return err } diff --git a/arduino/monitor/monitor_test.go b/internal/arduino/monitor/monitor_test.go similarity index 94% rename from arduino/monitor/monitor_test.go rename to internal/arduino/monitor/monitor_test.go index cf45771c4b1..45a6c2c5de1 100644 --- a/arduino/monitor/monitor_test.go +++ b/internal/arduino/monitor/monitor_test.go @@ -24,7 +24,6 @@ import ( "testing" "time" - "github.com/arduino/arduino-cli/executils" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" ) @@ -33,7 +32,7 @@ func TestDummyMonitor(t *testing.T) { // Build `dummy-monitor` helper inside testdata/dummy-monitor testDataDir, err := paths.New("testdata").Abs() require.NoError(t, err) - builder, err := executils.NewProcess(nil, "go", "install", "github.com/arduino/pluggable-monitor-protocol-handler/dummy-monitor@main") + builder, err := paths.NewProcess(nil, "go", "install", "github.com/arduino/pluggable-monitor-protocol-handler/dummy-monitor@main") fmt.Println(testDataDir.String()) env := os.Environ() env = append(env, "GOBIN="+testDataDir.String()) diff --git a/arduino/monitor/testdata/.gitignore b/internal/arduino/monitor/testdata/.gitignore similarity index 100% rename from arduino/monitor/testdata/.gitignore rename to internal/arduino/monitor/testdata/.gitignore diff --git a/arduino/resources/checksums.go b/internal/arduino/resources/checksums.go similarity index 69% rename from arduino/resources/checksums.go rename to internal/arduino/resources/checksums.go index cadd3ea6685..c9309f93e5b 100644 --- a/arduino/resources/checksums.go +++ b/internal/arduino/resources/checksums.go @@ -21,6 +21,7 @@ import ( "crypto/sha256" "encoding/hex" "encoding/json" + "errors" "fmt" "hash" "io" @@ -28,24 +29,23 @@ import ( "path/filepath" "strings" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" paths "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" ) -var tr = i18n.Tr - // TestLocalArchiveChecksum test if the checksum of the local archive match the checksum of the DownloadResource func (r *DownloadResource) TestLocalArchiveChecksum(downloadDir *paths.Path) (bool, error) { if r.Checksum == "" { - return false, fmt.Errorf(tr("missing checksum for: %s"), r.ArchiveFileName) + return false, errors.New(i18n.Tr("missing checksum for: %s", r.ArchiveFileName)) } split := strings.SplitN(r.Checksum, ":", 2) if len(split) != 2 { - return false, fmt.Errorf(tr("invalid checksum format: %s"), r.Checksum) + return false, errors.New(i18n.Tr("invalid checksum format: %s", r.Checksum)) } digest, err := hex.DecodeString(split[1]) if err != nil { - return false, fmt.Errorf(tr("invalid hash '%[1]s': %[2]s"), split[1], err) + return false, errors.New(i18n.Tr("invalid hash '%[1]s': %[2]s", split[1], err)) } // names based on: https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest @@ -58,64 +58,63 @@ func (r *DownloadResource) TestLocalArchiveChecksum(downloadDir *paths.Path) (bo case "MD5": algo = crypto.MD5.New() default: - return false, fmt.Errorf(tr("unsupported hash algorithm: %s"), split[0]) + return false, errors.New(i18n.Tr("unsupported hash algorithm: %s", split[0])) } filePath, err := r.ArchivePath(downloadDir) if err != nil { - return false, fmt.Errorf(tr("getting archive path: %s"), err) + return false, errors.New(i18n.Tr("getting archive path: %s", err)) } file, err := os.Open(filePath.String()) if err != nil { - return false, fmt.Errorf(tr("opening archive file: %s"), err) + return false, errors.New(i18n.Tr("opening archive file: %s", err)) } defer file.Close() if _, err := io.Copy(algo, file); err != nil { - return false, fmt.Errorf(tr("computing hash: %s"), err) + return false, errors.New(i18n.Tr("computing hash: %s", err)) } if !bytes.Equal(algo.Sum(nil), digest) { - return false, fmt.Errorf(tr("archive hash differs from hash in index")) + return false, errors.New(i18n.Tr("archive hash differs from hash in index")) } return true, nil } // TestLocalArchiveSize test if the local archive size match the DownloadResource size -func (r *DownloadResource) TestLocalArchiveSize(downloadDir *paths.Path) (bool, error) { +func (r *DownloadResource) TestLocalArchiveSize(downloadDir *paths.Path) error { filePath, err := r.ArchivePath(downloadDir) if err != nil { - return false, fmt.Errorf(tr("getting archive path: %s"), err) + return errors.New(i18n.Tr("getting archive path: %s", err)) } info, err := filePath.Stat() if err != nil { - return false, fmt.Errorf(tr("getting archive info: %s"), err) + return errors.New(i18n.Tr("getting archive info: %s", err)) } + // If the size do not match, just report a warning and continue + // (the checksum is sufficient to ensure the integrity of the archive) if info.Size() != r.Size { - return false, fmt.Errorf("%s: %d != %d", tr("fetched archive size differs from size specified in index"), info.Size(), r.Size) + logrus.Warningf("%s: %d != %d", i18n.Tr("fetched archive size differs from size specified in index"), info.Size(), r.Size) } - - return true, nil + return nil } // TestLocalArchiveIntegrity checks for integrity of the local archive. func (r *DownloadResource) TestLocalArchiveIntegrity(downloadDir *paths.Path) (bool, error) { if cached, err := r.IsCached(downloadDir); err != nil { - return false, fmt.Errorf(tr("testing if archive is cached: %s"), err) + return false, errors.New(i18n.Tr("testing if archive is cached: %s", err)) } else if !cached { return false, nil } - if ok, err := r.TestLocalArchiveSize(downloadDir); err != nil { - return false, fmt.Errorf(tr("testing archive size: %s"), err) - } else if !ok { - return false, nil + if err := r.TestLocalArchiveSize(downloadDir); err != nil { + return false, errors.New(i18n.Tr("testing archive size: %s", err)) } ok, err := r.TestLocalArchiveChecksum(downloadDir) if err != nil { - return false, fmt.Errorf(tr("testing archive checksum: %s"), err) + return false, errors.New(i18n.Tr("testing archive checksum: %s", err)) } return ok, nil } @@ -141,7 +140,7 @@ func computeDirChecksum(root string) (string, error) { } defer f.Close() if _, err := io.Copy(hash, f); err != nil { - return fmt.Errorf(tr("failed to compute hash of file \"%s\""), info.Name()) + return errors.New(i18n.Tr("failed to compute hash of file \"%s\"", info.Name())) } return nil }) @@ -164,7 +163,7 @@ func CheckDirChecksum(root string) (bool, error) { return false, err } if file.Checksum != checksum { - return false, fmt.Errorf(tr("Checksum differs from checksum in package.json")) + return false, errors.New(i18n.Tr("Checksum differs from checksum in package.json")) } return true, nil diff --git a/arduino/resources/download.go b/internal/arduino/resources/download.go similarity index 69% rename from arduino/resources/download.go rename to internal/arduino/resources/download.go index ac8946b155c..37c622b2aab 100644 --- a/arduino/resources/download.go +++ b/internal/arduino/resources/download.go @@ -16,10 +16,12 @@ package resources import ( - "fmt" + "context" + "errors" "os" - "github.com/arduino/arduino-cli/arduino/httpclient" + "github.com/arduino/arduino-cli/internal/arduino/httpclient" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" "go.bug.st/downloader/v2" @@ -28,10 +30,10 @@ import ( // Download performs a download loop using the provided downloader.Config. // Messages are passed back to the DownloadProgressCB using label as text for the File field. // queryParameter is passed for analysis purposes. -func (r *DownloadResource) Download(downloadDir *paths.Path, config *downloader.Config, label string, downloadCB rpc.DownloadProgressCB, queryParameter string) error { +func (r *DownloadResource) Download(ctx context.Context, downloadDir *paths.Path, config downloader.Config, label string, downloadCB rpc.DownloadProgressCB, queryParameter string) error { path, err := r.ArchivePath(downloadDir) if err != nil { - return fmt.Errorf(tr("getting archive path: %s"), err) + return errors.New(i18n.Tr("getting archive path: %s", err)) } if _, err := path.Stat(); os.IsNotExist(err) { @@ -41,16 +43,16 @@ func (r *DownloadResource) Download(downloadDir *paths.Path, config *downloader. ok, err := r.TestLocalArchiveIntegrity(downloadDir) if err != nil || !ok { if err := path.Remove(); err != nil { - return fmt.Errorf(tr("removing corrupted archive file: %s"), err) + return errors.New(i18n.Tr("removing corrupted archive file: %s", err)) } } else { // File is cached, nothing to do here downloadCB.Start(r.URL, label) - downloadCB.End(true, tr("%s already downloaded", label)) + downloadCB.End(true, i18n.Tr("%s already downloaded", label)) return nil } } else { - return fmt.Errorf(tr("getting archive file info: %s"), err) + return errors.New(i18n.Tr("getting archive file info: %s", err)) } - return httpclient.DownloadFile(path, r.URL, queryParameter, label, downloadCB, config) + return httpclient.DownloadFile(ctx, path, r.URL, queryParameter, label, downloadCB, config) } diff --git a/arduino/resources/helpers.go b/internal/arduino/resources/helpers.go similarity index 91% rename from arduino/resources/helpers.go rename to internal/arduino/resources/helpers.go index 39349dd28a9..c9f87e7d02e 100644 --- a/arduino/resources/helpers.go +++ b/internal/arduino/resources/helpers.go @@ -16,8 +16,9 @@ package resources import ( - "fmt" + "errors" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" ) @@ -35,7 +36,7 @@ func (r *DownloadResource) ArchivePath(downloadDir *paths.Path) (*paths.Path, er func (r *DownloadResource) IsCached(downloadDir *paths.Path) (bool, error) { archivePath, err := r.ArchivePath(downloadDir) if err != nil { - return false, fmt.Errorf(tr("getting archive path: %s"), err) + return false, errors.New(i18n.Tr("getting archive path: %s", err)) } return archivePath.Exist(), nil } diff --git a/arduino/resources/helpers_test.go b/internal/arduino/resources/helpers_test.go similarity index 78% rename from arduino/resources/helpers_test.go rename to internal/arduino/resources/helpers_test.go index f8dea9abf43..ad1d6805254 100644 --- a/arduino/resources/helpers_test.go +++ b/internal/arduino/resources/helpers_test.go @@ -16,17 +16,17 @@ package resources import ( + "context" "net/http" "net/http/httptest" "os" "strings" "testing" - "github.com/arduino/arduino-cli/arduino/httpclient" + "github.com/arduino/arduino-cli/internal/cli/configuration" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" - "go.bug.st/downloader/v2" ) type EchoHandler struct{} @@ -37,8 +37,7 @@ func (h *EchoHandler) ServeHTTP(writer http.ResponseWriter, request *http.Reques } func TestDownloadApplyUserAgentHeaderUsingConfig(t *testing.T) { - goldUserAgentValue := "arduino-cli/0.0.0-test.preview (amd64; linux; go1.12.4) Commit:deadbeef/Build:2019-06-12 11:11:11.111" - goldUserAgentString := "User-Agent: " + goldUserAgentValue + goldUserAgentValue := "arduino-cli/0.0.0-test.preview" tmp, err := paths.MkTempDir("", "") require.NoError(t, err) @@ -54,9 +53,11 @@ func TestDownloadApplyUserAgentHeaderUsingConfig(t *testing.T) { URL: srv.URL, } - httpClient := httpclient.NewWithConfig(&httpclient.Config{UserAgent: goldUserAgentValue}) - - err = r.Download(tmp, &downloader.Config{HttpClient: *httpClient}, "", func(progress *rpc.DownloadProgress) {}, "") + settings := configuration.NewSettings() + settings.Set("network.user_agent_ext", goldUserAgentValue) + config, err := settings.DownloaderConfig(context.Background()) + require.NoError(t, err) + err = r.Download(context.Background(), tmp, config, "", func(progress *rpc.DownloadProgress) {}, "") require.NoError(t, err) // leverage the download helper to download the echo for the request made by the downloader itself @@ -71,12 +72,11 @@ func TestDownloadApplyUserAgentHeaderUsingConfig(t *testing.T) { require.NoError(t, err) requestLines := strings.Split(string(b), "\r\n") - userAgentHeaderString := "" + userAgentHeader := "" for _, line := range requestLines { if strings.Contains(line, "User-Agent: ") { - userAgentHeaderString = line + userAgentHeader = line } } - require.Equal(t, goldUserAgentString, userAgentHeaderString) - + require.Contains(t, userAgentHeader, goldUserAgentValue) } diff --git a/arduino/resources/index.go b/internal/arduino/resources/index.go similarity index 66% rename from arduino/resources/index.go rename to internal/arduino/resources/index.go index ffd9bb4b0b0..57087b5fa33 100644 --- a/arduino/resources/index.go +++ b/internal/arduino/resources/index.go @@ -22,12 +22,13 @@ import ( "path" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/httpclient" - "github.com/arduino/arduino-cli/arduino/security" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/httpclient" + "github.com/arduino/arduino-cli/internal/arduino/security" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" - "github.com/codeclysm/extract/v3" + "github.com/codeclysm/extract/v4" "github.com/sirupsen/logrus" "go.bug.st/downloader/v2" ) @@ -43,7 +44,7 @@ type IndexResource struct { func (res *IndexResource) IndexFileName() (string, error) { filename := path.Base(res.URL.Path) // == package_index.json[.gz] || packacge_index.tar.bz2 if filename == "." || filename == "" || filename == "/" { - return "", &arduino.InvalidURLError{} + return "", &cmderrors.InvalidURLError{} } switch { case strings.HasSuffix(filename, ".json"): @@ -58,16 +59,16 @@ func (res *IndexResource) IndexFileName() (string, error) { // Download will download the index and possibly check the signature using the Arduino's public key. // If the file is in .gz format it will be unpacked first. -func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadProgressCB) error { +func (res *IndexResource) Download(ctx context.Context, destDir *paths.Path, downloadCB rpc.DownloadProgressCB, config downloader.Config) error { // Create destination directory if err := destDir.MkdirAll(); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Can't create data directory %s", destDir), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Can't create data directory %s", destDir), Cause: err} } // Create a temp dir to stage all downloads tmp, err := paths.MkTempDir("", "library_index_download") if err != nil { - return &arduino.TempDirCreationFailedError{Cause: err} + return &cmderrors.TempDirCreationFailedError{Cause: err} } defer tmp.RemoveAll() @@ -78,8 +79,8 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP return err } tmpIndexPath := tmp.Join(downloadFileName) - if err := httpclient.DownloadFile(tmpIndexPath, res.URL.String(), "", tr("Downloading index: %s", downloadFileName), downloadCB, nil, downloader.NoResume); err != nil { - return &arduino.FailedDownloadError{Message: tr("Error downloading index '%s'", res.URL), Cause: err} + if err := httpclient.DownloadFile(ctx, tmpIndexPath, res.URL.String(), "", i18n.Tr("Downloading index: %s", downloadFileName), downloadCB, config, downloader.NoResume); err != nil { + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Error downloading index '%s'", res.URL), Cause: err} } var signaturePath, tmpSignaturePath *paths.Path @@ -95,19 +96,19 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP // Extract archive in a tmp/archive subdirectory f, err := tmpIndexPath.Open() if err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error opening %s", tmpIndexPath), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error opening %s", tmpIndexPath), Cause: err} } defer f.Close() tmpArchivePath := tmp.Join("archive") _ = tmpArchivePath.MkdirAll() - if err := extract.Bz2(context.Background(), f, tmpArchivePath.String(), nil); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error extracting %s", tmpIndexPath), Cause: err} + if err := extract.Bz2(ctx, f, tmpArchivePath.String(), nil); err != nil { + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error extracting %s", tmpIndexPath), Cause: err} } // Look for index.json tmpIndexPath = tmpArchivePath.Join(indexFileName) if !tmpIndexPath.Exist() { - return &arduino.NotFoundError{Message: tr("Invalid archive: file %{1}s not found in archive %{2}s", indexFileName, tmpArchivePath.Base())} + return &cmderrors.NotFoundError{Message: i18n.Tr("Invalid archive: file %[1]s not found in archive %[2]s", indexFileName, tmpArchivePath.Base())} } // Look for signature @@ -120,7 +121,7 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP } else if strings.HasSuffix(downloadFileName, ".gz") { tmpUnzippedIndexPath := tmp.Join(indexFileName) if err := paths.GUnzip(tmpIndexPath, tmpUnzippedIndexPath); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error extracting %s", indexFileName), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error extracting %s", indexFileName), Cause: err} } tmpIndexPath = tmpUnzippedIndexPath } @@ -133,8 +134,8 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP // Download signature signaturePath = destDir.Join(signatureFileName) tmpSignaturePath = tmp.Join(signatureFileName) - if err := httpclient.DownloadFile(tmpSignaturePath, res.SignatureURL.String(), "", tr("Downloading index signature: %s", signatureFileName), downloadCB, nil, downloader.NoResume); err != nil { - return &arduino.FailedDownloadError{Message: tr("Error downloading index signature '%s'", res.SignatureURL), Cause: err} + if err := httpclient.DownloadFile(ctx, tmpSignaturePath, res.SignatureURL.String(), "", i18n.Tr("Downloading index signature: %s", signatureFileName), downloadCB, config, downloader.NoResume); err != nil { + return &cmderrors.FailedDownloadError{Message: i18n.Tr("Error downloading index signature '%s'", res.SignatureURL), Cause: err} } hasSignature = true @@ -143,13 +144,13 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP if hasSignature { // Check signature... if valid, _, err := security.VerifyArduinoDetachedSignature(tmpIndexPath, tmpSignaturePath); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error verifying signature"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error verifying signature"), Cause: err} } else if !valid { - return &arduino.SignatureVerificationFailedError{File: res.URL.String()} + return &cmderrors.SignatureVerificationFailedError{File: res.URL.String()} } } else { if res.EnforceSignatureVerification { - return &arduino.PermissionDeniedError{Message: tr("Error verifying signature"), Cause: errors.New(tr("missing signature"))} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error verifying signature"), Cause: errors.New(i18n.Tr("missing signature"))} } } @@ -161,23 +162,23 @@ func (res *IndexResource) Download(destDir *paths.Path, downloadCB rpc.DownloadP oldIndex := tmp.Join("old_index") if indexPath.Exist() { if err := indexPath.CopyTo(oldIndex); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error saving downloaded index"), Cause: err} } defer oldIndex.CopyTo(indexPath) // will silently fail in case of success } oldSignature := tmp.Join("old_signature") if oldSignature.Exist() { if err := signaturePath.CopyTo(oldSignature); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index signature"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error saving downloaded index signature"), Cause: err} } defer oldSignature.CopyTo(signaturePath) // will silently fail in case of success } if err := tmpIndexPath.CopyTo(indexPath); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error saving downloaded index"), Cause: err} } if hasSignature { if err := tmpSignaturePath.CopyTo(signaturePath); err != nil { - return &arduino.PermissionDeniedError{Message: tr("Error saving downloaded index signature"), Cause: err} + return &cmderrors.PermissionDeniedError{Message: i18n.Tr("Error saving downloaded index signature"), Cause: err} } } _ = oldIndex.Remove() diff --git a/arduino/resources/install.go b/internal/arduino/resources/install.go similarity index 69% rename from arduino/resources/install.go rename to internal/arduino/resources/install.go index 6b7c09bb9e1..aa9a94e5248 100644 --- a/arduino/resources/install.go +++ b/internal/arduino/resources/install.go @@ -17,46 +17,56 @@ package resources import ( "context" - "fmt" + "errors" "os" + "github.com/arduino/arduino-cli/internal/i18n" paths "github.com/arduino/go-paths-helper" - "github.com/codeclysm/extract/v3" + "github.com/codeclysm/extract/v4" "go.bug.st/cleanup" ) +type IntegrityCheckMode int + +const ( + IntegrityCheckFull IntegrityCheckMode = iota + IntegrityCheckNone +) + // Install installs the resource in three steps: // - the archive is unpacked in a temporary subdir of tempPath // - there should be only one root dir in the unpacked content // - the only root dir is moved/renamed to/as the destination directory // Note that tempPath and destDir must be on the same filesystem partition // otherwise the last step will fail. -func (release *DownloadResource) Install(downloadDir, tempPath, destDir *paths.Path) error { - // Check the integrity of the package - if ok, err := release.TestLocalArchiveIntegrity(downloadDir); err != nil { - return fmt.Errorf(tr("testing local archive integrity: %s", err)) - } else if !ok { - return fmt.Errorf(tr("checking local archive integrity")) +func (release *DownloadResource) Install(downloadDir, tempPath, destDir *paths.Path, checks IntegrityCheckMode) error { + if checks != IntegrityCheckNone { + // Check the integrity of the package + if ok, err := release.TestLocalArchiveIntegrity(downloadDir); err != nil { + return errors.New(i18n.Tr("testing local archive integrity: %s", err)) + } else if !ok { + return errors.New(i18n.Tr("checking local archive integrity")) + } } // Create a temporary dir to extract package if err := tempPath.MkdirAll(); err != nil { - return fmt.Errorf(tr("creating temp dir for extraction: %s", err)) + return errors.New(i18n.Tr("creating temp dir for extraction: %s", err)) } tempDir, err := tempPath.MkTempDir("package-") if err != nil { - return fmt.Errorf(tr("creating temp dir for extraction: %s", err)) + return errors.New(i18n.Tr("creating temp dir for extraction: %s", err)) } defer tempDir.RemoveAll() // Obtain the archive path and open it archivePath, err := release.ArchivePath(downloadDir) if err != nil { - return fmt.Errorf(tr("getting archive path: %s", err)) + return errors.New(i18n.Tr("getting archive path: %s", err)) } file, err := os.Open(archivePath.String()) if err != nil { - return fmt.Errorf(tr("opening archive file: %s", err)) + return errors.New(i18n.Tr("opening archive file: %s", err)) } defer file.Close() @@ -64,13 +74,13 @@ func (release *DownloadResource) Install(downloadDir, tempPath, destDir *paths.P ctx, cancel := cleanup.InterruptableContext(context.Background()) defer cancel() if err := extract.Archive(ctx, file, tempDir.String(), nil); err != nil { - return fmt.Errorf(tr("extracting archive: %s", err)) + return errors.New(i18n.Tr("extracting archive: %s", err)) } // Check package content and find package root dir root, err := findPackageRoot(tempDir) if err != nil { - return fmt.Errorf(tr("searching package root dir: %s", err)) + return errors.New(i18n.Tr("searching package root dir: %s", err)) } // Ensure container dir exists @@ -93,16 +103,10 @@ func (release *DownloadResource) Install(downloadDir, tempPath, destDir *paths.P if err := root.Rename(destDir); err != nil { // Copy the extracted root directory to the destination directory, if move failed if err := root.CopyDirTo(destDir); err != nil { - return fmt.Errorf(tr("moving extracted archive to destination dir: %s", err)) + return errors.New(i18n.Tr("moving extracted archive to destination dir: %s", err)) } } - // TODO - // // Create a package file - // if err := createPackageFile(destDir); err != nil { - // return err - // } - return nil } @@ -118,17 +122,17 @@ func IsDirEmpty(path *paths.Path) (bool, error) { func findPackageRoot(parent *paths.Path) (*paths.Path, error) { files, err := parent.ReadDir() if err != nil { - return nil, fmt.Errorf(tr("reading package root dir: %s", err)) + return nil, errors.New(i18n.Tr("reading package root dir: %s", err)) } files.FilterDirs() files.FilterOutPrefix("__MACOSX") if len(files) == 0 { - return nil, fmt.Errorf(tr("files in archive must be placed in a subdirectory")) + return nil, errors.New(i18n.Tr("files in archive must be placed in a subdirectory")) } if len(files) > 1 { - return nil, fmt.Errorf(tr("no unique root dir in archive, found '%[1]s' and '%[2]s'", files[0], files[1])) + return nil, errors.New(i18n.Tr("no unique root dir in archive, found '%[1]s' and '%[2]s'", files[0], files[1])) } return files[0], nil diff --git a/arduino/resources/install_test.go b/internal/arduino/resources/install_test.go similarity index 96% rename from arduino/resources/install_test.go rename to internal/arduino/resources/install_test.go index ce17bcbd293..4db1a9aef22 100644 --- a/arduino/resources/install_test.go +++ b/internal/arduino/resources/install_test.go @@ -44,7 +44,7 @@ func TestInstallPlatform(t *testing.T) { Size: 157, } - require.NoError(t, r.Install(downloadDir, tempPath, destDir)) + require.NoError(t, r.Install(downloadDir, tempPath, destDir, IntegrityCheckFull)) }) tests := []struct { @@ -82,7 +82,7 @@ func TestInstallPlatform(t *testing.T) { require.NoError(t, err) require.NoError(t, os.WriteFile(path.Join(downloadDir.String(), testFileName), origin, 0644)) - err = test.downloadResource.Install(downloadDir, tempPath, destDir) + err = test.downloadResource.Install(downloadDir, tempPath, destDir, IntegrityCheckFull) require.Error(t, err) require.Contains(t, err.Error(), test.error) }) diff --git a/arduino/resources/resources_test.go b/internal/arduino/resources/resources_test.go similarity index 68% rename from arduino/resources/resources_test.go rename to internal/arduino/resources/resources_test.go index 9cf8ae54509..3cd1d7a0098 100644 --- a/arduino/resources/resources_test.go +++ b/internal/arduino/resources/resources_test.go @@ -16,6 +16,7 @@ package resources import ( + "context" "crypto" "encoding/hex" "fmt" @@ -49,7 +50,7 @@ func TestDownloadAndChecksums(t *testing.T) { require.NoError(t, err) downloadAndTestChecksum := func() { - err := r.Download(tmp, &downloader.Config{}, "", func(*rpc.DownloadProgress) {}, "") + err := r.Download(context.Background(), tmp, downloader.Config{}, "", func(*rpc.DownloadProgress) {}, "") require.NoError(t, err) data, err := testFile.ReadFile() @@ -63,7 +64,7 @@ func TestDownloadAndChecksums(t *testing.T) { downloadAndTestChecksum() // Download with cached file - err = r.Download(tmp, &downloader.Config{}, "", func(*rpc.DownloadProgress) {}, "") + err = r.Download(context.Background(), tmp, downloader.Config{}, "", func(*rpc.DownloadProgress) {}, "") require.NoError(t, err) // Download if cached file has data in excess (redownload) @@ -81,6 +82,10 @@ func TestDownloadAndChecksums(t *testing.T) { require.NoError(t, err) downloadAndTestChecksum() + require.NoError(t, r.TestLocalArchiveSize(tmp)) + r.Size = 500 + require.NoError(t, r.TestLocalArchiveSize(tmp)) + r.Checksum = "" _, err = r.TestLocalArchiveChecksum(tmp) require.Error(t, err) @@ -116,6 +121,7 @@ func TestDownloadAndChecksums(t *testing.T) { } func TestIndexDownloadAndSignatureWithinArchive(t *testing.T) { + ctx := context.Background() // Spawn test webserver mux := http.NewServeMux() fs := http.FileServer(http.Dir("testdata")) @@ -125,29 +131,45 @@ func TestIndexDownloadAndSignatureWithinArchive(t *testing.T) { require.NoError(t, err) defer ln.Close() go server.Serve(ln) + defer server.Close() - validIdxURL, err := url.Parse("http://" + ln.Addr().String() + "/valid/package_index.tar.bz2") - require.NoError(t, err) - idxResource := &IndexResource{URL: validIdxURL} - destDir, err := paths.MkTempDir("", "") - require.NoError(t, err) - defer destDir.RemoveAll() - err = idxResource.Download(destDir, func(curr *rpc.DownloadProgress) {}) - require.NoError(t, err) - require.True(t, destDir.Join("package_index.json").Exist()) - require.True(t, destDir.Join("package_index.json.sig").Exist()) - - invalidIdxURL, err := url.Parse("http://" + ln.Addr().String() + "/invalid/package_index.tar.bz2") - require.NoError(t, err) - invIdxResource := &IndexResource{URL: invalidIdxURL} - invDestDir, err := paths.MkTempDir("", "") - require.NoError(t, err) - defer invDestDir.RemoveAll() - err = invIdxResource.Download(invDestDir, func(curr *rpc.DownloadProgress) {}) - require.Error(t, err) - require.Contains(t, err.Error(), "invalid signature") - require.False(t, invDestDir.Join("package_index.json").Exist()) - require.False(t, invDestDir.Join("package_index.json.sig").Exist()) + { + validIdxURL, err := url.Parse("http://" + ln.Addr().String() + "/valid_signature_in_the_future/package_index.tar.bz2") + require.NoError(t, err) + idxResource := &IndexResource{URL: validIdxURL} + destDir, err := paths.MkTempDir("", "") + require.NoError(t, err) + defer destDir.RemoveAll() + err = idxResource.Download(ctx, destDir, func(curr *rpc.DownloadProgress) {}, downloader.GetDefaultConfig()) + require.ErrorContains(t, err, "is your system clock set correctly?") + require.False(t, destDir.Join("package_index.json").Exist()) + require.False(t, destDir.Join("package_index.json.sig").Exist()) + } + { + validIdxURL, err := url.Parse("http://" + ln.Addr().String() + "/valid/package_index.tar.bz2") + require.NoError(t, err) + idxResource := &IndexResource{URL: validIdxURL} + destDir, err := paths.MkTempDir("", "") + require.NoError(t, err) + defer destDir.RemoveAll() + err = idxResource.Download(ctx, destDir, func(curr *rpc.DownloadProgress) {}, downloader.GetDefaultConfig()) + require.NoError(t, err) + require.True(t, destDir.Join("package_index.json").Exist()) + require.True(t, destDir.Join("package_index.json.sig").Exist()) + } + { + invalidIdxURL, err := url.Parse("http://" + ln.Addr().String() + "/invalid/package_index.tar.bz2") + require.NoError(t, err) + invIdxResource := &IndexResource{URL: invalidIdxURL} + invDestDir, err := paths.MkTempDir("", "") + require.NoError(t, err) + defer invDestDir.RemoveAll() + err = invIdxResource.Download(ctx, invDestDir, func(curr *rpc.DownloadProgress) {}, downloader.GetDefaultConfig()) + require.Error(t, err) + require.Contains(t, err.Error(), "invalid signature") + require.False(t, invDestDir.Join("package_index.json").Exist()) + require.False(t, invDestDir.Join("package_index.json.sig").Exist()) + } } func TestIndexFileName(t *testing.T) { diff --git a/arduino/resources/structs.go b/internal/arduino/resources/structs.go similarity index 100% rename from arduino/resources/structs.go rename to internal/arduino/resources/structs.go diff --git a/arduino/resources/testdata/invalid/package_index.tar.bz2 b/internal/arduino/resources/testdata/invalid/package_index.tar.bz2 similarity index 100% rename from arduino/resources/testdata/invalid/package_index.tar.bz2 rename to internal/arduino/resources/testdata/invalid/package_index.tar.bz2 diff --git a/arduino/resources/testdata/invalid/platform_with_multiple_root_folders.tar.bz2 b/internal/arduino/resources/testdata/invalid/platform_with_multiple_root_folders.tar.bz2 similarity index 100% rename from arduino/resources/testdata/invalid/platform_with_multiple_root_folders.tar.bz2 rename to internal/arduino/resources/testdata/invalid/platform_with_multiple_root_folders.tar.bz2 diff --git a/arduino/resources/testdata/invalid/platform_without_root_folder.tar.bz2 b/internal/arduino/resources/testdata/invalid/platform_without_root_folder.tar.bz2 similarity index 100% rename from arduino/resources/testdata/invalid/platform_without_root_folder.tar.bz2 rename to internal/arduino/resources/testdata/invalid/platform_without_root_folder.tar.bz2 diff --git a/arduino/resources/testdata/valid/package_index.tar.bz2 b/internal/arduino/resources/testdata/valid/package_index.tar.bz2 similarity index 100% rename from arduino/resources/testdata/valid/package_index.tar.bz2 rename to internal/arduino/resources/testdata/valid/package_index.tar.bz2 diff --git a/arduino/resources/testdata/valid/platform_with_root_and__MACOSX_folder.tar.bz2 b/internal/arduino/resources/testdata/valid/platform_with_root_and__MACOSX_folder.tar.bz2 similarity index 100% rename from arduino/resources/testdata/valid/platform_with_root_and__MACOSX_folder.tar.bz2 rename to internal/arduino/resources/testdata/valid/platform_with_root_and__MACOSX_folder.tar.bz2 diff --git a/internal/arduino/resources/testdata/valid_signature_in_the_future/package_index.tar.bz2 b/internal/arduino/resources/testdata/valid_signature_in_the_future/package_index.tar.bz2 new file mode 100644 index 00000000000..22284c67be4 Binary files /dev/null and b/internal/arduino/resources/testdata/valid_signature_in_the_future/package_index.tar.bz2 differ diff --git a/arduino/security/keys/arduino_public.gpg.key b/internal/arduino/security/keys/arduino_public.gpg.key similarity index 100% rename from arduino/security/keys/arduino_public.gpg.key rename to internal/arduino/security/keys/arduino_public.gpg.key diff --git a/arduino/security/signature_test.go b/internal/arduino/security/signature_test.go similarity index 100% rename from arduino/security/signature_test.go rename to internal/arduino/security/signature_test.go diff --git a/arduino/security/signatures.go b/internal/arduino/security/signatures.go similarity index 82% rename from arduino/security/signatures.go rename to internal/arduino/security/signatures.go index dfe9b959814..ebd86e4a037 100644 --- a/arduino/security/signatures.go +++ b/internal/arduino/security/signatures.go @@ -16,18 +16,18 @@ package security import ( + "bytes" "embed" - "fmt" + "errors" "io" "os" "github.com/ProtonMail/go-crypto/openpgp" - "github.com/arduino/arduino-cli/i18n" + pgperrors "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" ) -var tr = i18n.Tr - //go:embed keys/* var keys embed.FS @@ -71,18 +71,21 @@ func VerifyDetachedSignature(targetPath *paths.Path, signaturePath *paths.Path, func VerifySignature(targetPath *paths.Path, signaturePath *paths.Path, arduinoKeyringFile io.Reader) (bool, *openpgp.Entity, error) { keyRing, err := openpgp.ReadKeyRing(arduinoKeyringFile) if err != nil { - return false, nil, fmt.Errorf(tr("retrieving Arduino public keys: %s"), err) + return false, nil, errors.New(i18n.Tr("retrieving Arduino public keys: %s", err)) } - target, err := targetPath.Open() + target, err := targetPath.ReadFile() if err != nil { - return false, nil, fmt.Errorf(tr("opening target file: %s"), err) + return false, nil, errors.New(i18n.Tr("opening target file: %s", err)) } - defer target.Close() - signature, err := signaturePath.Open() + signature, err := signaturePath.ReadFile() if err != nil { - return false, nil, fmt.Errorf(tr("opening signature file: %s"), err) + return false, nil, errors.New(i18n.Tr("opening signature file: %s", err)) + } + signer, err := openpgp.CheckDetachedSignature(keyRing, bytes.NewBuffer(target), bytes.NewBuffer(signature), nil) + + if errors.Is(err, pgperrors.ErrSignatureExpired) { + err = errors.New(i18n.Tr("signature expired: is your system clock set correctly?")) } - defer signature.Close() - signer, err := openpgp.CheckDetachedSignature(keyRing, target, signature, nil) + return (signer != nil && err == nil), signer, err } diff --git a/arduino/security/testdata/module_firmware_index.json b/internal/arduino/security/testdata/module_firmware_index.json similarity index 100% rename from arduino/security/testdata/module_firmware_index.json rename to internal/arduino/security/testdata/module_firmware_index.json diff --git a/arduino/security/testdata/module_firmware_index.json.sig b/internal/arduino/security/testdata/module_firmware_index.json.sig similarity index 100% rename from arduino/security/testdata/module_firmware_index.json.sig rename to internal/arduino/security/testdata/module_firmware_index.json.sig diff --git a/arduino/security/testdata/module_firmware_index_public.gpg.key b/internal/arduino/security/testdata/module_firmware_index_public.gpg.key similarity index 100% rename from arduino/security/testdata/module_firmware_index_public.gpg.key rename to internal/arduino/security/testdata/module_firmware_index_public.gpg.key diff --git a/arduino/security/testdata/package_index.json b/internal/arduino/security/testdata/package_index.json similarity index 100% rename from arduino/security/testdata/package_index.json rename to internal/arduino/security/testdata/package_index.json diff --git a/arduino/security/testdata/package_index.json.sig b/internal/arduino/security/testdata/package_index.json.sig similarity index 100% rename from arduino/security/testdata/package_index.json.sig rename to internal/arduino/security/testdata/package_index.json.sig diff --git a/arduino/sketch/profiles.go b/internal/arduino/sketch/profiles.go similarity index 66% rename from arduino/sketch/profiles.go rename to internal/arduino/sketch/profiles.go index 93fcdf11787..cd32ccdf681 100644 --- a/arduino/sketch/profiles.go +++ b/internal/arduino/sketch/profiles.go @@ -18,12 +18,15 @@ package sketch import ( "crypto/sha256" "encoding/hex" + "errors" "fmt" "net/url" "regexp" "strings" - "github.com/arduino/arduino-cli/arduino/utils" + "github.com/arduino/arduino-cli/internal/arduino/utils" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" semver "go.bug.st/relaxed-semver" "gopkg.in/yaml.v3" @@ -31,20 +34,24 @@ import ( // projectRaw is a support struct used only to unmarshal the yaml type projectRaw struct { - ProfilesRaw yaml.Node `yaml:"profiles"` - DefaultProfile string `yaml:"default_profile"` - DefaultFqbn string `yaml:"default_fqbn"` - DefaultPort string `yaml:"default_port,omitempty"` - DefaultProtocol string `yaml:"default_protocol,omitempty"` + ProfilesRaw yaml.Node `yaml:"profiles"` + DefaultProfile string `yaml:"default_profile"` + DefaultFqbn string `yaml:"default_fqbn"` + DefaultPort string `yaml:"default_port,omitempty"` + DefaultPortConfig map[string]string `yaml:"default_port_config,omitempty"` + DefaultProtocol string `yaml:"default_protocol,omitempty"` + DefaultProgrammer string `yaml:"default_programmer,omitempty"` } // Project represents the sketch project file type Project struct { - Profiles []*Profile - DefaultProfile string - DefaultFqbn string - DefaultPort string - DefaultProtocol string + Profiles []*Profile + DefaultProfile string + DefaultFqbn string + DefaultPort string + DefaultPortConfig map[string]string + DefaultProtocol string + DefaultProgrammer string } // AsYaml outputs the sketch project file as YAML @@ -65,13 +72,22 @@ func (p *Project) AsYaml() string { if p.DefaultPort != "" { res += fmt.Sprintf("default_port: %s\n", p.DefaultPort) } + if len(p.DefaultPortConfig) > 0 { + res += "default_port_config:\n" + for k, v := range p.DefaultPortConfig { + res += fmt.Sprintf(" %s: %s\n", k, v) + } + } if p.DefaultProtocol != "" { res += fmt.Sprintf("default_protocol: %s\n", p.DefaultProtocol) } + if p.DefaultProgrammer != "" { + res += fmt.Sprintf("default_programmer: %s\n", p.DefaultProgrammer) + } return res } -func (p *projectRaw) getProfiles() []*Profile { +func (p *projectRaw) getProfiles() ([]*Profile, error) { profiles := []*Profile{} for i, node := range p.ProfilesRaw.Content { if node.Tag != "!!str" { @@ -81,22 +97,48 @@ func (p *projectRaw) getProfiles() []*Profile { var profile Profile profile.Name = node.Value if err := p.ProfilesRaw.Content[i+1].Decode(&profile); err != nil { - panic(fmt.Sprintf("profiles parsing err: %v", err.Error())) + return nil, err } profiles = append(profiles, &profile) } - return profiles + return profiles, nil } // UnmarshalYAML decodes a Profiles section from YAML source. // Profile is a sketch profile, it contains a reference to all the resources // needed to build and upload a sketch type Profile struct { - Name string - Notes string `yaml:"notes"` - FQBN string `yaml:"fqbn"` - Platforms ProfileRequiredPlatforms `yaml:"platforms"` - Libraries ProfileRequiredLibraries `yaml:"libraries"` + Name string + Notes string `yaml:"notes"` + FQBN string `yaml:"fqbn"` + Port string `yaml:"port"` + PortConfig map[string]string `yaml:"port_config"` + Protocol string `yaml:"protocol"` + Programmer string `yaml:"programmer"` + Platforms ProfileRequiredPlatforms `yaml:"platforms"` + Libraries ProfileRequiredLibraries `yaml:"libraries"` +} + +// ToRpc converts this Profile to an rpc.SketchProfile +func (p *Profile) ToRpc() *rpc.SketchProfile { + var portConfig *rpc.MonitorPortConfiguration + if len(p.PortConfig) > 0 { + portConfig = &rpc.MonitorPortConfiguration{} + for k, v := range p.PortConfig { + portConfig.Settings = append(portConfig.Settings, &rpc.MonitorPortSetting{ + SettingId: k, + Value: v, + }) + } + } + return &rpc.SketchProfile{ + Name: p.Name, + Fqbn: p.FQBN, + Programmer: p.Programmer, + Port: p.Port, + PortConfig: portConfig, + Protocol: p.Protocol, + } } // AsYaml outputs the profile as Yaml @@ -106,6 +148,21 @@ func (p *Profile) AsYaml() string { res += fmt.Sprintf(" notes: %s\n", p.Notes) } res += fmt.Sprintf(" fqbn: %s\n", p.FQBN) + if p.Programmer != "" { + res += fmt.Sprintf(" programmer: %s\n", p.Programmer) + } + if p.Port != "" { + res += fmt.Sprintf(" port: %s\n", p.Port) + } + if p.Protocol != "" { + res += fmt.Sprintf(" protocol: %s\n", p.Protocol) + } + if len(p.PortConfig) > 0 { + res += " port_config:\n" + for k, v := range p.PortConfig { + res += fmt.Sprintf(" %s: %s\n", k, v) + } + } res += p.Platforms.AsYaml() res += p.Libraries.AsYaml() return res @@ -186,13 +243,13 @@ func (p *ProfilePlatformReference) UnmarshalYAML(unmarshal func(interface{}) err return err } if platformID, ok := data["platform"]; !ok { - return fmt.Errorf(tr("missing '%s' directive", "platform")) + return errors.New(i18n.Tr("missing '%s' directive", "platform")) } else if platformID, platformVersion, ok := parseNameAndVersion(platformID); !ok { - return fmt.Errorf(tr("invalid '%s' directive", "platform")) + return errors.New(i18n.Tr("invalid '%s' directive", "platform")) } else if c, err := semver.Parse(platformVersion); err != nil { - return fmt.Errorf("%s: %w", tr("error parsing version constraints"), err) + return fmt.Errorf("%s: %w", i18n.Tr("error parsing version constraints"), err) } else if split := strings.SplitN(platformID, ":", 2); len(split) != 2 { - return fmt.Errorf("%s: %s", tr("invalid platform identifier"), platformID) + return fmt.Errorf("%s: %s", i18n.Tr("invalid platform identifier"), platformID) } else { p.Packager = split[0] p.Architecture = split[1] @@ -202,7 +259,7 @@ func (p *ProfilePlatformReference) UnmarshalYAML(unmarshal func(interface{}) err if rawIndexURL, ok := data["platform_index_url"]; ok { indexURL, err := url.Parse(rawIndexURL) if err != nil { - return fmt.Errorf("%s: %w", tr("invalid platform index URL:"), err) + return fmt.Errorf("%s: %w", i18n.Tr("invalid platform index URL:"), err) } p.PlatformIndexURL = indexURL } @@ -222,9 +279,9 @@ func (l *ProfileLibraryReference) UnmarshalYAML(unmarshal func(interface{}) erro return err } if libName, libVersion, ok := parseNameAndVersion(data); !ok { - return fmt.Errorf("%s %s", tr("invalid library directive:"), data) + return fmt.Errorf("%s %s", i18n.Tr("invalid library directive:"), data) } else if v, err := semver.Parse(libVersion); err != nil { - return fmt.Errorf("%s %w", tr("invalid version:"), err) + return fmt.Errorf("%s %w", i18n.Tr("invalid version:"), err) } else { l.Library = libName l.Version = v @@ -261,11 +318,17 @@ func LoadProjectFile(file *paths.Path) (*Project, error) { return nil, err } + profiles, err := raw.getProfiles() + if err != nil { + return nil, err + } return &Project{ - Profiles: raw.getProfiles(), - DefaultProfile: raw.DefaultProfile, - DefaultFqbn: raw.DefaultFqbn, - DefaultPort: raw.DefaultPort, - DefaultProtocol: raw.DefaultProtocol, + Profiles: profiles, + DefaultProfile: raw.DefaultProfile, + DefaultFqbn: raw.DefaultFqbn, + DefaultPort: raw.DefaultPort, + DefaultPortConfig: raw.DefaultPortConfig, + DefaultProtocol: raw.DefaultProtocol, + DefaultProgrammer: raw.DefaultProgrammer, }, nil } diff --git a/arduino/sketch/profiles_test.go b/internal/arduino/sketch/profiles_test.go similarity index 100% rename from arduino/sketch/profiles_test.go rename to internal/arduino/sketch/profiles_test.go diff --git a/arduino/sketch/sketch.go b/internal/arduino/sketch/sketch.go similarity index 69% rename from arduino/sketch/sketch.go rename to internal/arduino/sketch/sketch.go index fd6bff38dd4..015be0b1f56 100644 --- a/arduino/sketch/sketch.go +++ b/internal/arduino/sketch/sketch.go @@ -18,14 +18,17 @@ package sketch import ( "crypto/md5" "encoding/hex" + "errors" "fmt" "sort" "strings" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/arduino/globals" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" + "go.bug.st/f" ) // Sketch holds all the files composing a sketch @@ -39,20 +42,18 @@ type Sketch struct { Project *Project } -var tr = i18n.Tr - // New creates an Sketch instance by reading all the files composing a sketch and grouping them // by file type. func New(path *paths.Path) (*Sketch, error) { if path == nil { - return nil, fmt.Errorf(tr("sketch path is not valid")) + return nil, errors.New(i18n.Tr("sketch path is not valid")) } path = path.Canonical() if exist, err := path.ExistCheck(); err != nil { - return nil, fmt.Errorf("%s: %s", tr("sketch path is not valid"), err) + return nil, fmt.Errorf("%s: %w", i18n.Tr("sketch path is not valid"), err) } else if !exist { - return nil, fmt.Errorf("%s: %s", tr("no such file or directory"), path) + return nil, fmt.Errorf("%s: %s", i18n.Tr("no such file or directory"), path) } if globals.MainFileValidExtensions[path.Ext()] && !path.IsDir() { path = path.Parent() @@ -65,15 +66,15 @@ func New(path *paths.Path) (*Sketch, error) { if mainFile == nil { mainFile = candidateSketchMainFile } else { - return nil, errors.Errorf(tr("multiple main sketch files found (%[1]v, %[2]v)"), + return nil, errors.New(i18n.Tr("multiple main sketch files found (%[1]v, %[2]v)", mainFile, candidateSketchMainFile, - ) + )) } } } if mainFile == nil { - return nil, fmt.Errorf(tr("main file missing from sketch: %s", path.Join(path.Base()+globals.MainFileValidExtension))) + return nil, errors.New(i18n.Tr("main file missing from sketch: %s", path.Join(path.Base()+globals.MainFileValidExtension))) } sketch := &Sketch{ @@ -89,7 +90,7 @@ func New(path *paths.Path) (*Sketch, error) { if projectFile := sketch.GetProjectPath(); projectFile.Exist() { prj, err := LoadProjectFile(projectFile) if err != nil { - return nil, fmt.Errorf("%s %w", tr("error loading sketch project file:"), err) + return nil, fmt.Errorf("%s %w", i18n.Tr("error loading sketch project file:"), err) } sketch.Project = prj } @@ -102,24 +103,13 @@ func New(path *paths.Path) (*Sketch, error) { return nil, err } - if mainFile == nil { - return nil, fmt.Errorf(tr("can't find main Sketch file in %s"), path) - } - sketchFolderFiles, err := sketch.supportedFiles() if err != nil { - return nil, err + return nil, fmt.Errorf("%s: %w", i18n.Tr("reading sketch files"), err) } // Collect files - for _, p := range *sketchFolderFiles { - // Skip files that can't be opened - f, err := p.Open() - if err != nil { - continue - } - f.Close() - + for _, p := range sketchFolderFiles { ext := p.Ext() if globals.MainFileValidExtensions[ext] { if p.EqualsTo(mainFile) { @@ -144,7 +134,7 @@ func New(path *paths.Path) (*Sketch, error) { sketch.RootFolderFiles.Add(p) } } else { - return nil, errors.Errorf(tr("unknown sketch file extension '%s'"), ext) + return nil, errors.New(i18n.Tr("unknown sketch file extension '%s'", ext)) } } @@ -157,7 +147,7 @@ func New(path *paths.Path) (*Sketch, error) { // supportedFiles reads all files recursively contained in Sketch and // filter out unneded or unsupported ones and returns them -func (s *Sketch) supportedFiles() (*paths.PathList, error) { +func (s *Sketch) supportedFiles() (paths.PathList, error) { filterValidExtensions := func(p *paths.Path) bool { return globals.MainFileValidExtensions[p.Ext()] || globals.AdditionalFileValidExtensions[p.Ext()] } @@ -177,18 +167,17 @@ func (s *Sketch) supportedFiles() (*paths.PathList, error) { if err != nil { return nil, err } - return &files, nil + return files, nil } -// GetProfile returns the requested profile or nil if the profile -// is not found. -func (s *Sketch) GetProfile(profileName string) *Profile { +// GetProfile returns the requested profile or an error if not found +func (s *Sketch) GetProfile(profileName string) (*Profile, error) { for _, p := range s.Project.Profiles { if p.Name == profileName { - return p + return p, nil } } - return nil + return nil, &cmderrors.UnknownProfileError{Profile: profileName} } // checkSketchCasing returns an error if the casing of the sketch folder and the main file are different. @@ -206,7 +195,7 @@ func (s *Sketch) GetProfile(profileName string) *Profile { func (s *Sketch) checkSketchCasing() error { files, err := s.FullPath.ReadDir() if err != nil { - return errors.Errorf(tr("reading files: %v"), err) + return fmt.Errorf("%s: %w", i18n.Tr("reading files"), err) } files.FilterOutDirs() @@ -251,6 +240,12 @@ func (s *Sketch) GetDefaultPortAddressAndProtocol() (string, string) { return s.Project.DefaultPort, s.Project.DefaultProtocol } +// GetDefaultProgrammer return the default Programmer for the sketch (from the sketch.yaml project file), +// ore the empty string if not set. +func (s *Sketch) GetDefaultProgrammer() string { + return s.Project.DefaultProgrammer +} + // SetDefaultFQBN sets the default FQBN for the sketch and saves it in the sketch.yaml project file. func (s *Sketch) SetDefaultFQBN(fqbn string) error { s.Project.DefaultFqbn = fqbn @@ -268,6 +263,12 @@ func (s *Sketch) SetDefaultPort(address, protocol string) error { return updateOrAddYamlRootEntry(s.GetProjectPath(), "default_protocol", protocol) } +// SetDefaultFQBN sets the default programmer for the sketch and saves it in the sketch.yaml project file. +func (s *Sketch) SetDefaultProgrammer(programmer string) error { + s.Project.DefaultProgrammer = programmer + return updateOrAddYamlRootEntry(s.GetProjectPath(), "default_programmer", programmer) +} + // InvalidSketchFolderNameError is returned when the sketch directory doesn't match the sketch name type InvalidSketchFolderNameError struct { SketchFolder *paths.Path @@ -275,30 +276,7 @@ type InvalidSketchFolderNameError struct { } func (e *InvalidSketchFolderNameError) Error() string { - return tr("no valid sketch found in %[1]s: missing %[2]s", e.SketchFolder, e.SketchFile) -} - -// CheckForPdeFiles returns all files ending with .pde extension -// in sketch, this is mainly used to warn the user that these files -// must be changed to .ino extension. -// When .pde files won't be supported anymore this function must be removed. -func CheckForPdeFiles(sketch *paths.Path) []*paths.Path { - if sketch.IsNotDir() { - sketch = sketch.Parent() - } - - files, err := sketch.ReadDirRecursive() - if err != nil { - return []*paths.Path{} - } - files.FilterSuffix(".pde") - return files -} - -// DefaultBuildPath generates the default build directory for a given sketch. -// The build path is in a temporary directory and is unique for each sketch. -func (s *Sketch) DefaultBuildPath() *paths.Path { - return paths.TempDir().Join("arduino", "sketches", s.Hash()) + return i18n.Tr("no valid sketch found in %[1]s: missing %[2]s", e.SketchFolder, e.SketchFile) } // Hash generate a unique hash for the given sketch. @@ -307,3 +285,35 @@ func (s *Sketch) Hash() string { md5SumBytes := md5.Sum([]byte(path)) return strings.ToUpper(hex.EncodeToString(md5SumBytes[:])) } + +// ToRpc converts this Sketch into a rpc.LoadSketchResponse +func (s *Sketch) ToRpc() *rpc.Sketch { + defaultPort, defaultProtocol := s.GetDefaultPortAddressAndProtocol() + var defaultPortConfig *rpc.MonitorPortConfiguration + if len(s.Project.DefaultPortConfig) > 0 { + defaultPortConfig = &rpc.MonitorPortConfiguration{} + for k, v := range s.Project.DefaultPortConfig { + defaultPortConfig.Settings = append(defaultPortConfig.Settings, &rpc.MonitorPortSetting{ + SettingId: k, + Value: v, + }) + } + } + res := &rpc.Sketch{ + MainFile: s.MainFile.String(), + LocationPath: s.FullPath.String(), + OtherSketchFiles: s.OtherSketchFiles.AsStrings(), + AdditionalFiles: s.AdditionalFiles.AsStrings(), + RootFolderFiles: s.RootFolderFiles.AsStrings(), + DefaultFqbn: s.GetDefaultFQBN(), + DefaultPort: defaultPort, + DefaultPortConfig: defaultPortConfig, + DefaultProtocol: defaultProtocol, + DefaultProgrammer: s.GetDefaultProgrammer(), + Profiles: f.Map(s.Project.Profiles, (*Profile).ToRpc), + } + if defaultProfile, err := s.GetProfile(s.Project.DefaultProfile); err == nil { + res.DefaultProfile = defaultProfile.ToRpc() + } + return res +} diff --git a/arduino/sketch/sketch_test.go b/internal/arduino/sketch/sketch_test.go similarity index 90% rename from arduino/sketch/sketch_test.go rename to internal/arduino/sketch/sketch_test.go index f6de4a11261..f16ae8bfdcc 100644 --- a/arduino/sketch/sketch_test.go +++ b/internal/arduino/sketch/sketch_test.go @@ -285,47 +285,6 @@ func TestNewSketchFolderSymlink(t *testing.T) { require.True(t, sketch.RootFolderFiles.ContainsEquivalentTo(sketchPathSymlink.Join("s_file.S"))) } -func TestGenBuildPath(t *testing.T) { - want := paths.TempDir().Join("arduino", "sketches", "ACBD18DB4CC2F85CEDEF654FCCC4A4D8") - assert.True(t, (&Sketch{FullPath: paths.New("foo")}).DefaultBuildPath().EquivalentTo(want)) - assert.Equal(t, "ACBD18DB4CC2F85CEDEF654FCCC4A4D8", (&Sketch{FullPath: paths.New("foo")}).Hash()) -} - -func TestCheckForPdeFiles(t *testing.T) { - sketchPath := paths.New("testdata", "SketchSimple") - files := CheckForPdeFiles(sketchPath) - require.Empty(t, files) - - sketchPath = paths.New("testdata", "SketchPde") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Join("SketchPde.pde"), files[0]) - - sketchPath = paths.New("testdata", "SketchMultipleMainFiles") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Join("SketchMultipleMainFiles.pde"), files[0]) - - sketchPath = paths.New("testdata", "SketchSimple", "SketchSimple.ino") - files = CheckForPdeFiles(sketchPath) - require.Empty(t, files) - - sketchPath = paths.New("testdata", "SketchPde", "SketchPde.pde") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Parent().Join("SketchPde.pde"), files[0]) - - sketchPath = paths.New("testdata", "SketchMultipleMainFiles", "SketchMultipleMainFiles.ino") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Parent().Join("SketchMultipleMainFiles.pde"), files[0]) - - sketchPath = paths.New("testdata", "SketchMultipleMainFiles", "SketchMultipleMainFiles.pde") - files = CheckForPdeFiles(sketchPath) - require.Len(t, files, 1) - require.Equal(t, sketchPath.Parent().Join("SketchMultipleMainFiles.pde"), files[0]) -} - func TestNewSketchWithSymlink(t *testing.T) { sketchPath, _ := paths.New("testdata", "SketchWithSymlink").Abs() mainFilePath := sketchPath.Join("SketchWithSymlink.ino") @@ -376,7 +335,7 @@ func TestNewSketchWithSymlinkLoop(t *testing.T) { return false } }, - 20*time.Second, + 5*time.Second, 10*time.Millisecond, "Infinite symlink loop while loading sketch", ) @@ -415,7 +374,7 @@ func TestSketchWithMultipleSymlinkLoops(t *testing.T) { return false } }, - 20*time.Second, + 5*time.Second, 10*time.Millisecond, "Infinite symlink loop while loading sketch", ) diff --git a/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.ino b/internal/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.ino similarity index 100% rename from arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.ino rename to internal/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.ino diff --git a/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.pde b/internal/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.pde similarity index 100% rename from arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.pde rename to internal/arduino/sketch/testdata/SketchBothInoAndPde/SketchBothInoAndPde.pde diff --git a/arduino/sketch/testdata/SketchCasingCorrect/SketchCasingCorrect.ino b/internal/arduino/sketch/testdata/SketchCasingCorrect/SketchCasingCorrect.ino similarity index 100% rename from arduino/sketch/testdata/SketchCasingCorrect/SketchCasingCorrect.ino rename to internal/arduino/sketch/testdata/SketchCasingCorrect/SketchCasingCorrect.ino diff --git a/arduino/sketch/testdata/SketchCasingWrong/sketchcasingwrong.ino b/internal/arduino/sketch/testdata/SketchCasingWrong/sketchcasingwrong.ino similarity index 100% rename from arduino/sketch/testdata/SketchCasingWrong/sketchcasingwrong.ino rename to internal/arduino/sketch/testdata/SketchCasingWrong/sketchcasingwrong.ino diff --git a/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.ino b/internal/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.ino similarity index 100% rename from arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.ino rename to internal/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.ino diff --git a/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.pde b/internal/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.pde similarity index 100% rename from arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.pde rename to internal/arduino/sketch/testdata/SketchMultipleMainFiles/SketchMultipleMainFiles.pde diff --git a/arduino/sketch/testdata/SketchPde/SketchPde.pde b/internal/arduino/sketch/testdata/SketchPde/SketchPde.pde similarity index 100% rename from arduino/sketch/testdata/SketchPde/SketchPde.pde rename to internal/arduino/sketch/testdata/SketchPde/SketchPde.pde diff --git a/arduino/sketch/testdata/SketchSimple/SketchSimple.ino b/internal/arduino/sketch/testdata/SketchSimple/SketchSimple.ino similarity index 100% rename from arduino/sketch/testdata/SketchSimple/SketchSimple.ino rename to internal/arduino/sketch/testdata/SketchSimple/SketchSimple.ino diff --git a/arduino/sketch/testdata/SketchSimple/other.cpp b/internal/arduino/sketch/testdata/SketchSimple/other.cpp similarity index 100% rename from arduino/sketch/testdata/SketchSimple/other.cpp rename to internal/arduino/sketch/testdata/SketchSimple/other.cpp diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/.#sketch.ino b/internal/arduino/sketch/testdata/SketchSymlinkSrc/.#sketch.ino similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/.#sketch.ino rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/.#sketch.ino diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/SketchSymlinkSrc.ino b/internal/arduino/sketch/testdata/SketchSymlinkSrc/SketchSymlinkSrc.ino similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/SketchSymlinkSrc.ino rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/SketchSymlinkSrc.ino diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/doc.txt b/internal/arduino/sketch/testdata/SketchSymlinkSrc/doc.txt similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/doc.txt rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/doc.txt diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/header.h b/internal/arduino/sketch/testdata/SketchSymlinkSrc/header.h similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/header.h rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/header.h diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/old.pde b/internal/arduino/sketch/testdata/SketchSymlinkSrc/old.pde similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/old.pde rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/old.pde diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/other.ino b/internal/arduino/sketch/testdata/SketchSymlinkSrc/other.ino similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/other.ino rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/other.ino diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/s_file.S b/internal/arduino/sketch/testdata/SketchSymlinkSrc/s_file.S similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/s_file.S rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/s_file.S diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/src/dont_load_me.ino b/internal/arduino/sketch/testdata/SketchSymlinkSrc/src/dont_load_me.ino similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/src/dont_load_me.ino rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/src/dont_load_me.ino diff --git a/arduino/sketch/testdata/SketchSymlinkSrc/src/helper.h b/internal/arduino/sketch/testdata/SketchSymlinkSrc/src/helper.h similarity index 100% rename from arduino/sketch/testdata/SketchSymlinkSrc/src/helper.h rename to internal/arduino/sketch/testdata/SketchSymlinkSrc/src/helper.h diff --git a/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/SketchWithDefaultFQBNAndPort.ino b/internal/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/SketchWithDefaultFQBNAndPort.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/SketchWithDefaultFQBNAndPort.ino rename to internal/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/SketchWithDefaultFQBNAndPort.ino diff --git a/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/sketch.yml b/internal/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/sketch.yml similarity index 100% rename from arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/sketch.yml rename to internal/arduino/sketch/testdata/SketchWithDefaultFQBNAndPort/sketch.yml diff --git a/arduino/sketch/testdata/SketchWithIppFile/SketchWithIppFile.ino b/internal/arduino/sketch/testdata/SketchWithIppFile/SketchWithIppFile.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithIppFile/SketchWithIppFile.ino rename to internal/arduino/sketch/testdata/SketchWithIppFile/SketchWithIppFile.ino diff --git a/arduino/sketch/testdata/SketchWithIppFile/template.ipp b/internal/arduino/sketch/testdata/SketchWithIppFile/template.ipp similarity index 100% rename from arduino/sketch/testdata/SketchWithIppFile/template.ipp rename to internal/arduino/sketch/testdata/SketchWithIppFile/template.ipp diff --git a/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/SketchWithMarkdownAsciidocJson.ino b/internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/SketchWithMarkdownAsciidocJson.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/SketchWithMarkdownAsciidocJson.ino rename to internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/SketchWithMarkdownAsciidocJson.ino diff --git a/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.adoc b/internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.adoc similarity index 100% rename from arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.adoc rename to internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.adoc diff --git a/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.json b/internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.json similarity index 100% rename from arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.json rename to internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.json diff --git a/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.md b/internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.md similarity index 100% rename from arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.md rename to internal/arduino/sketch/testdata/SketchWithMarkdownAsciidocJson/foo.md diff --git a/arduino/sketch/testdata/SketchWithMultipleSymlinkLoops/SketchWithMultipleSymlinkLoops.ino b/internal/arduino/sketch/testdata/SketchWithMultipleSymlinkLoops/SketchWithMultipleSymlinkLoops.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithMultipleSymlinkLoops/SketchWithMultipleSymlinkLoops.ino rename to internal/arduino/sketch/testdata/SketchWithMultipleSymlinkLoops/SketchWithMultipleSymlinkLoops.ino diff --git a/arduino/sketch/testdata/SketchWithProfiles/sketch.yml b/internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml similarity index 98% rename from arduino/sketch/testdata/SketchWithProfiles/sketch.yml rename to internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml index fdbd998d093..868d8eb5116 100644 --- a/arduino/sketch/testdata/SketchWithProfiles/sketch.yml +++ b/internal/arduino/sketch/testdata/SketchWithProfiles/sketch.yml @@ -1,6 +1,7 @@ profiles: nanorp: fqbn: arduino:mbed_nano:nanorp2040connect + programmer: p1 platforms: - platform: arduino:mbed_nano (2.1.0) libraries: diff --git a/arduino/sketch/testdata/SketchWithSymlink/SketchWithSymlink.ino b/internal/arduino/sketch/testdata/SketchWithSymlink/SketchWithSymlink.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithSymlink/SketchWithSymlink.ino rename to internal/arduino/sketch/testdata/SketchWithSymlink/SketchWithSymlink.ino diff --git a/arduino/sketch/testdata/SketchWithSymlink/some_folder/helper.h b/internal/arduino/sketch/testdata/SketchWithSymlink/some_folder/helper.h similarity index 100% rename from arduino/sketch/testdata/SketchWithSymlink/some_folder/helper.h rename to internal/arduino/sketch/testdata/SketchWithSymlink/some_folder/helper.h diff --git a/arduino/sketch/testdata/SketchWithSymlinkLoop/SketchWithSymlinkLoop.ino b/internal/arduino/sketch/testdata/SketchWithSymlinkLoop/SketchWithSymlinkLoop.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithSymlinkLoop/SketchWithSymlinkLoop.ino rename to internal/arduino/sketch/testdata/SketchWithSymlinkLoop/SketchWithSymlinkLoop.ino diff --git a/arduino/sketch/testdata/SketchWithSymlinkLoop/some_folder/helper.h b/internal/arduino/sketch/testdata/SketchWithSymlinkLoop/some_folder/helper.h similarity index 100% rename from arduino/sketch/testdata/SketchWithSymlinkLoop/some_folder/helper.h rename to internal/arduino/sketch/testdata/SketchWithSymlinkLoop/some_folder/helper.h diff --git a/arduino/sketch/testdata/SketchWithTppFile/SketchWithTppFile.ino b/internal/arduino/sketch/testdata/SketchWithTppFile/SketchWithTppFile.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithTppFile/SketchWithTppFile.ino rename to internal/arduino/sketch/testdata/SketchWithTppFile/SketchWithTppFile.ino diff --git a/arduino/sketch/testdata/SketchWithTppFile/template.tpp b/internal/arduino/sketch/testdata/SketchWithTppFile/template.tpp similarity index 100% rename from arduino/sketch/testdata/SketchWithTppFile/template.tpp rename to internal/arduino/sketch/testdata/SketchWithTppFile/template.tpp diff --git a/arduino/sketch/testdata/SketchWithWrongMain/main.ino b/internal/arduino/sketch/testdata/SketchWithWrongMain/main.ino similarity index 100% rename from arduino/sketch/testdata/SketchWithWrongMain/main.ino rename to internal/arduino/sketch/testdata/SketchWithWrongMain/main.ino diff --git a/arduino/sketch/testdata/TestNewItem.ino b/internal/arduino/sketch/testdata/TestNewItem.ino similarity index 100% rename from arduino/sketch/testdata/TestNewItem.ino rename to internal/arduino/sketch/testdata/TestNewItem.ino diff --git a/arduino/sketch/yaml.go b/internal/arduino/sketch/yaml.go similarity index 89% rename from arduino/sketch/yaml.go rename to internal/arduino/sketch/yaml.go index 952b200c225..96dcf277838 100644 --- a/arduino/sketch/yaml.go +++ b/internal/arduino/sketch/yaml.go @@ -16,9 +16,11 @@ package sketch import ( + "errors" "fmt" "strings" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/go-paths-helper" "gopkg.in/yaml.v3" ) @@ -75,15 +77,15 @@ func updateOrAddYamlRootEntry(path *paths.Path, key, newValue string) error { dstYaml := []byte(strings.Join(srcYaml, fmt.Sprintln()) + fmt.Sprintln()) var dst interface{} if err := yaml.Unmarshal(dstYaml, &dst); err != nil { - return fmt.Errorf("%s: %w", tr("could not update sketch project file"), err) + return fmt.Errorf("%s: %w", i18n.Tr("could not update sketch project file"), err) } dstMap, ok := dst.(map[string]interface{}) if !ok { - return fmt.Errorf(tr("could not update sketch project file")) + return errors.New(i18n.Tr("could not update sketch project file")) } writtenValue, notRemoved := dstMap[key] if (newValue == "" && notRemoved) || (newValue != "" && newValue != writtenValue) { - return fmt.Errorf(tr("could not update sketch project file")) + return errors.New(i18n.Tr("could not update sketch project file")) } // Write back the updated YAML diff --git a/arduino/sketch/yaml_test.go b/internal/arduino/sketch/yaml_test.go similarity index 100% rename from arduino/sketch/yaml_test.go rename to internal/arduino/sketch/yaml_test.go diff --git a/arduino/utils/filenames.go b/internal/arduino/utils/filenames.go similarity index 100% rename from arduino/utils/filenames.go rename to internal/arduino/utils/filenames.go diff --git a/arduino/utils/search.go b/internal/arduino/utils/search.go similarity index 100% rename from arduino/utils/search.go rename to internal/arduino/utils/search.go diff --git a/arduino/utils/url.go b/internal/arduino/utils/url.go similarity index 100% rename from arduino/utils/url.go rename to internal/arduino/utils/url.go diff --git a/arduino/utils/url_test.go b/internal/arduino/utils/url_test.go similarity index 100% rename from arduino/utils/url_test.go rename to internal/arduino/utils/url_test.go diff --git a/buildcache/build_cache.go b/internal/buildcache/build_cache.go similarity index 98% rename from buildcache/build_cache.go rename to internal/buildcache/build_cache.go index dc690e2cbc2..e61488a4cc6 100644 --- a/buildcache/build_cache.go +++ b/internal/buildcache/build_cache.go @@ -19,7 +19,6 @@ import ( "time" "github.com/arduino/go-paths-helper" - "github.com/pkg/errors" "github.com/sirupsen/logrus" ) @@ -108,6 +107,6 @@ func removeIfExpired(dir *paths.Path, ttl time.Duration) { logrus.Tracef(`Purging cache directory "%s". Expired by %s`, dir, lifeExpectancy.Abs()) err = dir.RemoveAll() if err != nil { - logrus.Tracef(`Error while pruning cache directory "%s": %s`, dir, errors.WithStack(err)) + logrus.Tracef(`Error while pruning cache directory "%s": %s`, dir, err) } } diff --git a/buildcache/build_cache_test.go b/internal/buildcache/build_cache_test.go similarity index 100% rename from buildcache/build_cache_test.go rename to internal/buildcache/build_cache_test.go diff --git a/internal/cli/arguments/arguments.go b/internal/cli/arguments/arguments.go index e3aa6a8dded..a096154a864 100644 --- a/internal/cli/arguments/arguments.go +++ b/internal/cli/arguments/arguments.go @@ -18,22 +18,24 @@ package arguments import ( "strings" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // CheckFlagsConflicts is a helper function useful to report errors when more than one conflicting flag is used func CheckFlagsConflicts(command *cobra.Command, flagNames ...string) { + var used []string for _, flagName := range flagNames { - if !command.Flag(flagName).Changed { - return + if command.Flag(flagName).Changed { + used = append(used, flagName) } } - flags := "--" + strings.Join(flagNames, ", --") - msg := tr("Can't use the following flags together: %s", flags) + if len(used) <= 1 { + return + } + flags := "--" + strings.Join(used, ", --") + msg := i18n.Tr("Can't use the following flags together: %s", flags) feedback.Fatal(msg, feedback.ErrBadArgument) } @@ -44,7 +46,7 @@ func CheckFlagsMandatory(command *cobra.Command, flagNames ...string) { continue } flags := "--" + strings.Join(flagNames, ", --") - msg := tr("Flag %[1]s is mandatory when used in conjunction with: %[2]s", "--"+flagName, flags) + msg := i18n.Tr("Flag %[1]s is mandatory when used in conjunction with: %[2]s", "--"+flagName, flags) feedback.Fatal(msg, feedback.ErrBadArgument) } } diff --git a/internal/cli/arguments/completion.go b/internal/cli/arguments/completion.go index c97ac72f064..9b6678fe9ac 100644 --- a/internal/cli/arguments/completion.go +++ b/internal/cli/arguments/completion.go @@ -18,37 +18,34 @@ package arguments import ( "context" - "github.com/arduino/arduino-cli/commands/board" - "github.com/arduino/arduino-cli/commands/core" - "github.com/arduino/arduino-cli/commands/lib" - "github.com/arduino/arduino-cli/commands/upload" "github.com/arduino/arduino-cli/internal/cli/instance" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "go.bug.st/f" ) // GetInstalledBoards is an helper function useful to autocomplete. // It returns a list of fqbn // it's taken from cli/board/listall.go -func GetInstalledBoards() []string { - inst := instance.CreateAndInit() +func GetInstalledBoards(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) - list, _ := board.ListAll(context.Background(), &rpc.BoardListAllRequest{ + list, _ := srv.BoardListAll(ctx, &rpc.BoardListAllRequest{ Instance: inst, SearchArgs: nil, IncludeHiddenBoards: false, }) var res []string // transform the data structure for the completion - for _, i := range list.Boards { - res = append(res, i.Fqbn+"\t"+i.Name) + for _, i := range list.GetBoards() { + res = append(res, i.GetFqbn()+"\t"+i.GetName()) } return res } // GetInstalledProgrammers is an helper function useful to autocomplete. // It returns a list of programmers available based on the installed boards -func GetInstalledProgrammers() []string { - inst := instance.CreateAndInit() +func GetInstalledProgrammers(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) // we need the list of the available fqbn in order to get the list of the programmers listAllReq := &rpc.BoardListAllRequest{ @@ -56,13 +53,13 @@ func GetInstalledProgrammers() []string { SearchArgs: nil, IncludeHiddenBoards: false, } - list, _ := board.ListAll(context.Background(), listAllReq) + list, _ := srv.BoardListAll(ctx, listAllReq) installedProgrammers := make(map[string]string) - for _, board := range list.Boards { - programmers, _ := upload.ListProgrammersAvailableForUpload(context.Background(), &rpc.ListProgrammersAvailableForUploadRequest{ + for _, board := range list.GetBoards() { + programmers, _ := srv.ListProgrammersAvailableForUpload(ctx, &rpc.ListProgrammersAvailableForUploadRequest{ Instance: inst, - Fqbn: board.Fqbn, + Fqbn: board.GetFqbn(), }) for _, programmer := range programmers.GetProgrammers() { installedProgrammers[programmer.GetId()] = programmer.GetName() @@ -80,55 +77,59 @@ func GetInstalledProgrammers() []string { // GetUninstallableCores is an helper function useful to autocomplete. // It returns a list of cores which can be uninstalled -func GetUninstallableCores() []string { - inst := instance.CreateAndInit() +func GetUninstallableCores(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) - platforms, _ := core.PlatformList(&rpc.PlatformListRequest{ - Instance: inst, - UpdatableOnly: false, - All: false, + platforms, _ := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + ManuallyInstalled: true, }) + var res []string // transform the data structure for the completion - for _, i := range platforms.InstalledPlatforms { - res = append(res, i.Id+"\t"+i.Name) + for _, i := range platforms.GetSearchOutput() { + if i.GetInstalledVersion() == "" { + continue + } + res = append(res, i.GetMetadata().GetId()+"\t"+i.GetInstalledRelease().GetName()) } return res } // GetInstallableCores is an helper function useful to autocomplete. // It returns a list of cores which can be installed/downloaded -func GetInstallableCores() []string { - inst := instance.CreateAndInit() +func GetInstallableCores(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) - platforms, _ := core.PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: "", - AllVersions: false, + platforms, _ := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: "", }) var res []string // transform the data structure for the completion - for _, i := range platforms.SearchOutput { - res = append(res, i.Id+"\t"+i.Name) + for _, i := range platforms.GetSearchOutput() { + if latest := i.GetLatestRelease(); latest != nil { + res = append(res, i.GetMetadata().GetId()+"\t"+latest.GetName()) + } } return res } // GetInstalledLibraries is an helper function useful to autocomplete. // It returns a list of libs which are currently installed, including the builtin ones -func GetInstalledLibraries() []string { - return getLibraries(true) +func GetInstalledLibraries(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + return getLibraries(ctx, srv, true) } // GetUninstallableLibraries is an helper function useful to autocomplete. // It returns a list of libs which can be uninstalled -func GetUninstallableLibraries() []string { - return getLibraries(false) +func GetUninstallableLibraries(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + return getLibraries(ctx, srv, false) } -func getLibraries(all bool) []string { - inst := instance.CreateAndInit() - libs, _ := lib.LibraryList(context.Background(), &rpc.LibraryListRequest{ +func getLibraries(ctx context.Context, srv rpc.ArduinoCoreServiceServer, all bool) []string { + inst := instance.CreateAndInit(ctx, srv) + libs, _ := srv.LibraryList(ctx, &rpc.LibraryListRequest{ Instance: inst, All: all, Updatable: false, @@ -137,25 +138,25 @@ func getLibraries(all bool) []string { }) var res []string // transform the data structure for the completion - for _, i := range libs.InstalledLibraries { - res = append(res, i.Library.Name+"\t"+i.Library.Sentence) + for _, i := range libs.GetInstalledLibraries() { + res = append(res, i.GetLibrary().GetName()+"\t"+i.GetLibrary().GetSentence()) } return res } // GetInstallableLibs is an helper function useful to autocomplete. // It returns a list of libs which can be installed/downloaded -func GetInstallableLibs() []string { - inst := instance.CreateAndInit() +func GetInstallableLibs(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + inst := instance.CreateAndInit(ctx, srv) - libs, _ := lib.LibrarySearch(context.Background(), &rpc.LibrarySearchRequest{ + libs, _ := srv.LibrarySearch(ctx, &rpc.LibrarySearchRequest{ Instance: inst, SearchArgs: "", // if no query is specified all the libs are returned }) var res []string // transform the data structure for the completion - for _, i := range libs.Libraries { - res = append(res, i.Name+"\t"+i.Latest.Sentence) + for _, i := range libs.GetLibraries() { + res = append(res, i.GetName()+"\t"+i.GetLatest().GetSentence()) } return res } @@ -163,16 +164,11 @@ func GetInstallableLibs() []string { // GetAvailablePorts is an helper function useful to autocomplete. // It returns a list of upload port of the boards which are currently connected. // It will not suggests network ports because the timeout is not set. -func GetAvailablePorts() []*rpc.Port { - inst := instance.CreateAndInit() +func GetAvailablePorts(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []*rpc.Port { + // Get the port list + inst := instance.CreateAndInit(ctx, srv) + list, _ := srv.BoardList(ctx, &rpc.BoardListRequest{Instance: inst}) - list, _, _ := board.List(&rpc.BoardListRequest{ - Instance: inst, - }) - var res []*rpc.Port - // transform the data structure for the completion - for _, i := range list { - res = append(res, i.Port) - } - return res + // Transform the data structure for the completion (DetectedPort -> Port) + return f.Map(list.GetPorts(), (*rpc.DetectedPort).GetPort) } diff --git a/internal/cli/arguments/discovery_timeout.go b/internal/cli/arguments/discovery_timeout.go index 140c37fcef8..c63791f64d9 100644 --- a/internal/cli/arguments/discovery_timeout.go +++ b/internal/cli/arguments/discovery_timeout.go @@ -18,6 +18,7 @@ package arguments import ( "time" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/spf13/cobra" ) @@ -28,7 +29,7 @@ type DiscoveryTimeout struct { // AddToCommand adds the flags used to set fqbn to the specified Command func (d *DiscoveryTimeout) AddToCommand(cmd *cobra.Command) { - cmd.Flags().DurationVar(&d.timeout, "discovery-timeout", time.Second, tr("Max time to wait for port discovery, e.g.: 30s, 1m")) + cmd.Flags().DurationVar(&d.timeout, "discovery-timeout", time.Second, i18n.Tr("Max time to wait for port discovery, e.g.: 30s, 1m")) } // Get returns the timeout diff --git a/internal/cli/arguments/fqbn.go b/internal/cli/arguments/fqbn.go index 84c805c0088..f2248bcd424 100644 --- a/internal/cli/arguments/fqbn.go +++ b/internal/cli/arguments/fqbn.go @@ -16,10 +16,12 @@ package arguments import ( + "context" "strings" - "github.com/arduino/arduino-cli/arduino" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) @@ -33,13 +35,13 @@ type Fqbn struct { } // AddToCommand adds the flags used to set fqbn to the specified Command -func (f *Fqbn) AddToCommand(cmd *cobra.Command) { - cmd.Flags().StringVarP(&f.fqbn, "fqbn", "b", "", tr("Fully Qualified Board Name, e.g.: arduino:avr:uno")) +func (f *Fqbn) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + cmd.Flags().StringVarP(&f.fqbn, "fqbn", "b", "", i18n.Tr("Fully Qualified Board Name, e.g.: arduino:avr:uno")) cmd.RegisterFlagCompletionFunc("fqbn", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetInstalledBoards(), cobra.ShellCompDirectiveDefault + return GetInstalledBoards(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }) cmd.Flags().StringSliceVar(&f.boardOptions, "board-options", []string{}, - tr("List of board options separated by commas. Or can be used multiple times for multiple options.")) + i18n.Tr("List of board options separated by commas. Or can be used multiple times for multiple options.")) } // String returns the fqbn with the board options if there are any @@ -62,6 +64,7 @@ func (f *Fqbn) Set(fqbn string) { // parameters provided by the user. // This determine the FQBN based on: // - the value of the FQBN flag if explicitly specified, otherwise +// - the FQBN of the selected profile if available, otherwise // - the default FQBN value in sketch.yaml (`default_fqbn` key) if available, otherwise // - it tries to autodetect the board connected to the given port flags // If all above methods fails, it returns the empty string. @@ -69,25 +72,28 @@ func (f *Fqbn) Set(fqbn string) { // - the port is not found, in this case nil is returned // - the FQBN autodetection fail, in this case the function prints an error and // terminates the execution -func CalculateFQBNAndPort(portArgs *Port, fqbnArg *Fqbn, instance *rpc.Instance, defaultFQBN, defaultAddress, defaultProtocol string) (string, *rpc.Port) { +func CalculateFQBNAndPort(ctx context.Context, portArgs *Port, fqbnArg *Fqbn, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultFQBN, defaultAddress, defaultProtocol string, profile *rpc.SketchProfile) (string, *rpc.Port) { fqbn := fqbnArg.String() + if fqbn == "" { + fqbn = profile.GetFqbn() + } if fqbn == "" { fqbn = defaultFQBN } if fqbn == "" { if portArgs == nil || portArgs.address == "" { - feedback.FatalError(&arduino.MissingFQBNError{}, feedback.ErrGeneric) + feedback.FatalError(&cmderrors.MissingFQBNError{}, feedback.ErrGeneric) } - fqbn, port := portArgs.DetectFQBN(instance) - if fqbn == "" { - feedback.FatalError(&arduino.MissingFQBNError{}, feedback.ErrGeneric) + fqbn, port, err := portArgs.DetectFQBN(ctx, instance, srv) + if err != nil { + feedback.FatalError(&cmderrors.MissingFQBNError{}, feedback.ErrGeneric) } return fqbn, port } - port, err := portArgs.GetPort(instance, defaultAddress, defaultProtocol) + port, err := portArgs.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol, profile) if err != nil { - feedback.Fatal(tr("Error getting port metadata: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error getting port metadata: %v", err), feedback.ErrGeneric) } return fqbn, port } diff --git a/internal/cli/arguments/port.go b/internal/cli/arguments/port.go index 14f5846d80d..1df918210e3 100644 --- a/internal/cli/arguments/port.go +++ b/internal/cli/arguments/port.go @@ -17,16 +17,17 @@ package arguments import ( "context" + "errors" "fmt" "time" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/board" - f "github.com/arduino/arduino-cli/internal/algorithms" - "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" + "go.bug.st/f" ) // Port contains the port arguments result. @@ -39,14 +40,14 @@ type Port struct { } // AddToCommand adds the flags used to set port and protocol to the specified Command -func (p *Port) AddToCommand(cmd *cobra.Command) { - cmd.Flags().StringVarP(&p.address, "port", "p", "", tr("Upload port address, e.g.: COM3 or /dev/ttyACM2")) +func (p *Port) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + cmd.Flags().StringVarP(&p.address, "port", "p", "", i18n.Tr("Upload port address, e.g.: COM3 or /dev/ttyACM2")) cmd.RegisterFlagCompletionFunc("port", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return f.Map(GetAvailablePorts(), (*rpc.Port).GetAddress), cobra.ShellCompDirectiveDefault + return f.Map(GetAvailablePorts(cmd.Context(), srv), (*rpc.Port).GetAddress), cobra.ShellCompDirectiveDefault }) - cmd.Flags().StringVarP(&p.protocol, "protocol", "l", "", tr("Upload port protocol, e.g: serial")) + cmd.Flags().StringVarP(&p.protocol, "protocol", "l", "", i18n.Tr("Upload port protocol, e.g: serial")) cmd.RegisterFlagCompletionFunc("protocol", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return f.Map(GetAvailablePorts(), (*rpc.Port).GetProtocol), cobra.ShellCompDirectiveDefault + return f.Map(GetAvailablePorts(cmd.Context(), srv), (*rpc.Port).GetProtocol), cobra.ShellCompDirectiveDefault }) p.timeout.AddToCommand(cmd) } @@ -56,22 +57,27 @@ func (p *Port) AddToCommand(cmd *cobra.Command) { // This method allows will bypass the discoveries if: // - a nil instance is passed: in this case the plain port and protocol arguments are returned (even if empty) // - a protocol is specified: in this case the discoveries are not needed to autodetect the protocol. -func (p *Port) GetPortAddressAndProtocol(instance *rpc.Instance, defaultAddress, defaultProtocol string) (string, string, error) { +func (p *Port) GetPortAddressAndProtocol(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string, profile *rpc.SketchProfile) (string, string, error) { if p.protocol != "" || instance == nil { return p.address, p.protocol, nil } - port, err := p.GetPort(instance, defaultAddress, defaultProtocol) + port, err := p.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol, profile) if err != nil { return "", "", err } - return port.Address, port.Protocol, nil + return port.GetAddress(), port.GetProtocol(), nil } // GetPort returns the Port obtained by parsing command line arguments. // The extra metadata for the ports is obtained using the pluggable discoveries. -func (p *Port) GetPort(instance *rpc.Instance, defaultAddress, defaultProtocol string) (*rpc.Port, error) { - +func (p *Port) GetPort(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string, profile *rpc.SketchProfile) (*rpc.Port, error) { + if profile.GetPort() != "" { + defaultAddress = profile.GetPort() + } + if profile.GetProtocol() != "" { + defaultProtocol = profile.GetProtocol() + } address := p.address protocol := p.protocol if address == "" && (defaultAddress != "" || defaultProtocol != "") { @@ -89,14 +95,14 @@ func (p *Port) GetPort(instance *rpc.Instance, defaultAddress, defaultProtocol s } logrus.WithField("port", address).Tracef("Upload port") - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithTimeout(ctx, p.timeout.Get()) defer cancel() - watcher, err := board.Watch(ctx, &rpc.BoardListWatchRequest{Instance: instance}) - if err != nil { - return nil, err - } - deadline := time.After(p.timeout.Get()) + stream, watcher := commands.BoardListWatchProxyToChan(ctx) + go func() { + _ = srv.BoardListWatch(&rpc.BoardListWatchRequest{Instance: instance}, stream) + }() + for { select { case portEvent := <-watcher: @@ -108,7 +114,7 @@ func (p *Port) GetPort(instance *rpc.Instance, defaultAddress, defaultProtocol s return port, nil } - case <-deadline: + case <-ctx.Done(): // No matching port found if protocol == "" { return &rpc.Port{ @@ -116,7 +122,7 @@ func (p *Port) GetPort(instance *rpc.Instance, defaultAddress, defaultProtocol s Protocol: "serial", }, nil } - return nil, fmt.Errorf(tr("port not found: %[1]s %[2]s"), address, protocol) + return nil, errors.New(i18n.Tr("port not found: %[1]s %[2]s", address, protocol)) } } } @@ -129,15 +135,15 @@ func (p *Port) GetSearchTimeout() time.Duration { // DetectFQBN tries to identify the board connected to the port and returns the // discovered Port object together with the FQBN. If the port does not match // exactly 1 board, -func (p *Port) DetectFQBN(inst *rpc.Instance) (string, *rpc.Port) { - detectedPorts, _, err := board.List(&rpc.BoardListRequest{ +func (p *Port) DetectFQBN(ctx context.Context, inst *rpc.Instance, srv rpc.ArduinoCoreServiceServer) (string, *rpc.Port, error) { + detectedPorts, err := srv.BoardList(ctx, &rpc.BoardListRequest{ Instance: inst, Timeout: p.timeout.Get().Milliseconds(), }) if err != nil { - feedback.Fatal(tr("Error during FQBN detection: %v", err), feedback.ErrGeneric) + return "", nil, fmt.Errorf("%s: %w", i18n.Tr("Error during board detection"), err) } - for _, detectedPort := range detectedPorts { + for _, detectedPort := range detectedPorts.GetPorts() { port := detectedPort.GetPort() if p.address != port.GetAddress() { continue @@ -145,13 +151,18 @@ func (p *Port) DetectFQBN(inst *rpc.Instance) (string, *rpc.Port) { if p.protocol != "" && p.protocol != port.GetProtocol() { continue } - if len(detectedPort.MatchingBoards) > 1 { - feedback.FatalError(&arduino.MultipleBoardsDetectedError{Port: port}, feedback.ErrBadArgument) + if len(detectedPort.GetMatchingBoards()) > 1 { + return "", nil, &cmderrors.MultipleBoardsDetectedError{Port: port} } - if len(detectedPort.MatchingBoards) == 0 { - feedback.FatalError(&arduino.NoBoardsDetectedError{Port: port}, feedback.ErrBadArgument) + if len(detectedPort.GetMatchingBoards()) == 0 { + return "", nil, &cmderrors.NoBoardsDetectedError{Port: port} } - return detectedPort.MatchingBoards[0].Fqbn, port + return detectedPort.GetMatchingBoards()[0].GetFqbn(), port, nil } - return "", nil + return "", nil, &cmderrors.NoBoardsDetectedError{Port: &rpc.Port{Address: p.address, Protocol: p.protocol}} +} + +// IsPortFlagSet returns true if the port address is provided +func (p *Port) IsPortFlagSet() bool { + return p.address != "" } diff --git a/internal/cli/arguments/pre_post_script.go b/internal/cli/arguments/pre_post_script.go index 99a54e02d94..8d492ec06c8 100644 --- a/internal/cli/arguments/pre_post_script.go +++ b/internal/cli/arguments/pre_post_script.go @@ -16,7 +16,8 @@ package arguments import ( - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -34,10 +35,10 @@ type PrePostScriptsFlags struct { // AddToCommand adds flags that can be used to force running or skipping // of post installation scripts func (p *PrePostScriptsFlags) AddToCommand(cmd *cobra.Command) { - cmd.Flags().BoolVar(&p.runPostInstall, "run-post-install", false, tr("Force run of post-install scripts (if the CLI is not running interactively).")) - cmd.Flags().BoolVar(&p.skipPostInstall, "skip-post-install", false, tr("Force skip of post-install scripts (if the CLI is running interactively).")) - cmd.Flags().BoolVar(&p.runPreUninstall, "run-pre-uninstall", false, tr("Force run of pre-uninstall scripts (if the CLI is not running interactively).")) - cmd.Flags().BoolVar(&p.skipPreUninstall, "skip-pre-uninstall", false, tr("Force skip of pre-uninstall scripts (if the CLI is running interactively).")) + cmd.Flags().BoolVar(&p.runPostInstall, "run-post-install", false, i18n.Tr("Force run of post-install scripts (if the CLI is not running interactively).")) + cmd.Flags().BoolVar(&p.skipPostInstall, "skip-post-install", false, i18n.Tr("Force skip of post-install scripts (if the CLI is running interactively).")) + cmd.Flags().BoolVar(&p.runPreUninstall, "run-pre-uninstall", false, i18n.Tr("Force run of pre-uninstall scripts (if the CLI is not running interactively).")) + cmd.Flags().BoolVar(&p.skipPreUninstall, "skip-pre-uninstall", false, i18n.Tr("Force skip of pre-uninstall scripts (if the CLI is running interactively).")) } // GetRunPostInstall returns the run-post-install flag value @@ -71,7 +72,7 @@ func (p *PrePostScriptsFlags) DetectSkipPostInstallValue() bool { return true } - if !configuration.IsInteractive { + if !feedback.IsInteractive() { logrus.Info("Not running from console, will skip post-install by default") return true } @@ -90,7 +91,7 @@ func (p *PrePostScriptsFlags) DetectSkipPreUninstallValue() bool { return true } - if !configuration.IsInteractive { + if !feedback.IsInteractive() { logrus.Info("Not running from console, will skip pre-uninstall by default") return true } diff --git a/internal/cli/arguments/profiles.go b/internal/cli/arguments/profiles.go index 67253332582..be7fd6a2acd 100644 --- a/internal/cli/arguments/profiles.go +++ b/internal/cli/arguments/profiles.go @@ -15,7 +15,11 @@ package arguments -import "github.com/spf13/cobra" +import ( + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/spf13/cobra" +) // Profile contains the profile flag data. // This is useful so all flags used by commands that need @@ -25,9 +29,15 @@ type Profile struct { } // AddToCommand adds the flags used to set fqbn to the specified Command -func (f *Profile) AddToCommand(cmd *cobra.Command) { - cmd.Flags().StringVarP(&f.profile, "profile", "m", "", tr("Sketch profile to use")) - // TODO: register autocompletion +func (f *Profile) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + cmd.Flags().StringVarP(&f.profile, "profile", "m", "", i18n.Tr("Sketch profile to use")) + cmd.RegisterFlagCompletionFunc("profile", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + var sketchProfile string + if len(args) > 0 { + sketchProfile = args[0] + } + return GetSketchProfiles(cmd.Context(), srv, sketchProfile), cobra.ShellCompDirectiveDefault + }) } // Get returns the profile name diff --git a/internal/cli/arguments/programmer.go b/internal/cli/arguments/programmer.go index 4cb00edd8d9..a077adc1b5c 100644 --- a/internal/cli/arguments/programmer.go +++ b/internal/cli/arguments/programmer.go @@ -15,7 +15,13 @@ package arguments -import "github.com/spf13/cobra" +import ( + "context" + + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/spf13/cobra" +) // Programmer contains the programmer flag data. // This is useful so all flags used by commands that need @@ -25,14 +31,33 @@ type Programmer struct { } // AddToCommand adds the flags used to set the programmer to the specified Command -func (p *Programmer) AddToCommand(cmd *cobra.Command) { - cmd.Flags().StringVarP(&p.programmer, "programmer", "P", "", tr("Programmer to use, e.g: atmel_ice")) +func (p *Programmer) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + cmd.Flags().StringVarP(&p.programmer, "programmer", "P", "", i18n.Tr("Programmer to use, e.g: atmel_ice")) cmd.RegisterFlagCompletionFunc("programmer", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetInstalledProgrammers(), cobra.ShellCompDirectiveDefault + return GetInstalledProgrammers(cmd.Context(), srv), cobra.ShellCompDirectiveDefault + }) +} + +// String returns the programmer specified by the user, or the default programmer +// for the given board if defined. +func (p *Programmer) String(ctx context.Context, inst *rpc.Instance, srv rpc.ArduinoCoreServiceServer, fqbn string) string { + if p.programmer != "" { + return p.programmer + } + if inst == nil || fqbn == "" { + return "" + } + details, err := srv.BoardDetails(ctx, &rpc.BoardDetailsRequest{ + Instance: inst, + Fqbn: fqbn, }) + if err != nil { + return "" + } + return details.GetDefaultProgrammerId() } -// String returns the programmer -func (p *Programmer) String() string { +// GetProgrammer returns the programmer specified by the user +func (p *Programmer) GetProgrammer() string { return p.programmer } diff --git a/internal/cli/arguments/reference.go b/internal/cli/arguments/reference.go index a870a0616a2..8c09b532a72 100644 --- a/internal/cli/arguments/reference.go +++ b/internal/cli/arguments/reference.go @@ -16,12 +16,13 @@ package arguments import ( - "fmt" + "context" + "errors" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" ) @@ -43,10 +44,11 @@ func (r *Reference) String() string { // ParseReferences is a convenient wrapper that operates on a slice of strings and // calls ParseReference for each of them. It returns at the first invalid argument. -func ParseReferences(args []string) ([]*Reference, error) { +func ParseReferences(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) ([]*Reference, error) { ret := []*Reference{} for _, arg := range args { - reference, err := ParseReference(arg) + // TODO: This is quite resource consuming (since it creates a new instance for each call) + reference, err := ParseReference(ctx, srv, arg) if err != nil { return nil, err } @@ -60,48 +62,47 @@ func ParseReferences(args []string) ([]*Reference, error) { // To achieve that, it tries to use github.com/arduino/arduino-cli/commands/core.GetPlatform // Note that the Reference is returned rightaway if the arg inserted by the user matches perfectly one in the response of core.GetPlatform // A MultiplePlatformsError is returned if the platform searched by the user matches multiple platforms -func ParseReference(arg string) (*Reference, error) { +func ParseReference(ctx context.Context, srv rpc.ArduinoCoreServiceServer, arg string) (*Reference, error) { logrus.Infof("Parsing reference %s", arg) ret := &Reference{} if arg == "" { - return nil, fmt.Errorf(tr("invalid empty core argument")) + return nil, errors.New(i18n.Tr("invalid empty core argument")) } + toks := strings.SplitN(arg, "@", 2) if toks[0] == "" { - return nil, fmt.Errorf(tr("invalid empty core reference '%s'"), arg) + return nil, errors.New(i18n.Tr("invalid empty core reference '%s'", arg)) } ret.PackageName = toks[0] if len(toks) > 1 { if toks[1] == "" { - return nil, fmt.Errorf(tr("invalid empty core version: '%s'"), arg) + return nil, errors.New(i18n.Tr("invalid empty core version: '%s'", arg)) } ret.Version = toks[1] } toks = strings.Split(ret.PackageName, ":") if len(toks) != 2 { - return nil, fmt.Errorf(tr("invalid item %s"), arg) + return nil, errors.New(i18n.Tr("invalid item %s", arg)) } if toks[0] == "" { - return nil, fmt.Errorf(tr("invalid empty core name '%s'"), arg) + return nil, errors.New(i18n.Tr("invalid empty core name '%s'", arg)) } - ret.PackageName = toks[0] if toks[1] == "" { - return nil, fmt.Errorf(tr("invalid empty core architecture '%s'"), arg) + return nil, errors.New(i18n.Tr("invalid empty core architecture '%s'", arg)) } + ret.PackageName = toks[0] ret.Architecture = toks[1] // Now that we have the required informations in `ret` we can // try to use core.PlatformList to optimize what the user typed // (by replacing the PackageName and Architecture in ret with the content of core.GetPlatform()) - platforms, _ := core.PlatformList(&rpc.PlatformListRequest{ - Instance: instance.CreateAndInit(), - UpdatableOnly: false, - All: true, // this is true because we want also the installable platforms + platforms, _ := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: instance.CreateAndInit(ctx, srv), }) foundPlatforms := []string{} - for _, platform := range platforms.InstalledPlatforms { - platformID := platform.GetId() + for _, platform := range platforms.GetSearchOutput() { + platformID := platform.GetMetadata().GetId() platformUser := ret.PackageName + ":" + ret.Architecture // At first we check if the platform the user is searching for matches an available one, // this way we do not need to adapt the casing and we can return it directly @@ -110,18 +111,18 @@ func ParseReference(arg string) (*Reference, error) { } if strings.EqualFold(platformUser, platformID) { logrus.Infof("Found possible match for reference %s -> %s", platformUser, platformID) - toks = strings.Split(platformID, ":") foundPlatforms = append(foundPlatforms, platformID) } } // replace the returned Reference only if only one occurrence is found, // otherwise return an error to the user because we don't know on which platform operate if len(foundPlatforms) == 0 { - return nil, &arduino.PlatformNotFoundError{Platform: arg} + return nil, &cmderrors.PlatformNotFoundError{Platform: arg} } if len(foundPlatforms) > 1 { - return nil, &arduino.MultiplePlatformsError{Platforms: foundPlatforms, UserPlatform: arg} + return nil, &cmderrors.MultiplePlatformsError{Platforms: foundPlatforms, UserPlatform: arg} } + toks = strings.Split(foundPlatforms[0], ":") ret.PackageName = toks[0] ret.Architecture = toks[1] return ret, nil diff --git a/internal/cli/arguments/reference_test.go b/internal/cli/arguments/reference_test.go index 29f20300c78..e55051cc768 100644 --- a/internal/cli/arguments/reference_test.go +++ b/internal/cli/arguments/reference_test.go @@ -16,9 +16,10 @@ package arguments_test import ( + "context" "testing" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -46,10 +47,6 @@ var badCores = []struct { {"", nil}, } -func init() { - configuration.Settings = configuration.Init("") -} - func TestArgsStringify(t *testing.T) { for _, core := range goodCores { require.Equal(t, core.in, core.expected.String()) @@ -57,14 +54,16 @@ func TestArgsStringify(t *testing.T) { } func TestParseReferenceCores(t *testing.T) { + srv := commands.NewArduinoCoreServer() + ctx := context.Background() for _, tt := range goodCores { - actual, err := arguments.ParseReference(tt.in) + actual, err := arguments.ParseReference(ctx, srv, tt.in) assert.Nil(t, err) assert.Equal(t, tt.expected, actual) } for _, tt := range badCores { - actual, err := arguments.ParseReference(tt.in) + actual, err := arguments.ParseReference(ctx, srv, tt.in) require.NotNil(t, err, "Testing bad core '%s'", tt.in) require.Equal(t, tt.expected, actual, "Testing bad core '%s'", tt.in) } @@ -76,7 +75,8 @@ func TestParseArgs(t *testing.T) { input = append(input, tt.in) } - refs, err := arguments.ParseReferences(input) + srv := commands.NewArduinoCoreServer() + refs, err := arguments.ParseReferences(context.Background(), srv, input) assert.Nil(t, err) assert.Equal(t, len(goodCores), len(refs)) diff --git a/internal/cli/arguments/show_properties.go b/internal/cli/arguments/show_properties.go index ecf3108b639..723ea94df91 100644 --- a/internal/cli/arguments/show_properties.go +++ b/internal/cli/arguments/show_properties.go @@ -16,8 +16,9 @@ package arguments import ( - "fmt" + "errors" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/spf13/cobra" ) @@ -48,7 +49,7 @@ func (p *ShowProperties) Get() (ShowPropertiesMode, error) { case "expanded": return ShowPropertiesExpanded, nil default: - return ShowPropertiesDisabled, fmt.Errorf(tr("invalid option '%s'.", p.arg)) + return ShowPropertiesDisabled, errors.New(i18n.Tr("invalid option '%s'.", p.arg)) } } @@ -56,7 +57,7 @@ func (p *ShowProperties) Get() (ShowPropertiesMode, error) { func (p *ShowProperties) AddToCommand(command *cobra.Command) { command.Flags().StringVar(&p.arg, "show-properties", "disabled", - tr(`Show build properties. The properties are expanded, use "--show-properties=unexpanded" if you want them exactly as they are defined.`), + i18n.Tr(`Show build properties. The properties are expanded, use "--show-properties=unexpanded" if you want them exactly as they are defined.`), ) command.Flags().Lookup("show-properties").NoOptDefVal = "expanded" // default if the flag is present with no value } diff --git a/internal/cli/arguments/sketch.go b/internal/cli/arguments/sketch.go index 4e670bab6ac..7f76f86e98c 100644 --- a/internal/cli/arguments/sketch.go +++ b/internal/cli/arguments/sketch.go @@ -16,28 +16,46 @@ package arguments import ( - sk "github.com/arduino/arduino-cli/commands/sketch" + "context" + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" + "go.bug.st/f" ) // InitSketchPath returns an instance of paths.Path pointing to sketchPath. // If sketchPath is an empty string returns the current working directory. -// In both cases it warns the user if he's using deprecated files func InitSketchPath(path string) (sketchPath *paths.Path) { if path != "" { sketchPath = paths.New(path) } else { wd, err := paths.Getwd() if err != nil { - feedback.Fatal(tr("Couldn't get current working directory: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Couldn't get current working directory: %v", err), feedback.ErrGeneric) } logrus.Infof("Reading sketch from dir: %s", wd) sketchPath = wd } - if msg := sk.WarnDeprecatedFiles(sketchPath); msg != "" { - feedback.Warning(msg) - } return sketchPath } + +// GetSketchProfiles is an helper function useful to autocomplete. +// It returns the profile names set in the sketch.yaml +func GetSketchProfiles(ctx context.Context, srv rpc.ArduinoCoreServiceServer, sketchPath string) []string { + if sketchPath == "" { + if wd, _ := paths.Getwd(); wd != nil && wd.String() != "" { + sketchPath = wd.String() + } else { + return nil + } + } + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath}) + if err != nil { + return nil + } + profiles := resp.GetSketch().GetProfiles() + return f.Map(profiles, (*rpc.SketchProfile).GetName) +} diff --git a/internal/cli/arguments/user_fields.go b/internal/cli/arguments/user_fields.go index 8f799d4c650..e9bf89c1ba4 100644 --- a/internal/cli/arguments/user_fields.go +++ b/internal/cli/arguments/user_fields.go @@ -25,11 +25,11 @@ import ( func AskForUserFields(userFields []*rpc.UserField) (map[string]string, error) { fields := map[string]string{} for _, f := range userFields { - value, err := feedback.InputUserField(f.Label, f.Secret) + value, err := feedback.InputUserField(f.GetLabel(), f.GetSecret()) if err != nil { return nil, err } - fields[f.Name] = value + fields[f.GetName()] = value } return fields, nil diff --git a/internal/cli/board/attach.go b/internal/cli/board/attach.go index f6536991ab7..51a5275908f 100644 --- a/internal/cli/board/attach.go +++ b/internal/cli/board/attach.go @@ -20,45 +20,50 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/sketch" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -func initAttachCommand() *cobra.Command { +func initAttachCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var port arguments.Port var fqbn arguments.Fqbn + var programmer arguments.Programmer attachCommand := &cobra.Command{ - Use: fmt.Sprintf("attach [-p <%s>] [-b <%s>] [%s]", tr("port"), tr("FQBN"), tr("sketchPath")), - Short: tr("Attaches a sketch to a board."), - Long: tr("Sets the default values for port and FQBN. If no port or FQBN are specified, the current default port and FQBN are displayed."), + Use: fmt.Sprintf("attach [-p <%s>] [-b <%s>] [-P <%s>] [%s]", i18n.Tr("port"), i18n.Tr("FQBN"), i18n.Tr("programmer"), i18n.Tr("sketchPath")), + Short: i18n.Tr("Attaches a sketch to a board."), + Long: i18n.Tr("Sets the default values for port and FQBN. If no port, FQBN or programmer are specified, the current default port, FQBN and programmer are displayed."), Example: " " + os.Args[0] + " board attach -p /dev/ttyACM0\n" + " " + os.Args[0] + " board attach -p /dev/ttyACM0 HelloWorld\n" + - " " + os.Args[0] + " board attach -b arduino:samd:mkr1000", + " " + os.Args[0] + " board attach -b arduino:samd:mkr1000" + + " " + os.Args[0] + " board attach -P atmel_ice", Args: cobra.MaximumNArgs(1), Run: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() sketchPath := "" if len(args) > 0 { sketchPath = args[0] } - runAttachCommand(sketchPath, &port, fqbn.String()) + runAttachCommand(ctx, srv, sketchPath, &port, fqbn.String(), &programmer) }, } - fqbn.AddToCommand(attachCommand) - port.AddToCommand(attachCommand) + fqbn.AddToCommand(attachCommand, srv) + port.AddToCommand(attachCommand, srv) + programmer.AddToCommand(attachCommand, srv) return attachCommand } -func runAttachCommand(path string, port *arguments.Port, fqbn string) { +func runAttachCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, path string, port *arguments.Port, fqbn string, programmer *arguments.Programmer) { sketchPath := arguments.InitSketchPath(path) - portAddress, portProtocol, _ := port.GetPortAddressAndProtocol(nil, "", "") - newDefaults, err := sketch.SetSketchDefaults(context.Background(), &rpc.SetSketchDefaultsRequest{ + portAddress, portProtocol, _ := port.GetPortAddressAndProtocol(ctx, nil, srv, "", "", nil) + newDefaults, err := srv.SetSketchDefaults(ctx, &rpc.SetSketchDefaultsRequest{ SketchPath: sketchPath.String(), DefaultFqbn: fqbn, + DefaultProgrammer: programmer.GetProgrammer(), DefaultPortAddress: portAddress, DefaultPortProtocol: portProtocol, }) @@ -67,7 +72,8 @@ func runAttachCommand(path string, port *arguments.Port, fqbn string) { } res := &boardAttachResult{ - Fqbn: newDefaults.GetDefaultFqbn(), + Fqbn: newDefaults.GetDefaultFqbn(), + Programmer: newDefaults.GetDefaultProgrammer(), } if newDefaults.GetDefaultPortAddress() != "" { res.Port = &boardAttachPortResult{ @@ -92,8 +98,9 @@ func (b *boardAttachPortResult) String() string { } type boardAttachResult struct { - Fqbn string `json:"fqbn,omitempty"` - Port *boardAttachPortResult `json:"port,omitempty"` + Fqbn string `json:"fqbn,omitempty"` + Programmer string `json:"programmer,omitempty"` + Port *boardAttachPortResult `json:"port,omitempty"` } func (b *boardAttachResult) Data() interface{} { @@ -101,10 +108,11 @@ func (b *boardAttachResult) Data() interface{} { } func (b *boardAttachResult) String() string { - if b.Port == nil && b.Fqbn == "" { - return tr("No default port or FQBN set") + if b.Port == nil && b.Fqbn == "" && b.Programmer == "" { + return i18n.Tr("No default port, FQBN or programmer set") } - res := fmt.Sprintf("%s: %s\n", tr("Default port set to"), b.Port) - res += fmt.Sprintf("%s: %s\n", tr("Default FQBN set to"), b.Fqbn) + res := fmt.Sprintf("%s: %s\n", i18n.Tr("Default port set to"), b.Port) + res += fmt.Sprintf("%s: %s\n", i18n.Tr("Default FQBN set to"), b.Fqbn) + res += fmt.Sprintf("%s: %s\n", i18n.Tr("Default programmer set to"), b.Programmer) return res } diff --git a/internal/cli/board/board.go b/internal/cli/board/board.go index 762d502f645..23bc050f071 100644 --- a/internal/cli/board/board.go +++ b/internal/cli/board/board.go @@ -18,27 +18,26 @@ package board import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `board` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { boardCommand := &cobra.Command{ Use: "board", - Short: tr("Arduino board commands."), - Long: tr("Arduino board commands."), - Example: " # " + tr("Lists all connected boards.") + "\n" + + Short: i18n.Tr("Arduino board commands."), + Long: i18n.Tr("Arduino board commands."), + Example: " # " + i18n.Tr("Lists all connected boards.") + "\n" + " " + os.Args[0] + " board list", } - boardCommand.AddCommand(initAttachCommand()) - boardCommand.AddCommand(initDetailsCommand()) - boardCommand.AddCommand(initListCommand()) - boardCommand.AddCommand(initListAllCommand()) - boardCommand.AddCommand(initSearchCommand()) + boardCommand.AddCommand(initAttachCommand(srv)) + boardCommand.AddCommand(initDetailsCommand(srv)) + boardCommand.AddCommand(initListCommand(srv)) + boardCommand.AddCommand(initListAllCommand(srv)) + boardCommand.AddCommand(initSearchCommand(srv)) return boardCommand } diff --git a/internal/cli/board/details.go b/internal/cli/board/details.go index 52bde9c0872..5023050c579 100644 --- a/internal/cli/board/details.go +++ b/internal/cli/board/details.go @@ -20,43 +20,44 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/board" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/fatih/color" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDetailsCommand() *cobra.Command { +func initDetailsCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var showFullDetails bool var listProgrammers bool var fqbn arguments.Fqbn var showProperties arguments.ShowProperties var detailsCommand = &cobra.Command{ - Use: fmt.Sprintf("details -b <%s>", tr("FQBN")), - Short: tr("Print details about a board."), - Long: tr("Show information about a board, in particular if the board has options to be specified in the FQBN."), + Use: fmt.Sprintf("details -b <%s>", i18n.Tr("FQBN")), + Short: i18n.Tr("Print details about a board."), + Long: i18n.Tr("Show information about a board, in particular if the board has options to be specified in the FQBN."), Example: " " + os.Args[0] + " board details -b arduino:avr:nano", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runDetailsCommand(fqbn.String(), showFullDetails, listProgrammers, showProperties) + runDetailsCommand(cmd.Context(), srv, fqbn.String(), showFullDetails, listProgrammers, showProperties) }, } - fqbn.AddToCommand(detailsCommand) - detailsCommand.Flags().BoolVarP(&showFullDetails, "full", "f", false, tr("Show full board details")) - detailsCommand.Flags().BoolVarP(&listProgrammers, "list-programmers", "", false, tr("Show list of available programmers")) + fqbn.AddToCommand(detailsCommand, srv) + detailsCommand.Flags().BoolVarP(&showFullDetails, "full", "f", false, i18n.Tr("Show full board details")) + detailsCommand.Flags().BoolVarP(&listProgrammers, "list-programmers", "", false, i18n.Tr("Show list of available programmers")) detailsCommand.MarkFlagRequired("fqbn") showProperties.AddToCommand(detailsCommand) return detailsCommand } -func runDetailsCommand(fqbn string, showFullDetails, listProgrammers bool, showProperties arguments.ShowProperties) { - inst := instance.CreateAndInit() +func runDetailsCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, fqbn string, showFullDetails, listProgrammers bool, showProperties arguments.ShowProperties) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli board details`") @@ -64,17 +65,17 @@ func runDetailsCommand(fqbn string, showFullDetails, listProgrammers bool, showP if err != nil { feedback.Fatal(err.Error(), feedback.ErrBadArgument) } - res, err := board.Details(context.Background(), &rpc.BoardDetailsRequest{ + res, err := srv.BoardDetails(ctx, &rpc.BoardDetailsRequest{ Instance: inst, Fqbn: fqbn, DoNotExpandBuildProperties: showPropertiesMode == arguments.ShowPropertiesUnexpanded, }) if err != nil { - feedback.Fatal(tr("Error getting board details: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error getting board details: %v", err), feedback.ErrGeneric) } feedback.PrintResult(detailsResult{ - details: res, + details: result.NewBoardDetailsResponse(res), listProgrammers: listProgrammers, showFullDetails: showFullDetails, showProperties: showPropertiesMode != arguments.ShowPropertiesDisabled, @@ -84,7 +85,7 @@ func runDetailsCommand(fqbn string, showFullDetails, listProgrammers bool, showP // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type detailsResult struct { - details *rpc.BoardDetailsResponse + details *result.BoardDetailsResponse listProgrammers bool showFullDetails bool showProperties bool @@ -99,7 +100,7 @@ func (dr detailsResult) String() string { if dr.showProperties { res := "" - for _, prop := range details.GetBuildProperties() { + for _, prop := range details.BuildProperties { res += fmt.Sprintln(prop) } return res @@ -107,9 +108,9 @@ func (dr detailsResult) String() string { if dr.listProgrammers { t := table.New() - t.AddRow(tr("Id"), tr("Programmer name")) + t.AddRow(i18n.Tr("Id"), i18n.Tr("Programmer name")) for _, programmer := range details.Programmers { - t.AddRow(programmer.GetId(), programmer.GetName()) + t.AddRow(programmer.Id, programmer.Name) } return t.Render() } @@ -135,68 +136,69 @@ func (dr detailsResult) String() string { } t.SetColumnWidthMode(1, table.Average) - t.AddRow(tr("Board name:"), details.Name) - t.AddRow(tr("FQBN:"), details.Fqbn) - addIfNotEmpty(tr("Board version:"), details.Version) - if details.GetDebuggingSupported() { - t.AddRow(tr("Debugging supported:"), table.NewCell("✔", color.New(color.FgGreen))) - } + t.AddRow(i18n.Tr("Board name:"), details.Name) + t.AddRow(i18n.Tr("FQBN:"), details.Fqbn) + addIfNotEmpty(i18n.Tr("Board version:"), details.Version) if details.Official { t.AddRow() // get some space from above - t.AddRow(tr("Official Arduino board:"), + t.AddRow(i18n.Tr("Official Arduino board:"), table.NewCell("✔", color.New(color.FgGreen))) } - for _, idp := range details.GetIdentificationProperties() { + for _, idp := range details.IdentificationProperties { + if idp.Properties == nil { + continue + } t.AddRow() // get some space from above - header := tr("Identification properties:") - for k, v := range idp.GetProperties() { - t.AddRow(header, k+"="+v) + header := i18n.Tr("Identification properties:") + keys := idp.Properties.Keys() + for _, k := range keys { + t.AddRow(header, k+"="+idp.Properties.Get(k)) header = "" } } t.AddRow() // get some space from above - addIfNotEmpty(tr("Package name:"), details.Package.Name) - addIfNotEmpty(tr("Package maintainer:"), details.Package.Maintainer) - addIfNotEmpty(tr("Package URL:"), details.Package.Url) - addIfNotEmpty(tr("Package website:"), details.Package.WebsiteUrl) - addIfNotEmpty(tr("Package online help:"), details.Package.Help.Online) + addIfNotEmpty(i18n.Tr("Package name:"), details.Package.Name) + addIfNotEmpty(i18n.Tr("Package maintainer:"), details.Package.Maintainer) + addIfNotEmpty(i18n.Tr("Package URL:"), details.Package.Url) + addIfNotEmpty(i18n.Tr("Package website:"), details.Package.WebsiteUrl) + addIfNotEmpty(i18n.Tr("Package online help:"), details.Package.Help.Online) t.AddRow() // get some space from above - addIfNotEmpty(tr("Platform name:"), details.Platform.Name) - addIfNotEmpty(tr("Platform category:"), details.Platform.Category) - addIfNotEmpty(tr("Platform architecture:"), details.Platform.Architecture) - addIfNotEmpty(tr("Platform URL:"), details.Platform.Url) - addIfNotEmpty(tr("Platform file name:"), details.Platform.ArchiveFilename) + addIfNotEmpty(i18n.Tr("Platform name:"), details.Platform.Name) + addIfNotEmpty(i18n.Tr("Platform category:"), details.Platform.Category) + addIfNotEmpty(i18n.Tr("Platform architecture:"), details.Platform.Architecture) + addIfNotEmpty(i18n.Tr("Platform URL:"), details.Platform.Url) + addIfNotEmpty(i18n.Tr("Platform file name:"), details.Platform.ArchiveFilename) if details.Platform.Size != 0 { - addIfNotEmpty(tr("Platform size (bytes):"), fmt.Sprint(details.Platform.Size)) + addIfNotEmpty(i18n.Tr("Platform size (bytes):"), fmt.Sprint(details.Platform.Size)) } - addIfNotEmpty(tr("Platform checksum:"), details.Platform.Checksum) + addIfNotEmpty(i18n.Tr("Platform checksum:"), details.Platform.Checksum) t.AddRow() // get some space from above tab.SetColumnWidthMode(1, table.Average) for _, tool := range details.ToolsDependencies { - tab.AddRow(tr("Required tool:"), tool.Packager+":"+tool.Name, tool.Version) + tab.AddRow(i18n.Tr("Required tool:"), tool.Packager+":"+tool.Name, tool.Version) if dr.showFullDetails { for _, sys := range tool.Systems { - tab.AddRow("", tr("OS:"), sys.Host) - tab.AddRow("", tr("File:"), sys.ArchiveFilename) - tab.AddRow("", tr("Size (bytes):"), fmt.Sprint(sys.Size)) - tab.AddRow("", tr("Checksum:"), sys.Checksum) - tab.AddRow("", tr("URL:"), sys.Url) + tab.AddRow("", i18n.Tr("OS:"), sys.Host) + tab.AddRow("", i18n.Tr("File:"), sys.ArchiveFilename) + tab.AddRow("", i18n.Tr("Size (bytes):"), fmt.Sprint(sys.Size)) + tab.AddRow("", i18n.Tr("Checksum:"), sys.Checksum) + tab.AddRow("", i18n.Tr("URL:"), sys.Url) tab.AddRow() // get some space from above } } } + green := color.New(color.FgGreen) tab.AddRow() // get some space from above for _, option := range details.ConfigOptions { - tab.AddRow(tr("Option:"), option.OptionLabel, "", option.Option) + tab.AddRow(i18n.Tr("Option:"), option.OptionLabel, "", option.Option) for _, value := range option.Values { - green := color.New(color.FgGreen) if value.Selected { tab.AddRow("", table.NewCell(value.ValueLabel, green), @@ -211,9 +213,13 @@ func (dr detailsResult) String() string { } } - tab.AddRow(tr("Programmers:"), tr("ID"), tr("Name")) + tab.AddRow(i18n.Tr("Programmers:"), i18n.Tr("ID"), i18n.Tr("Name"), "") for _, programmer := range details.Programmers { - tab.AddRow("", programmer.GetId(), programmer.GetName()) + if programmer.Id == details.DefaultProgrammerID { + tab.AddRow("", table.NewCell(programmer.Id, green), table.NewCell(programmer.Name, green), table.NewCell("✔ (default)", green)) + } else { + tab.AddRow("", programmer.Id, programmer.Name) + } } return t.Render() + tab.Render() diff --git a/internal/cli/board/list.go b/internal/cli/board/list.go index 65b0bd5e04d..d042e987d11 100644 --- a/internal/cli/board/list.go +++ b/internal/cli/board/list.go @@ -22,136 +22,146 @@ import ( "os" "sort" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/arduino/cores" - "github.com/arduino/arduino-cli/commands/board" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/pkg/fqbn" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initListCommand() *cobra.Command { +func initListCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var timeoutArg arguments.DiscoveryTimeout var watch bool var fqbn arguments.Fqbn listCommand := &cobra.Command{ Use: "list", - Short: tr("List connected boards."), - Long: tr("Detects and displays a list of boards connected to the current computer."), + Short: i18n.Tr("List connected boards."), + Long: i18n.Tr("Detects and displays a list of boards connected to the current computer."), Example: " " + os.Args[0] + " board list --discovery-timeout 10s", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runListCommand(watch, timeoutArg.Get().Milliseconds(), fqbn.String()) + runListCommand(cmd.Context(), srv, watch, timeoutArg.Get().Milliseconds(), fqbn.String()) }, } timeoutArg.AddToCommand(listCommand) - fqbn.AddToCommand(listCommand) - listCommand.Flags().BoolVarP(&watch, "watch", "w", false, tr("Command keeps running and prints list of connected boards whenever there is a change.")) + fqbn.AddToCommand(listCommand, srv) + listCommand.Flags().BoolVarP(&watch, "watch", "w", false, i18n.Tr("Command keeps running and prints list of connected boards whenever there is a change.")) return listCommand } // runListCommand detects and lists the connected arduino boards -func runListCommand(watch bool, timeout int64, fqbn string) { - inst := instance.CreateAndInit() +func runListCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, watch bool, timeout int64, fqbn string) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli board list`") if watch { - watchList(inst) + watchList(ctx, inst, srv) return } - ports, discoveryErrors, err := board.List(&rpc.BoardListRequest{ + list, err := srv.BoardList(ctx, &rpc.BoardListRequest{ Instance: inst, Timeout: timeout, Fqbn: fqbn, }) - var invalidFQBNErr *arduino.InvalidFQBNError + ports := list.GetPorts() + discoveryErrors := list.GetWarnings() + var invalidFQBNErr *cmderrors.InvalidFQBNError if errors.As(err, &invalidFQBNErr) { - feedback.Fatal(tr(err.Error()), feedback.ErrBadArgument) + feedback.Fatal(err.Error(), feedback.ErrBadArgument) } if err != nil { - feedback.Warning(tr("Error detecting boards: %v", err)) + feedback.Warning(i18n.Tr("Error detecting boards: %v", err)) } for _, err := range discoveryErrors { - feedback.Warning(tr("Error starting discovery: %v", err)) + feedback.Warning(i18n.Tr("Error starting discovery: %v", err)) } - feedback.PrintResult(result{ports}) + + feedback.PrintResult(listResult{result.NewDetectedPorts(ports)}) } -func watchList(inst *rpc.Instance) { - eventsChan, err := board.Watch(context.Background(), &rpc.BoardListWatchRequest{Instance: inst}) - if err != nil { - feedback.Fatal(tr("Error detecting boards: %v", err), feedback.ErrNetwork) - } +func watchList(ctx context.Context, inst *rpc.Instance, srv rpc.ArduinoCoreServiceServer) { + stream, eventsChan := commands.BoardListWatchProxyToChan(ctx) + go func() { + err := srv.BoardListWatch(&rpc.BoardListWatchRequest{Instance: inst}, stream) + if err != nil { + feedback.Fatal(i18n.Tr("Error detecting boards: %v", err), feedback.ErrNetwork) + } + }() // This is done to avoid printing the header each time a new event is received if feedback.GetFormat() == feedback.Text { t := table.New() - t.SetHeader(tr("Port"), tr("Type"), tr("Event"), tr("Board Name"), tr("FQBN"), tr("Core")) + t.SetHeader(i18n.Tr("Port"), i18n.Tr("Type"), i18n.Tr("Event"), i18n.Tr("Board Name"), i18n.Tr("FQBN"), i18n.Tr("Core")) feedback.Print(t.Render()) } for event := range eventsChan { - feedback.PrintResult(watchEvent{ - Type: event.EventType, - Boards: event.Port.MatchingBoards, - Port: event.Port.Port, - Error: event.Error, - }) + if res := result.NewBoardListWatchResponse(event); res != nil { + feedback.PrintResult(watchEventResult{ + Type: res.EventType, + Boards: res.Port.MatchingBoards, + Port: res.Port.Port, + Error: res.Error, + }) + } } } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation -type result struct { - ports []*rpc.DetectedPort +type listResult struct { + Ports []*result.DetectedPort `json:"detected_ports"` } -func (dr result) Data() interface{} { - return dr.ports +func (dr listResult) Data() interface{} { + return dr } -func (dr result) String() string { - if len(dr.ports) == 0 { - return tr("No boards found.") +func (dr listResult) String() string { + if len(dr.Ports) == 0 { + return i18n.Tr("No boards found.") } - sort.Slice(dr.ports, func(i, j int) bool { - x, y := dr.ports[i].Port, dr.ports[j].Port - return x.GetProtocol() < y.GetProtocol() || - (x.GetProtocol() == y.GetProtocol() && x.GetAddress() < y.GetAddress()) + sort.Slice(dr.Ports, func(i, j int) bool { + x, y := dr.Ports[i].Port, dr.Ports[j].Port + return x.Protocol < y.Protocol || + (x.Protocol == y.Protocol && x.Address < y.Address) }) t := table.New() - t.SetHeader(tr("Port"), tr("Protocol"), tr("Type"), tr("Board Name"), tr("FQBN"), tr("Core")) - for _, detectedPort := range dr.ports { + t.SetHeader(i18n.Tr("Port"), i18n.Tr("Protocol"), i18n.Tr("Type"), i18n.Tr("Board Name"), i18n.Tr("FQBN"), i18n.Tr("Core")) + for _, detectedPort := range dr.Ports { port := detectedPort.Port - protocol := port.GetProtocol() - address := port.GetAddress() - if port.GetProtocol() == "serial" { - address = port.GetAddress() + protocol := port.Protocol + address := port.Address + if port.Protocol == "serial" { + address = port.Address } - protocolLabel := port.GetProtocolLabel() - if boards := detectedPort.GetMatchingBoards(); len(boards) > 0 { + protocolLabel := port.ProtocolLabel + if boards := detectedPort.MatchingBoards; len(boards) > 0 { sort.Slice(boards, func(i, j int) bool { x, y := boards[i], boards[j] - return x.GetName() < y.GetName() || (x.GetName() == y.GetName() && x.GetFqbn() < y.GetFqbn()) + return x.Name < y.Name || (x.Name == y.Name && x.Fqbn < y.Fqbn) }) for _, b := range boards { - board := b.GetName() + board := b.Name // to improve the user experience, show on a dedicated column // the name of the core supporting the board detected var coreName = "" - fqbn, err := cores.ParseFQBN(b.GetFqbn()) + fqbn, err := fqbn.Parse(b.Fqbn) if err == nil { - coreName = fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch) + coreName = fmt.Sprintf("%s:%s", fqbn.Vendor, fqbn.Architecture) } t.AddRow(address, protocol, protocolLabel, board, fqbn, coreName) @@ -161,7 +171,7 @@ func (dr result) String() string { protocol = "" } } else { - board := tr("Unknown") + board := i18n.Tr("Unknown") fqbn := "" coreName := "" t.AddRow(address, protocol, protocolLabel, board, fqbn, coreName) @@ -170,23 +180,23 @@ func (dr result) String() string { return t.Render() } -type watchEvent struct { - Type string `json:"eventType"` - Boards []*rpc.BoardListItem `json:"matching_boards,omitempty"` - Port *rpc.Port `json:"port,omitempty"` - Error string `json:"error,omitempty"` +type watchEventResult struct { + Type string `json:"eventType"` + Boards []*result.BoardListItem `json:"matching_boards,omitempty"` + Port *result.Port `json:"port,omitempty"` + Error string `json:"error,omitempty"` } -func (dr watchEvent) Data() interface{} { +func (dr watchEventResult) Data() interface{} { return dr } -func (dr watchEvent) String() string { +func (dr watchEventResult) String() string { t := table.New() event := map[string]string{ - "add": tr("Connected"), - "remove": tr("Disconnected"), + "add": i18n.Tr("Connected"), + "remove": i18n.Tr("Disconnected"), }[dr.Type] address := fmt.Sprintf("%s://%s", dr.Port.Protocol, dr.Port.Address) @@ -197,17 +207,17 @@ func (dr watchEvent) String() string { if boards := dr.Boards; len(boards) > 0 { sort.Slice(boards, func(i, j int) bool { x, y := boards[i], boards[j] - return x.GetName() < y.GetName() || (x.GetName() == y.GetName() && x.GetFqbn() < y.GetFqbn()) + return x.Name < y.Name || (x.Name == y.Name && x.Fqbn < y.Fqbn) }) for _, b := range boards { - board := b.GetName() + board := b.Name // to improve the user experience, show on a dedicated column // the name of the core supporting the board detected var coreName = "" - fqbn, err := cores.ParseFQBN(b.GetFqbn()) + fqbn, err := fqbn.Parse(b.Fqbn) if err == nil { - coreName = fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch) + coreName = fmt.Sprintf("%s:%s", fqbn.Vendor, fqbn.Architecture) } t.AddRow(address, protocol, event, board, fqbn, coreName) diff --git a/internal/cli/board/listall.go b/internal/cli/board/listall.go index 0f47cba710a..aeb46c84061 100644 --- a/internal/cli/board/listall.go +++ b/internal/cli/board/listall.go @@ -21,55 +21,58 @@ import ( "os" "sort" - "github.com/arduino/arduino-cli/commands/board" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) var showHiddenBoard bool -func initListAllCommand() *cobra.Command { +func initListAllCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var listAllCommand = &cobra.Command{ - Use: fmt.Sprintf("listall [%s]", tr("boardname")), - Short: tr("List all known boards and their corresponding FQBN."), - Long: tr(`List all boards that have the support platform installed. You can search + Use: fmt.Sprintf("listall [%s]", i18n.Tr("boardname")), + Short: i18n.Tr("List all known boards and their corresponding FQBN."), + Long: i18n.Tr(`List all boards that have the support platform installed. You can search for a specific board if you specify the board name`), Example: "" + " " + os.Args[0] + " board listall\n" + " " + os.Args[0] + " board listall zero", Args: cobra.ArbitraryArgs, - Run: runListAllCommand, + Run: func(cmd *cobra.Command, args []string) { + runListAllCommand(cmd.Context(), args, srv) + }, } - listAllCommand.Flags().BoolVarP(&showHiddenBoard, "show-hidden", "a", false, tr("Show also boards marked as 'hidden' in the platform")) + listAllCommand.Flags().BoolVarP(&showHiddenBoard, "show-hidden", "a", false, i18n.Tr("Show also boards marked as 'hidden' in the platform")) return listAllCommand } // runListAllCommand list all installed boards -func runListAllCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runListAllCommand(ctx context.Context, args []string, srv rpc.ArduinoCoreServiceServer) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli board listall`") - list, err := board.ListAll(context.Background(), &rpc.BoardListAllRequest{ + list, err := srv.BoardListAll(ctx, &rpc.BoardListAllRequest{ Instance: inst, SearchArgs: args, IncludeHiddenBoards: showHiddenBoard, }) if err != nil { - feedback.Fatal(tr("Error listing boards: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error listing boards: %v", err), feedback.ErrGeneric) } - feedback.PrintResult(resultAll{list}) + feedback.PrintResult(resultAll{result.NewBoardListAllResponse(list)}) } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type resultAll struct { - list *rpc.BoardListAllResponse + list *result.BoardListAllResponse } func (dr resultAll) Data() interface{} { @@ -77,18 +80,23 @@ func (dr resultAll) Data() interface{} { } func (dr resultAll) String() string { + t := table.New() + t.SetHeader(i18n.Tr("Board Name"), i18n.Tr("FQBN"), "") + + if dr.list == nil || len(dr.list.Boards) == 0 { + return t.Render() + } + sort.Slice(dr.list.Boards, func(i, j int) bool { - return dr.list.Boards[i].GetName() < dr.list.Boards[j].GetName() + return dr.list.Boards[i].Name < dr.list.Boards[j].Name }) - t := table.New() - t.SetHeader(tr("Board Name"), tr("FQBN"), "") - for _, item := range dr.list.GetBoards() { + for _, item := range dr.list.Boards { hidden := "" if item.IsHidden { - hidden = tr("(hidden)") + hidden = i18n.Tr("(hidden)") } - t.AddRow(item.GetName(), item.GetFqbn(), hidden) + t.AddRow(item.Name, item.Fqbn, hidden) } return t.Render() } diff --git a/internal/cli/board/search.go b/internal/cli/board/search.go index 102e9ea1dae..5df42f6009c 100644 --- a/internal/cli/board/search.go +++ b/internal/cli/board/search.go @@ -22,70 +22,78 @@ import ( "sort" "strings" - "github.com/arduino/arduino-cli/commands/board" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initSearchCommand() *cobra.Command { +func initSearchCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var searchCommand = &cobra.Command{ - Use: fmt.Sprintf("search [%s]", tr("boardname")), - Short: tr("Search for a board in the Boards Manager."), - Long: tr(`Search for a board in the Boards Manager using the specified keywords.`), + Use: fmt.Sprintf("search [%s]", i18n.Tr("boardname")), + Short: i18n.Tr("Search for a board in the Boards Manager."), + Long: i18n.Tr(`Search for a board in the Boards Manager using the specified keywords.`), Example: "" + " " + os.Args[0] + " board search\n" + " " + os.Args[0] + " board search zero", Args: cobra.ArbitraryArgs, - Run: runSearchCommand, + Run: func(cmd *cobra.Command, args []string) { + runSearchCommand(cmd.Context(), srv, args) + }, } - searchCommand.Flags().BoolVarP(&showHiddenBoard, "show-hidden", "a", false, tr("Show also boards marked as 'hidden' in the platform")) + searchCommand.Flags().BoolVarP(&showHiddenBoard, "show-hidden", "a", false, i18n.Tr("Show also boards marked as 'hidden' in the platform")) return searchCommand } -func runSearchCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runSearchCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli board search`") - res, err := board.Search(context.Background(), &rpc.BoardSearchRequest{ + res, err := srv.BoardSearch(ctx, &rpc.BoardSearchRequest{ Instance: inst, SearchArgs: strings.Join(args, " "), IncludeHiddenBoards: showHiddenBoard, }) if err != nil { - feedback.Fatal(tr("Error searching boards: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error searching boards: %v", err), feedback.ErrGeneric) } - feedback.PrintResult(searchResults{res.Boards}) + feedback.PrintResult(searchResults{result.NewBoardListItems(res.GetBoards())}) } // output from this command requires special formatting so we create a dedicated // feedback.Result implementation type searchResults struct { - boards []*rpc.BoardListItem + Boards []*result.BoardListItem `json:"boards"` } func (r searchResults) Data() interface{} { - return r.boards + return r } func (r searchResults) String() string { - sort.Slice(r.boards, func(i, j int) bool { - return r.boards[i].GetName() < r.boards[j].GetName() - }) + if len(r.Boards) == 0 { + return "" + } t := table.New() - t.SetHeader(tr("Board Name"), tr("FQBN"), tr("Platform ID"), "") - for _, item := range r.boards { + t.SetHeader(i18n.Tr("Board Name"), i18n.Tr("FQBN"), i18n.Tr("Platform ID"), "") + + sort.Slice(r.Boards, func(i, j int) bool { + return r.Boards[i].Name < r.Boards[j].Name + }) + + for _, item := range r.Boards { hidden := "" if item.IsHidden { - hidden = tr("(hidden)") + hidden = i18n.Tr("(hidden)") } - t.AddRow(item.GetName(), item.GetFqbn(), item.Platform.Id, hidden) + t.AddRow(item.Name, item.Fqbn, item.Platform.Metadata.Id, hidden) } return t.Render() } diff --git a/internal/cli/burnbootloader/burnbootloader.go b/internal/cli/burnbootloader/burnbootloader.go index 23cd9a5006e..a9798259a14 100644 --- a/internal/cli/burnbootloader/burnbootloader.go +++ b/internal/cli/burnbootloader/burnbootloader.go @@ -17,72 +17,87 @@ package burnbootloader import ( "context" + "errors" "os" - "github.com/arduino/arduino-cli/commands/upload" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) var ( - fqbn arguments.Fqbn - port arguments.Port - verbose bool - verify bool - programmer arguments.Programmer - dryRun bool - tr = i18n.Tr + fqbn arguments.Fqbn + port arguments.Port + verbose bool + verify bool + programmer arguments.Programmer + dryRun bool + uploadProperties []string ) // NewCommand created a new `burn-bootloader` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { burnBootloaderCommand := &cobra.Command{ Use: "burn-bootloader", - Short: tr("Upload the bootloader."), - Long: tr("Upload the bootloader on the board using an external programmer."), + Short: i18n.Tr("Upload the bootloader."), + Long: i18n.Tr("Upload the bootloader on the board using an external programmer."), Example: " " + os.Args[0] + " burn-bootloader -b arduino:avr:uno -P atmel_ice", - Args: cobra.MaximumNArgs(1), - Run: runBootloaderCommand, + Args: cobra.NoArgs, + Run: func(cmd *cobra.Command, args []string) { + runBootloaderCommand(cmd.Context(), srv) + }, } - fqbn.AddToCommand(burnBootloaderCommand) - port.AddToCommand(burnBootloaderCommand) - programmer.AddToCommand(burnBootloaderCommand) - burnBootloaderCommand.Flags().BoolVarP(&verify, "verify", "t", false, tr("Verify uploaded binary after the upload.")) - burnBootloaderCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, tr("Turns on verbose mode.")) - burnBootloaderCommand.Flags().BoolVar(&dryRun, "dry-run", false, tr("Do not perform the actual upload, just log out actions")) + fqbn.AddToCommand(burnBootloaderCommand, srv) + port.AddToCommand(burnBootloaderCommand, srv) + programmer.AddToCommand(burnBootloaderCommand, srv) + burnBootloaderCommand.Flags().StringArrayVar(&uploadProperties, "upload-property", []string{}, + i18n.Tr("Override an upload property with a custom value. Can be used multiple times for multiple properties.")) + burnBootloaderCommand.Flags().BoolVarP(&verify, "verify", "t", false, i18n.Tr("Verify uploaded binary after the upload.")) + burnBootloaderCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, i18n.Tr("Turns on verbose mode.")) + burnBootloaderCommand.Flags().BoolVar(&dryRun, "dry-run", false, i18n.Tr("Do not perform the actual upload, just log out actions")) burnBootloaderCommand.Flags().MarkHidden("dry-run") return burnBootloaderCommand } -func runBootloaderCommand(command *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runBootloaderCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { + instance := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli burn-bootloader`") // We don't need a Sketch to upload a board's bootloader - discoveryPort, err := port.GetPort(instance, "", "") + discoveryPort, err := port.GetPort(ctx, instance, srv, "", "", nil) if err != nil { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), feedback.ErrGeneric) } stdOut, stdErr, res := feedback.OutputStreams() - if _, err := upload.BurnBootloader(context.Background(), &rpc.BurnBootloaderRequest{ - Instance: instance, - Fqbn: fqbn.String(), - Port: discoveryPort, - Verbose: verbose, - Verify: verify, - Programmer: programmer.String(), - DryRun: dryRun, - }, stdOut, stdErr); err != nil { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + stream := commands.BurnBootloaderToServerStreams(ctx, stdOut, stdErr) + if err := srv.BurnBootloader(&rpc.BurnBootloaderRequest{ + Instance: instance, + Fqbn: fqbn.String(), + Port: discoveryPort, + Verbose: verbose, + Verify: verify, + Programmer: programmer.String(ctx, instance, srv, fqbn.String()), + UploadProperties: uploadProperties, + DryRun: dryRun, + }, stream); err != nil { + errcode := feedback.ErrGeneric + if errors.Is(err, &cmderrors.ProgrammerRequiredForUploadError{}) { + errcode = feedback.ErrMissingProgrammer + } + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), errcode) } feedback.PrintResult(res()) } diff --git a/internal/cli/cache/cache.go b/internal/cli/cache/cache.go index 1d8394f03bc..38b12c3c0fa 100644 --- a/internal/cli/cache/cache.go +++ b/internal/cli/cache/cache.go @@ -18,23 +18,22 @@ package cache import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `cache` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { cacheCommand := &cobra.Command{ Use: "cache", - Short: tr("Arduino cache commands."), - Long: tr("Arduino cache commands."), - Example: "# " + tr("Clean caches.") + "\n" + + Short: i18n.Tr("Arduino cache commands."), + Long: i18n.Tr("Arduino cache commands."), + Example: "# " + i18n.Tr("Clean caches.") + "\n" + " " + os.Args[0] + " cache clean\n\n", } - cacheCommand.AddCommand(initCleanCommand()) + cacheCommand.AddCommand(initCleanCommand(srv)) return cacheCommand } diff --git a/internal/cli/cache/clean.go b/internal/cli/cache/clean.go index f5fbb18c4ec..d5bfead5ac3 100644 --- a/internal/cli/cache/clean.go +++ b/internal/cli/cache/clean.go @@ -16,32 +16,35 @@ package cache import ( + "context" "os" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initCleanCommand() *cobra.Command { +func initCleanCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { cleanCommand := &cobra.Command{ Use: "clean", - Short: tr("Delete Boards/Library Manager download cache."), - Long: tr("Delete contents of the `directories.downloads` folder, where archive files are staged during installation of libraries and boards platforms."), + Short: i18n.Tr("Delete Boards/Library Manager download cache."), + Long: i18n.Tr("Delete contents of the downloads cache folder, where archive files are staged during installation of libraries and boards platforms."), Example: " " + os.Args[0] + " cache clean", Args: cobra.NoArgs, - Run: runCleanCommand, + Run: func(cmd *cobra.Command, args []string) { + runCleanCommand(cmd.Context(), srv) + }, } return cleanCommand } -func runCleanCommand(cmd *cobra.Command, args []string) { +func runCleanCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli cache clean`") - cachePath := configuration.DownloadsDir(configuration.Settings) - err := cachePath.RemoveAll() + _, err := srv.CleanDownloadCacheDirectory(ctx, &rpc.CleanDownloadCacheDirectoryRequest{}) if err != nil { - feedback.Fatal(tr("Error cleaning caches: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error cleaning caches: %v", err), feedback.ErrGeneric) } } diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 19a92767acf..eb5c381abf5 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -16,13 +16,12 @@ package cli import ( + "context" "fmt" "io" "os" "strings" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/board" "github.com/arduino/arduino-cli/internal/cli/burnbootloader" "github.com/arduino/arduino-cli/internal/cli/cache" @@ -43,8 +42,10 @@ import ( "github.com/arduino/arduino-cli/internal/cli/upgrade" "github.com/arduino/arduino-cli/internal/cli/upload" "github.com/arduino/arduino-cli/internal/cli/version" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/arduino/arduino-cli/internal/inventory" - versioninfo "github.com/arduino/arduino-cli/version" + versioninfo "github.com/arduino/arduino-cli/internal/version" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/fatih/color" "github.com/mattn/go-colorable" "github.com/rifflock/lfshook" @@ -53,79 +54,140 @@ import ( semver "go.bug.st/relaxed-semver" ) -var ( - verbose bool - outputFormat string - configFile string - updaterMessageChan chan *semver.Version = make(chan *semver.Version) -) - // NewCommand creates a new ArduinoCli command root -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { cobra.AddTemplateFunc("tr", i18n.Tr) - // ArduinoCli is the root command - arduinoCli := &cobra.Command{ - Use: "arduino-cli", - Short: tr("Arduino CLI."), - Long: tr("Arduino Command Line Interface (arduino-cli)."), - Example: fmt.Sprintf(" %s <%s> [%s...]", os.Args[0], tr("command"), tr("flags")), - PersistentPreRun: preRun, - PersistentPostRun: postRun, - } + var updaterMessageChan chan *semver.Version - arduinoCli.SetUsageTemplate(getUsageTemplate()) + var ( + verbose bool + noColor bool + logLevel string + logFile string + logFormat string + jsonOutput bool + outputFormat string + additionalUrls []string + ) - createCliCommandTree(arduinoCli) + resp, err := srv.ConfigurationGet(context.Background(), &rpc.ConfigurationGetRequest{}) + if err != nil { + panic("Error creating configuration: " + err.Error()) + } + settings := resp.GetConfiguration() + + defaultLogFile := settings.GetLogging().GetFile() + defaultLogFormat := settings.GetLogging().GetFormat() + defaultLogLevel := settings.GetLogging().GetLevel() + defaultAdditionalURLs := settings.GetBoardManager().GetAdditionalUrls() + defaultOutputNoColor := settings.GetOutput().GetNoColor() + + cmd := &cobra.Command{ + Use: "arduino-cli", + Short: i18n.Tr("Arduino CLI."), + Long: i18n.Tr("Arduino Command Line Interface (arduino-cli)."), + Example: fmt.Sprintf(" %s <%s> [%s...]", os.Args[0], i18n.Tr("command"), i18n.Tr("flags")), + PersistentPreRun: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() + + config.ApplyGlobalFlagsToConfiguration(ctx, cmd, srv) + + if jsonOutput { + outputFormat = "json" + } + if outputFormat != "text" { + cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { + feedback.Fatal(i18n.Tr("Should show help message, but it is available only in TEXT mode."), feedback.ErrBadArgument) + }) + } + + preRun(verbose, outputFormat, logLevel, logFile, logFormat, noColor, settings) + + // Log the configuration file used + if configFile := config.GetConfigFile(ctx); configFile != "" { + logrus.Infof("Using config file: %s", configFile) + } else { + logrus.Info("Config file not found, using default values") + } + + if cmd.Name() != "version" { + updaterMessageChan = make(chan *semver.Version) + go func() { + res, err := srv.CheckForArduinoCLIUpdates(ctx, &rpc.CheckForArduinoCLIUpdatesRequest{}) + if err != nil { + logrus.Warnf("Error checking for updates: %v", err) + updaterMessageChan <- nil + return + } + if v := res.GetNewestVersion(); v == "" { + updaterMessageChan <- nil + } else if latest, err := semver.Parse(v); err != nil { + logrus.Warnf("Error parsing version: %v", err) + } else { + logrus.Infof("New version available: %s", v) + updaterMessageChan <- latest + } + }() + } + }, + PersistentPostRun: func(cmd *cobra.Command, args []string) { + if updaterMessageChan != nil { + if latestVersion := <-updaterMessageChan; latestVersion != nil { + // Notify the user a new version is available + updater.NotifyNewVersionIsAvailable(latestVersion.String()) + } + } + }, + } - return arduinoCli -} + cmd.SetUsageTemplate(getUsageTemplate()) -// this is here only for testing -func createCliCommandTree(cmd *cobra.Command) { - cmd.AddCommand(board.NewCommand()) - cmd.AddCommand(cache.NewCommand()) - cmd.AddCommand(compile.NewCommand()) + cmd.AddCommand(board.NewCommand(srv)) + cmd.AddCommand(cache.NewCommand(srv)) + cmd.AddCommand(compile.NewCommand(srv, settings)) cmd.AddCommand(completion.NewCommand()) - cmd.AddCommand(config.NewCommand()) - cmd.AddCommand(core.NewCommand()) - cmd.AddCommand(daemon.NewCommand()) + cmd.AddCommand(config.NewCommand(srv, settings)) + cmd.AddCommand(core.NewCommand(srv)) + cmd.AddCommand(daemon.NewCommand(srv, settings)) cmd.AddCommand(generatedocs.NewCommand()) - cmd.AddCommand(lib.NewCommand()) - cmd.AddCommand(monitor.NewCommand()) - cmd.AddCommand(outdated.NewCommand()) - cmd.AddCommand(sketch.NewCommand()) - cmd.AddCommand(update.NewCommand()) - cmd.AddCommand(upgrade.NewCommand()) - cmd.AddCommand(upload.NewCommand()) - cmd.AddCommand(debug.NewCommand()) - cmd.AddCommand(burnbootloader.NewCommand()) - cmd.AddCommand(version.NewCommand()) + cmd.AddCommand(lib.NewCommand(srv, settings)) + cmd.AddCommand(monitor.NewCommand(srv)) + cmd.AddCommand(outdated.NewCommand(srv)) + cmd.AddCommand(sketch.NewCommand(srv)) + cmd.AddCommand(update.NewCommand(srv)) + cmd.AddCommand(upgrade.NewCommand(srv)) + cmd.AddCommand(upload.NewCommand(srv)) + cmd.AddCommand(debug.NewCommand(srv)) + cmd.AddCommand(burnbootloader.NewCommand(srv)) + cmd.AddCommand(version.NewCommand(srv)) cmd.AddCommand(feedback.NewCommand()) - cmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, tr("Print the logs on the standard output.")) + cmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, i18n.Tr("Print the logs on the standard output.")) cmd.Flag("verbose").Hidden = true - cmd.PersistentFlags().BoolVar(&verbose, "log", false, tr("Print the logs on the standard output.")) + cmd.PersistentFlags().BoolVar(&verbose, "log", false, i18n.Tr("Print the logs on the standard output.")) validLogLevels := []string{"trace", "debug", "info", "warn", "error", "fatal", "panic"} - cmd.PersistentFlags().String("log-level", "", tr("Messages with this level and above will be logged. Valid levels are: %s", strings.Join(validLogLevels, ", "))) - cmd.RegisterFlagCompletionFunc("log-level", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return validLogLevels, cobra.ShellCompDirectiveDefault - }) - cmd.PersistentFlags().String("log-file", "", tr("Path to the file where logs will be written.")) + cmd.PersistentFlags().StringVar(&logLevel, "log-level", defaultLogLevel, i18n.Tr("Messages with this level and above will be logged. Valid levels are: %s", strings.Join(validLogLevels, ", "))) + cmd.RegisterFlagCompletionFunc("log-level", cobra.FixedCompletions(validLogLevels, cobra.ShellCompDirectiveDefault)) + cmd.PersistentFlags().StringVar(&logFile, "log-file", defaultLogFile, i18n.Tr("Path to the file where logs will be written.")) validLogFormats := []string{"text", "json"} - cmd.PersistentFlags().String("log-format", "", tr("The output format for the logs, can be: %s", strings.Join(validLogFormats, ", "))) - cmd.RegisterFlagCompletionFunc("log-format", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return validLogFormats, cobra.ShellCompDirectiveDefault - }) - validOutputFormats := []string{"text", "json", "jsonmini", "yaml"} - cmd.PersistentFlags().StringVar(&outputFormat, "format", "text", tr("The output format for the logs, can be: %s", strings.Join(validOutputFormats, ", "))) - cmd.RegisterFlagCompletionFunc("format", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return validOutputFormats, cobra.ShellCompDirectiveDefault - }) - cmd.PersistentFlags().StringVar(&configFile, "config-file", "", tr("The custom config file (if not specified the default will be used).")) - cmd.PersistentFlags().StringSlice("additional-urls", []string{}, tr("Comma-separated list of additional URLs for the Boards Manager.")) - cmd.PersistentFlags().Bool("no-color", false, "Disable colored output.") - configuration.BindFlags(cmd, configuration.Settings) + cmd.PersistentFlags().StringVar(&logFormat, "log-format", defaultLogFormat, i18n.Tr("The output format for the logs, can be: %s", strings.Join(validLogFormats, ", "))) + cmd.RegisterFlagCompletionFunc("log-format", cobra.FixedCompletions(validLogFormats, cobra.ShellCompDirectiveDefault)) + validOutputFormats := []string{"text", "json", "jsonmini"} + cmd.PersistentFlags().StringVar(&outputFormat, "format", "text", i18n.Tr("The command output format, can be: %s", strings.Join(validOutputFormats, ", "))) + cmd.RegisterFlagCompletionFunc("format", cobra.FixedCompletions(validOutputFormats, cobra.ShellCompDirectiveDefault)) + cmd.Flag("format").Hidden = true + cmd.PersistentFlags().BoolVar(&jsonOutput, "json", false, i18n.Tr("Print the output in JSON format.")) + cmd.PersistentFlags().StringSliceVar(&additionalUrls, "additional-urls", defaultAdditionalURLs, i18n.Tr("Comma-separated list of additional URLs for the Boards Manager.")) + cmd.PersistentFlags().BoolVar(&noColor, "no-color", defaultOutputNoColor, "Disable colored output.") + + // We are not using cobra to parse the following flags, because we manually parse them in main.go. + // Just leaving it here so cobra will output help usage and not complain about them. + cmd.PersistentFlags().String("config-file", "", + i18n.Tr("The custom config file (if not specified the default will be used).")) + cmd.PersistentFlags().String("config-dir", "", + i18n.Tr("Sets the default data directory (Arduino CLI will look for configuration file in this directory).")) + return cmd } // convert the string passed to the `--log-level` option to the corresponding @@ -144,35 +206,22 @@ func toLogLevel(s string) (t logrus.Level, found bool) { return } -func preRun(cmd *cobra.Command, args []string) { - configFile := configuration.Settings.ConfigFileUsed() - - // initialize inventory - err := inventory.Init(configuration.DataDir(configuration.Settings).String()) - if err != nil { - feedback.Fatal(fmt.Sprintf("Error: %v", err), feedback.ErrBadArgument) - } - - // https://no-color.org/ - color.NoColor = configuration.Settings.GetBool("output.no_color") || os.Getenv("NO_COLOR") != "" +func preRun(verbose bool, outputFormat string, logLevel, logFile, logFormat string, noColor bool, settings *rpc.Configuration) { + // + // Prepare the Feedback system + // // Set default feedback output to colorable + color.NoColor = noColor || os.Getenv("NO_COLOR") != "" // https://no-color.org/ feedback.SetOut(colorable.NewColorableStdout()) feedback.SetErr(colorable.NewColorableStderr()) - updaterMessageChan = make(chan *semver.Version) - go func() { - if cmd.Name() == "version" { - // The version command checks by itself if there's a new available version - updaterMessageChan <- nil - } - // Starts checking for updates - currentVersion, err := semver.Parse(versioninfo.VersionInfo.VersionString) - if err != nil { - updaterMessageChan <- nil - } - updaterMessageChan <- updater.CheckForUpdate(currentVersion) - }() + // use the output format to configure the Feedback + format, ok := feedback.ParseOutputFormat(outputFormat) + if !ok { + feedback.Fatal(i18n.Tr("Invalid output format: %s", outputFormat), feedback.ErrBadArgument) + } + feedback.SetFormat(format) // // Prepare logging @@ -191,17 +240,16 @@ func preRun(cmd *cobra.Command, args []string) { } // set the Logger format - logFormat := strings.ToLower(configuration.Settings.GetString("logging.format")) + logFormat = strings.ToLower(logFormat) if logFormat == "json" { logrus.SetFormatter(&logrus.JSONFormatter{}) } // should we log to file? - logFile := configuration.Settings.GetString("logging.file") if logFile != "" { file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { - feedback.Fatal(tr("Unable to open file for logging: %s", logFile), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Unable to open file for logging: %s", logFile), feedback.ErrGeneric) } // we use a hook so we don't get color codes in the log file @@ -213,49 +261,20 @@ func preRun(cmd *cobra.Command, args []string) { } // configure logging filter - if lvl, found := toLogLevel(configuration.Settings.GetString("logging.level")); !found { - feedback.Fatal(tr("Invalid option for --log-level: %s", configuration.Settings.GetString("logging.level")), feedback.ErrBadArgument) + if logrusLevel, found := toLogLevel(logLevel); !found { + feedback.Fatal(i18n.Tr("Invalid logging level: %s", logLevel), feedback.ErrBadArgument) } else { - logrus.SetLevel(lvl) - } - - // - // Prepare the Feedback system - // - - // check the right output format was passed - format, found := feedback.ParseOutputFormat(outputFormat) - if !found { - feedback.Fatal(tr("Invalid output format: %s", outputFormat), feedback.ErrBadArgument) + logrus.SetLevel(logrusLevel) } - // use the output format to configure the Feedback - feedback.SetFormat(format) - - // // Print some status info and check command is consistent - // - - if configFile != "" { - logrus.Infof("Using config file: %s", configFile) - } else { - logrus.Info("Config file not found, using default values") - } - logrus.Info(versioninfo.VersionInfo.Application + " version " + versioninfo.VersionInfo.VersionString) - if outputFormat != "text" { - cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { - logrus.Warn("Calling help on JSON format") - feedback.Fatal(tr("Invalid Call : should show Help, but it is available only in TEXT mode."), feedback.ErrBadArgument) - }) - } -} - -func postRun(cmd *cobra.Command, args []string) { - latestVersion := <-updaterMessageChan - if latestVersion != nil { - // Notify the user a new version is available - updater.NotifyNewVersionIsAvailable(latestVersion.String()) + // + // Initialize inventory + // + err := inventory.Init(settings.GetDirectories().GetData()) + if err != nil { + feedback.Fatal(fmt.Sprintf("Error: %v", err), feedback.ErrInitializingInventory) } } diff --git a/internal/cli/compile/compile.go b/internal/cli/compile/compile.go index 4ed8ab6638e..ad906fcd919 100644 --- a/internal/cli/compile/compile.go +++ b/internal/cli/compile/compile.go @@ -16,7 +16,6 @@ package compile import ( - "context" "encoding/json" "errors" "fmt" @@ -24,19 +23,16 @@ import ( "os" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/compile" - "github.com/arduino/arduino-cli/commands/core" - "github.com/arduino/arduino-cli/commands/sketch" - "github.com/arduino/arduino-cli/commands/upload" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/version" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" - "github.com/arduino/arduino-cli/version" "github.com/arduino/go-paths-helper" "github.com/fatih/color" "github.com/sirupsen/logrus" @@ -60,6 +56,7 @@ var ( uploadAfterCompile bool // Upload the binary after the compilation. portArgs arguments.Port // Upload port, e.g.: COM10 or /dev/ttyACM0. verify bool // Upload, verify uploaded binary after the upload. + exportBinaries bool // If set built binaries will be exported to the sketch folder exportDir string // The compiled binary is written to this file optimizeForDebug bool // Optimize compile output for debug, not for release programmer arguments.Programmer // Use the specified programmer to upload @@ -67,88 +64,96 @@ var ( compilationDatabaseOnly bool // Only create compilation database without actually compiling sourceOverrides string // Path to a .json file that contains a set of replacements of the sketch source code. dumpProfile bool // Create and print a profile configuration from the build + jobs int32 // Max number of parallel jobs // library and libraries sound similar but they're actually different. // library expects a path to the root folder of one single library. // libraries expects a path to a directory containing multiple libraries, similarly to the <directories.user>/libraries path. library []string // List of paths to libraries root folders. Can be used multiple times for different libraries libraries []string // List of custom libraries dir paths separated by commas. Or can be used multiple times for multiple libraries paths. skipLibrariesDiscovery bool - tr = i18n.Tr ) // NewCommand created a new `compile` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer, settings *rpc.Configuration) *cobra.Command { compileCommand := &cobra.Command{ Use: "compile", - Short: tr("Compiles Arduino sketches."), - Long: tr("Compiles Arduino sketches."), + Short: i18n.Tr("Compiles Arduino sketches."), + Long: i18n.Tr("Compiles Arduino sketches."), Example: "" + " " + os.Args[0] + " compile -b arduino:avr:uno /home/user/Arduino/MySketch\n" + " " + os.Args[0] + ` compile -b arduino:avr:uno --build-property "build.extra_flags=\"-DMY_DEFINE=\"hello world\"\"" /home/user/Arduino/MySketch` + "\n" + " " + os.Args[0] + ` compile -b arduino:avr:uno --build-property "build.extra_flags=-DPIN=2 \"-DMY_DEFINE=\"hello world\"\"" /home/user/Arduino/MySketch` + "\n" + " " + os.Args[0] + ` compile -b arduino:avr:uno --build-property build.extra_flags=-DPIN=2 --build-property "compiler.cpp.extra_flags=\"-DSSID=\"hello world\"\"" /home/user/Arduino/MySketch` + "\n", Args: cobra.MaximumNArgs(1), - Run: runCompileCommand, + PreRun: func(cmd *cobra.Command, args []string) { + arguments.CheckFlagsConflicts(cmd, "quiet", "verbose") + }, + Run: func(cmd *cobra.Command, args []string) { + if cmd.Flag("build-cache-path").Changed { + feedback.Warning(i18n.Tr("The flag --build-cache-path has been deprecated. Please use just --build-path alone or configure the build cache path in the Arduino CLI settings.")) + } + runCompileCommand(cmd, args, srv) + }, } - fqbnArg.AddToCommand(compileCommand) - profileArg.AddToCommand(compileCommand) - compileCommand.Flags().BoolVar(&dumpProfile, "dump-profile", false, tr("Create and print a profile configuration from the build.")) + fqbnArg.AddToCommand(compileCommand, srv) + profileArg.AddToCommand(compileCommand, srv) + compileCommand.Flags().BoolVar(&dumpProfile, "dump-profile", false, i18n.Tr("Create and print a profile configuration from the build.")) showPropertiesArg.AddToCommand(compileCommand) - compileCommand.Flags().BoolVar(&preprocess, "preprocess", false, tr("Print preprocessed code to stdout instead of compiling.")) - compileCommand.Flags().StringVar(&buildCachePath, "build-cache-path", "", tr("Builds of 'core.a' are saved into this path to be cached and reused.")) - compileCommand.Flags().StringVarP(&exportDir, "output-dir", "", "", tr("Save build artifacts in this directory.")) + compileCommand.Flags().BoolVar(&preprocess, "preprocess", false, i18n.Tr("Print preprocessed code to stdout instead of compiling.")) + compileCommand.Flags().StringVar(&buildCachePath, "build-cache-path", "", i18n.Tr("Builds of cores and sketches are saved into this path to be cached and reused.")) + compileCommand.Flag("build-cache-path").Hidden = true // deprecated + compileCommand.Flags().StringVar(&exportDir, "output-dir", "", i18n.Tr("Save build artifacts in this directory.")) compileCommand.Flags().StringVar(&buildPath, "build-path", "", - tr("Path where to save compiled files. If omitted, a directory will be created in the default temporary path of your OS.")) + i18n.Tr("Path where to save compiled files. If omitted, a directory will be created in the default temporary path of your OS.")) compileCommand.Flags().StringSliceVar(&buildProperties, "build-properties", []string{}, - tr("List of custom build properties separated by commas. Or can be used multiple times for multiple properties.")) + i18n.Tr("List of custom build properties separated by commas. Or can be used multiple times for multiple properties.")) compileCommand.Flags().StringArrayVar(&buildProperties, "build-property", []string{}, - tr("Override a build property with a custom value. Can be used multiple times for multiple properties.")) + i18n.Tr("Override a build property with a custom value. Can be used multiple times for multiple properties.")) compileCommand.Flags().StringVar(&keysKeychain, "keys-keychain", "", - tr("The path of the dir to search for the custom keys to sign and encrypt a binary. Used only by the platforms that support it.")) + i18n.Tr("The path of the dir to search for the custom keys to sign and encrypt a binary. Used only by the platforms that support it.")) compileCommand.Flags().StringVar(&signKey, "sign-key", "", - tr("The name of the custom signing key to use to sign a binary during the compile process. Used only by the platforms that support it.")) + i18n.Tr("The name of the custom signing key to use to sign a binary during the compile process. Used only by the platforms that support it.")) compileCommand.Flags().StringVar(&encryptKey, "encrypt-key", "", - tr("The name of the custom encryption key to use to encrypt a binary during the compile process. Used only by the platforms that support it.")) + i18n.Tr("The name of the custom encryption key to use to encrypt a binary during the compile process. Used only by the platforms that support it.")) compileCommand.Flags().StringVar(&warnings, "warnings", "none", - tr(`Optional, can be: %s. Used to tell gcc which warning level to use (-W flag).`, "none, default, more, all")) - compileCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, tr("Optional, turns on verbose mode.")) - compileCommand.Flags().BoolVar(&quiet, "quiet", false, tr("Optional, suppresses almost every output.")) - compileCommand.Flags().BoolVarP(&uploadAfterCompile, "upload", "u", false, tr("Upload the binary after the compilation.")) - portArgs.AddToCommand(compileCommand) - compileCommand.Flags().BoolVarP(&verify, "verify", "t", false, tr("Verify uploaded binary after the upload.")) + i18n.Tr(`Optional, can be: %s. Used to tell gcc which warning level to use (-W flag).`, "none, default, more, all")) + compileCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, i18n.Tr("Optional, turns on verbose mode.")) + compileCommand.Flags().BoolVarP(&quiet, "quiet", "q", false, i18n.Tr("Optional, suppresses almost every output.")) + compileCommand.Flags().BoolVarP(&uploadAfterCompile, "upload", "u", false, i18n.Tr("Upload the binary after the compilation.")) + portArgs.AddToCommand(compileCommand, srv) + compileCommand.Flags().BoolVarP(&verify, "verify", "t", false, i18n.Tr("Verify uploaded binary after the upload.")) compileCommand.Flags().StringSliceVar(&library, "library", []string{}, - tr("Path to a single library’s root folder. Can be used multiple times or entries can be comma separated.")) + i18n.Tr("Path to a single library’s root folder. Can be used multiple times or entries can be comma separated.")) compileCommand.Flags().StringSliceVar(&libraries, "libraries", []string{}, - tr("Path to a collection of libraries. Can be used multiple times or entries can be comma separated.")) - compileCommand.Flags().BoolVar(&optimizeForDebug, "optimize-for-debug", false, tr("Optional, optimize compile output for debugging, rather than for release.")) - programmer.AddToCommand(compileCommand) - compileCommand.Flags().BoolVar(&compilationDatabaseOnly, "only-compilation-database", false, tr("Just produce the compilation database, without actually compiling. All build commands are skipped except pre* hooks.")) - compileCommand.Flags().BoolVar(&clean, "clean", false, tr("Optional, cleanup the build folder and do not use any cached build.")) - // We must use the following syntax for this flag since it's also bound to settings. - // This must be done because the value is set when the binding is accessed from viper. Accessing from cobra would only - // read the value if the flag is set explicitly by the user. - compileCommand.Flags().BoolP("export-binaries", "e", false, tr("If set built binaries will be exported to the sketch folder.")) - compileCommand.Flags().StringVar(&sourceOverrides, "source-override", "", tr("Optional. Path to a .json file that contains a set of replacements of the sketch source code.")) + i18n.Tr("Path to a collection of libraries. Can be used multiple times or entries can be comma separated.")) + compileCommand.Flags().BoolVar(&optimizeForDebug, "optimize-for-debug", false, i18n.Tr("Optional, optimize compile output for debugging, rather than for release.")) + programmer.AddToCommand(compileCommand, srv) + compileCommand.Flags().BoolVar(&compilationDatabaseOnly, "only-compilation-database", false, i18n.Tr("Just produce the compilation database, without actually compiling. All build commands are skipped except pre* hooks.")) + compileCommand.Flags().BoolVar(&clean, "clean", false, i18n.Tr("Optional, cleanup the build folder and do not use any cached build.")) + compileCommand.Flags().BoolVarP(&exportBinaries, "export-binaries", "e", settings.GetSketch().GetAlwaysExportBinaries(), + i18n.Tr("If set built binaries will be exported to the sketch folder.")) + compileCommand.Flags().StringVar(&sourceOverrides, "source-override", "", i18n.Tr("Optional. Path to a .json file that contains a set of replacements of the sketch source code.")) compileCommand.Flag("source-override").Hidden = true compileCommand.Flags().BoolVar(&skipLibrariesDiscovery, "skip-libraries-discovery", false, "Skip libraries discovery. This flag is provided only for use in language server and other, very specific, use cases. Do not use for normal compiles") compileCommand.Flag("skip-libraries-discovery").Hidden = true - configuration.Settings.BindPFlag("sketch.always_export_binaries", compileCommand.Flags().Lookup("export-binaries")) + compileCommand.Flags().Int32VarP(&jobs, "jobs", "j", 0, i18n.Tr("Max number of parallel compiles. If set to 0 the number of available CPUs cores will be used.")) - compileCommand.Flags().MarkDeprecated("build-properties", tr("please use --build-property instead.")) + compileCommand.Flags().MarkDeprecated("build-properties", i18n.Tr("please use --build-property instead.")) return compileCommand } -func runCompileCommand(cmd *cobra.Command, args []string) { +func runCompileCommand(cmd *cobra.Command, args []string, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli compile`") + ctx := cmd.Context() if profileArg.Get() != "" { if len(libraries) > 0 { - feedback.Fatal(tr("You cannot use the %s flag while compiling with a profile.", "--libraries"), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("You cannot use the %s flag while compiling with a profile.", "--libraries"), feedback.ErrBadArgument) } if len(library) > 0 { - feedback.Fatal(tr("You cannot use the %s flag while compiling with a profile.", "--library"), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("You cannot use the %s flag while compiling with a profile.", "--library"), feedback.ErrBadArgument) } } @@ -158,26 +163,27 @@ func runCompileCommand(cmd *cobra.Command, args []string) { } sketchPath := arguments.InitSketchPath(path) - - sk, err := sketch.LoadSketch(context.Background(), &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) if err != nil { feedback.FatalError(err, feedback.ErrGeneric) } + sk := resp.GetSketch() + feedback.WarnAboutDeprecatedFiles(sk) var inst *rpc.Instance - var profile *rpc.Profile + var profile *rpc.SketchProfile if profileArg.Get() == "" { - inst, profile = instance.CreateAndInitWithProfile(sk.GetDefaultProfile().GetName(), sketchPath) + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, sk.GetDefaultProfile().GetName(), sketchPath) } else { - inst, profile = instance.CreateAndInitWithProfile(profileArg.Get(), sketchPath) + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, profileArg.Get(), sketchPath) } if fqbnArg.String() == "" { fqbnArg.Set(profile.GetFqbn()) } - fqbn, port := arguments.CalculateFQBNAndPort(&portArgs, &fqbnArg, inst, sk.GetDefaultFqbn(), sk.GetDefaultPort(), sk.GetDefaultProtocol()) + fqbn, port := arguments.CalculateFQBNAndPort(ctx, &portArgs, &fqbnArg, inst, srv, sk.GetDefaultFqbn(), sk.GetDefaultPort(), sk.GetDefaultProtocol(), profile) if keysKeychain != "" || signKey != "" || encryptKey != "" { arguments.CheckFlagsMandatory(cmd, "keys-keychain", "sign-key", "encrypt-key") @@ -187,25 +193,27 @@ func runCompileCommand(cmd *cobra.Command, args []string) { if sourceOverrides != "" { data, err := paths.New(sourceOverrides).ReadFile() if err != nil { - feedback.Fatal(tr("Error opening source code overrides data file: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error opening source code overrides data file: %v", err), feedback.ErrGeneric) } var o struct { Overrides map[string]string `json:"overrides"` } if err := json.Unmarshal(data, &o); err != nil { - feedback.Fatal(tr("Error: invalid source code overrides data file: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error: invalid source code overrides data file: %v", err), feedback.ErrGeneric) } overrides = o.Overrides } showProperties, err := showPropertiesArg.Get() if err != nil { - feedback.Fatal(tr("Error parsing --show-properties flag: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error parsing --show-properties flag: %v", err), feedback.ErrGeneric) } var stdOut, stdErr io.Writer var stdIORes func() *feedback.OutputStreamsResult - if showProperties != arguments.ShowPropertiesDisabled { + if showProperties != arguments.ShowPropertiesDisabled || dumpProfile { + // When dumping profile or showing properties, we buffer the output + // to avoid mixing compilation output with profile/properties output stdOut, stdErr, stdIORes = feedback.NewBufferedStreams() } else { stdOut, stdErr, stdIORes = feedback.OutputStreams() @@ -214,7 +222,7 @@ func runCompileCommand(cmd *cobra.Command, args []string) { var libraryAbs []string for _, libPath := range paths.NewPathList(library...) { if libPath, err = libPath.Abs(); err != nil { - feedback.Fatal(tr("Error converting path to absolute: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error converting path to absolute: %v", err), feedback.ErrGeneric) } libraryAbs = append(libraryAbs, libPath.String()) } @@ -231,6 +239,7 @@ func runCompileCommand(cmd *cobra.Command, args []string) { Warnings: warnings, Verbose: verbose, Quiet: quiet, + ExportBinaries: &exportBinaries, ExportDir: exportDir, Libraries: libraries, OptimizeForDebug: optimizeForDebug, @@ -243,30 +252,41 @@ func runCompileCommand(cmd *cobra.Command, args []string) { EncryptKey: encryptKey, SkipLibrariesDiscovery: skipLibrariesDiscovery, DoNotExpandBuildProperties: showProperties == arguments.ShowPropertiesUnexpanded, + Jobs: jobs, } - compileRes, compileError := compile.Compile(context.Background(), compileRequest, stdOut, stdErr, nil) + server, builderResCB := commands.CompilerServerToStreams(ctx, stdOut, stdErr, nil) + compileError := srv.Compile(compileRequest, server) + builderRes := builderResCB() var uploadRes *rpc.UploadResult if compileError == nil && uploadAfterCompile { - userFieldRes, err := upload.SupportedUserFields(context.Background(), &rpc.SupportedUserFieldsRequest{ + userFieldRes, err := srv.SupportedUserFields(ctx, &rpc.SupportedUserFieldsRequest{ Instance: inst, Fqbn: fqbn, - Protocol: port.Protocol, + Protocol: port.GetProtocol(), }) if err != nil { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), feedback.ErrGeneric) } fields := map[string]string{} - if len(userFieldRes.UserFields) > 0 { - feedback.Print(tr("Uploading to specified board using %s protocol requires the following info:", port.Protocol)) - if f, err := arguments.AskForUserFields(userFieldRes.UserFields); err != nil { + if len(userFieldRes.GetUserFields()) > 0 { + feedback.Print(i18n.Tr("Uploading to specified board using %s protocol requires the following info:", port.GetProtocol())) + if f, err := arguments.AskForUserFields(userFieldRes.GetUserFields()); err != nil { feedback.FatalError(err, feedback.ErrBadArgument) } else { fields = f } } + prog := profile.GetProgrammer() + if prog == "" || programmer.GetProgrammer() != "" { + prog = programmer.String(ctx, inst, srv, fqbn) + } + if prog == "" { + prog = sk.GetDefaultProgrammer() + } + uploadRequest := &rpc.UploadRequest{ Instance: inst, Fqbn: fqbn, @@ -275,107 +295,126 @@ func runCompileCommand(cmd *cobra.Command, args []string) { Verbose: verbose, Verify: verify, ImportDir: buildPath, - Programmer: programmer.String(), + Programmer: prog, UserFields: fields, } - if res, err := upload.Upload(context.Background(), uploadRequest, stdOut, stdErr); err != nil { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + stream, streamRes := commands.UploadToServerStreams(ctx, stdOut, stdErr) + if err := srv.Upload(uploadRequest, stream); err != nil { + errcode := feedback.ErrGeneric + if errors.Is(err, &cmderrors.ProgrammerRequiredForUploadError{}) { + errcode = feedback.ErrMissingProgrammer + } + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), errcode) } else { - uploadRes = res + uploadRes = streamRes() } } + successful := (compileError == nil) profileOut := "" - if dumpProfile && compileError == nil { - // Output profile - - libs := "" - hasVendoredLibs := false - for _, lib := range compileRes.GetUsedLibraries() { - if lib.Location != rpc.LibraryLocation_LIBRARY_LOCATION_USER && lib.Location != rpc.LibraryLocation_LIBRARY_LOCATION_UNMANAGED { - continue + stdIO := stdIORes() + + if dumpProfile { + if successful { + // Output profile + + libs := "" + hasVendoredLibs := false + for _, lib := range builderRes.GetUsedLibraries() { + if lib.GetLocation() != rpc.LibraryLocation_LIBRARY_LOCATION_USER && lib.GetLocation() != rpc.LibraryLocation_LIBRARY_LOCATION_UNMANAGED { + continue + } + if lib.GetVersion() == "" { + hasVendoredLibs = true + continue + } + libs += fmt.Sprintln(" - " + lib.GetName() + " (" + lib.GetVersion() + ")") } - if lib.GetVersion() == "" { - hasVendoredLibs = true - continue + if hasVendoredLibs { + msg := "\n" + msg += i18n.Tr("WARNING: The sketch is compiled using one or more custom libraries.") + "\n" + msg += i18n.Tr("Currently, Build Profiles only support libraries available through Arduino Library Manager.") + feedback.Warning(msg) } - libs += fmt.Sprintln(" - " + lib.GetName() + " (" + lib.GetVersion() + ")") - } - if hasVendoredLibs { - msg := "\n" - msg += tr("WARNING: The sketch is compiled using one or more custom libraries.") + "\n" - msg += tr("Currently, Build Profiles only support libraries available through Arduino Library Manager.") - feedback.Warning(msg) - } - newProfileName := "my_profile_name" - if split := strings.Split(compileRequest.GetFqbn(), ":"); len(split) > 2 { - newProfileName = split[2] - } - profileOut = fmt.Sprintln("profiles:") - profileOut += fmt.Sprintln(" " + newProfileName + ":") - profileOut += fmt.Sprintln(" fqbn: " + compileRequest.GetFqbn()) - profileOut += fmt.Sprintln(" platforms:") - boardPlatform := compileRes.GetBoardPlatform() - profileOut += fmt.Sprintln(" - platform: " + boardPlatform.GetId() + " (" + boardPlatform.GetVersion() + ")") - if url := boardPlatform.GetPackageUrl(); url != "" { - profileOut += fmt.Sprintln(" platform_index_url: " + url) - } - - if buildPlatform := compileRes.GetBuildPlatform(); buildPlatform != nil && - buildPlatform.Id != boardPlatform.Id && - buildPlatform.Version != boardPlatform.Version { - profileOut += fmt.Sprintln(" - platform: " + buildPlatform.GetId() + " (" + buildPlatform.GetVersion() + ")") - if url := buildPlatform.GetPackageUrl(); url != "" { + newProfileName := "my_profile_name" + if split := strings.Split(compileRequest.GetFqbn(), ":"); len(split) > 2 { + newProfileName = split[2] + } + profileOut = fmt.Sprintln("profiles:") + profileOut += fmt.Sprintln(" " + newProfileName + ":") + profileOut += fmt.Sprintln(" fqbn: " + compileRequest.GetFqbn()) + profileOut += fmt.Sprintln(" platforms:") + boardPlatform := builderRes.GetBoardPlatform() + profileOut += fmt.Sprintln(" - platform: " + boardPlatform.GetId() + " (" + boardPlatform.GetVersion() + ")") + if url := boardPlatform.GetPackageUrl(); url != "" { profileOut += fmt.Sprintln(" platform_index_url: " + url) } + + if buildPlatform := builderRes.GetBuildPlatform(); buildPlatform != nil && + buildPlatform.GetId() != boardPlatform.GetId() && + buildPlatform.GetVersion() != boardPlatform.GetVersion() { + profileOut += fmt.Sprintln(" - platform: " + buildPlatform.GetId() + " (" + buildPlatform.GetVersion() + ")") + if url := buildPlatform.GetPackageUrl(); url != "" { + profileOut += fmt.Sprintln(" platform_index_url: " + url) + } + } + if len(libs) > 0 { + profileOut += fmt.Sprintln(" libraries:") + profileOut += fmt.Sprint(libs) + } + profileOut += fmt.Sprintln() + } else { + // An error occurred, output the buffered build errors instead of the profile + if stdOut, stdErr, err := feedback.DirectStreams(); err == nil { + stdOut.Write([]byte(stdIO.Stdout)) + stdErr.Write([]byte(stdIO.Stderr)) + } } - if len(libs) > 0 { - profileOut += fmt.Sprintln(" libraries:") - profileOut += fmt.Sprint(libs) - } - profileOut += fmt.Sprintln() } - stdIO := stdIORes() res := &compileResult{ - CompilerOut: stdIO.Stdout, - CompilerErr: stdIO.Stderr, - BuilderResult: compileRes, - UploadResult: uploadRes, + CompilerOut: stdIO.Stdout, + CompilerErr: stdIO.Stderr, + BuilderResult: result.NewBuilderResult(builderRes), + UploadResult: updatedUploadPortResult{ + UpdatedUploadPort: result.NewPort(uploadRes.GetUpdatedUploadPort()), + }, ProfileOut: profileOut, - Success: compileError == nil, + Success: successful, showPropertiesMode: showProperties, - hideStats: preprocess, + hideStats: preprocess || quiet || (!verbose && successful), } if compileError != nil { - res.Error = tr("Error during build: %v", compileError) + res.Error = i18n.Tr("Error during build: %v", compileError) // Check the error type to give the user better feedback on how // to resolve it - var platformErr *arduino.PlatformNotFoundError + var platformErr *cmderrors.PlatformNotFoundError if errors.As(compileError, &platformErr) { split := strings.Split(platformErr.Platform, ":") if len(split) < 2 { - panic(tr("Platform ID is not correct")) + panic(i18n.Tr("Platform ID is not correct")) } if profileArg.String() == "" { res.Error += fmt.Sprintln() - if platform, err := core.PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: platformErr.Platform, - AllVersions: false, + if platform, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: platformErr.Platform, }); err != nil { res.Error += err.Error() } else if len(platform.GetSearchOutput()) > 0 { suggestion := fmt.Sprintf("`%s core install %s`", version.VersionInfo.Application, platformErr.Platform) - res.Error += tr("Try running %s", suggestion) + res.Error += i18n.Tr("Try running %s", suggestion) } else { - res.Error += tr("Platform %s is not found in any known index\nMaybe you need to add a 3rd party URL?", platformErr.Platform) + res.Error += i18n.Tr("Platform %s is not found in any known index\nMaybe you need to add a 3rd party URL?", platformErr.Platform) } } } @@ -384,15 +423,18 @@ func runCompileCommand(cmd *cobra.Command, args []string) { feedback.PrintResult(res) } -type compileResult struct { - CompilerOut string `json:"compiler_out"` - CompilerErr string `json:"compiler_err"` - BuilderResult *rpc.CompileResponse `json:"builder_result"` - UploadResult *rpc.UploadResult `json:"upload_result"` - Success bool `json:"success"` - ProfileOut string `json:"profile_out,omitempty"` - Error string `json:"error,omitempty"` +type updatedUploadPortResult struct { + UpdatedUploadPort *result.Port `json:"updated_upload_port,omitempty"` +} +type compileResult struct { + CompilerOut string `json:"compiler_out"` + CompilerErr string `json:"compiler_err"` + BuilderResult *result.BuilderResult `json:"builder_result"` + UploadResult updatedUploadPortResult `json:"upload_result"` + Success bool `json:"success"` + ProfileOut string `json:"profile_out,omitempty"` + Error string `json:"error,omitempty"` showPropertiesMode arguments.ShowPropertiesMode hideStats bool } @@ -402,8 +444,12 @@ func (r *compileResult) Data() interface{} { } func (r *compileResult) String() string { - if r.showPropertiesMode != arguments.ShowPropertiesDisabled { - return strings.Join(r.BuilderResult.GetBuildProperties(), fmt.Sprintln()) + if r.BuilderResult != nil && r.showPropertiesMode != arguments.ShowPropertiesDisabled { + return strings.Join(r.BuilderResult.BuildProperties, fmt.Sprintln()) + } + + if r.Success && r.ProfileOut != "" { + return r.ProfileOut } if r.hideStats { @@ -419,44 +465,41 @@ func (r *compileResult) String() string { if r.CompilerOut != "" || r.CompilerErr != "" { res += fmt.Sprintln() } - if len(build.GetUsedLibraries()) > 0 { + if build != nil && len(build.UsedLibraries) > 0 { libraries := table.New() libraries.SetHeader( - table.NewCell(tr("Used library"), titleColor), - table.NewCell(tr("Version"), titleColor), - table.NewCell(tr("Path"), pathColor)) - for _, l := range build.GetUsedLibraries() { + table.NewCell(i18n.Tr("Used library"), titleColor), + table.NewCell(i18n.Tr("Version"), titleColor), + table.NewCell(i18n.Tr("Path"), pathColor)) + for _, l := range build.UsedLibraries { libraries.AddRow( - table.NewCell(l.GetName(), nameColor), - l.GetVersion(), - table.NewCell(l.GetInstallDir(), pathColor)) + table.NewCell(l.Name, nameColor), + l.Version, + table.NewCell(l.InstallDir, pathColor)) } res += fmt.Sprintln(libraries.Render()) } - - if boardPlatform := build.GetBoardPlatform(); boardPlatform != nil { + if build != nil && build.BoardPlatform != nil { + boardPlatform := build.BoardPlatform platforms := table.New() platforms.SetHeader( - table.NewCell(tr("Used platform"), titleColor), - table.NewCell(tr("Version"), titleColor), - table.NewCell(tr("Path"), pathColor)) + table.NewCell(i18n.Tr("Used platform"), titleColor), + table.NewCell(i18n.Tr("Version"), titleColor), + table.NewCell(i18n.Tr("Path"), pathColor)) platforms.AddRow( - table.NewCell(boardPlatform.GetId(), nameColor), - boardPlatform.GetVersion(), - table.NewCell(boardPlatform.GetInstallDir(), pathColor)) - if buildPlatform := build.GetBuildPlatform(); buildPlatform != nil && + table.NewCell(boardPlatform.Id, nameColor), + boardPlatform.Version, + table.NewCell(boardPlatform.InstallDir, pathColor)) + if buildPlatform := build.BuildPlatform; buildPlatform != nil && buildPlatform.Id != boardPlatform.Id && buildPlatform.Version != boardPlatform.Version { platforms.AddRow( - table.NewCell(buildPlatform.GetId(), nameColor), - buildPlatform.GetVersion(), - table.NewCell(buildPlatform.GetInstallDir(), pathColor)) + table.NewCell(buildPlatform.Id, nameColor), + buildPlatform.Version, + table.NewCell(buildPlatform.InstallDir, pathColor)) } res += fmt.Sprintln(platforms.Render()) } - if r.ProfileOut != "" { - res += fmt.Sprintln(r.ProfileOut) - } return strings.TrimRight(res, fmt.Sprintln()) } diff --git a/internal/cli/completion/completion.go b/internal/cli/completion/completion.go index 0dd05f8e315..da3e19c397b 100644 --- a/internal/cli/completion/completion.go +++ b/internal/cli/completion/completion.go @@ -18,8 +18,8 @@ package completion import ( "os" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -35,13 +35,13 @@ func NewCommand() *cobra.Command { Use: "completion [bash|zsh|fish|powershell] [--no-descriptions]", ValidArgs: []string{"bash", "zsh", "fish", "powershell"}, Args: cobra.ExactArgs(1), - Short: tr("Generates completion scripts"), - Long: tr("Generates completion scripts for various shells"), + Short: i18n.Tr("Generates completion scripts"), + Long: i18n.Tr("Generates completion scripts for various shells"), Example: " " + os.Args[0] + " completion bash > completion.sh\n" + " " + "source completion.sh", Run: runCompletionCommand, } - completionCommand.Flags().BoolVar(&completionNoDesc, "no-descriptions", false, tr("Disable completion description for shells that support it")) + completionCommand.Flags().BoolVar(&completionNoDesc, "no-descriptions", false, i18n.Tr("Disable completion description for shells that support it")) return completionCommand } @@ -53,7 +53,7 @@ func runCompletionCommand(cmd *cobra.Command, args []string) { feedback.Fatal(err.Error(), feedback.ErrGeneric) } if completionNoDesc && (args[0] == "powershell") { - feedback.Fatal(tr("Error: command description is not supported by %v", args[0]), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error: command description is not supported by %v", args[0]), feedback.ErrGeneric) } switch args[0] { case "bash": diff --git a/internal/cli/config/add.go b/internal/cli/config/add.go index d375a0c578e..d4950fd691b 100644 --- a/internal/cli/config/add.go +++ b/internal/cli/config/add.go @@ -16,90 +16,66 @@ package config import ( + "context" + "encoding/json" "os" - "reflect" + "slices" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -// // TODO: When update to go 1.18 or later, convert to generic -// // to allow uniquify() on any slice that supports -// // `comparable` -// // See https://gosamples.dev/generics-remove-duplicates-slice/ -// func uniquify[T comparable](s []T) []T { -// // use a map, which enforces unique keys -// inResult := make(map[T]bool) -// var result []T -// // loop through input slice **in order**, -// // to ensure output retains that order -// // (except that it removes duplicates) -// for i := 0; i < len(s); i++ { -// // attempt to use the element as a key -// if _, ok := inResult[s[i]]; !ok { -// // if key didn't exist in map, -// // add to map and append to result -// inResult[s[i]] = true -// result = append(result, s[i]) -// } -// } -// return result -// } - -func uniquifyStringSlice(s []string) []string { - // use a map, which enforces unique keys - inResult := make(map[string]bool) - var result []string - // loop through input slice **in order**, - // to ensure output retains that order - // (except that it removes duplicates) - for i := 0; i < len(s); i++ { - // attempt to use the element as a key - if _, ok := inResult[s[i]]; !ok { - // if key didn't exist in map, - // add to map and append to result - inResult[s[i]] = true - result = append(result, s[i]) - } - } - return result -} - -func initAddCommand() *cobra.Command { +func initAddCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { addCommand := &cobra.Command{ Use: "add", - Short: tr("Adds one or more values to a setting."), - Long: tr("Adds one or more values to a setting."), + Short: i18n.Tr("Adds one or more values to a setting."), + Long: i18n.Tr("Adds one or more values to a setting."), Example: "" + " " + os.Args[0] + " config add board_manager.additional_urls https://example.com/package_example_index.json\n" + " " + os.Args[0] + " config add board_manager.additional_urls https://example.com/package_example_index.json https://another-url.com/package_another_index.json\n", Args: cobra.MinimumNArgs(2), - Run: runAddCommand, + Run: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() + runAddCommand(ctx, srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetConfigurationKeys(), cobra.ShellCompDirectiveDefault + ctx := cmd.Context() + return getAllArraySettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault }, } return addCommand } -func runAddCommand(cmd *cobra.Command, args []string) { +func runAddCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli config add`") key := args[0] - kind := validateKey(key) - if kind != reflect.Slice { - msg := tr("The key '%[1]v' is not a list of items, can't add to it.\nMaybe use '%[2]s'?", key, "config set") + if !slices.Contains(getAllArraySettingsKeys(ctx, srv), key) { + msg := i18n.Tr("The key '%[1]v' is not a list of items, can't add to it.\nMaybe use '%[2]s'?", key, "config set") feedback.Fatal(msg, feedback.ErrGeneric) } - v := configuration.Settings.GetStringSlice(key) - v = append(v, args[1:]...) - v = uniquifyStringSlice(v) - configuration.Settings.Set(key, v) + var currentValues []string + if resp, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: key}); err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } else if err := json.Unmarshal([]byte(resp.GetEncodedValue()), ¤tValues); err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } - if err := configuration.Settings.WriteConfig(); err != nil { - feedback.Fatal(tr("Can't write config file: %v", err), feedback.ErrGeneric) + for _, arg := range args[1:] { + if !slices.Contains(currentValues, arg) { + currentValues = append(currentValues, arg) + } } + + if newValuesJSON, err := json.Marshal(currentValues); err != nil { + feedback.Fatal(i18n.Tr("Cannot remove the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } else if _, err := srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{Key: key, EncodedValue: string(newValuesJSON)}); err != nil { + feedback.Fatal(i18n.Tr("Cannot remove the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } + + saveConfiguration(ctx, srv) } diff --git a/internal/cli/config/config.go b/internal/cli/config/config.go index ee0e8922852..dd42eb71213 100644 --- a/internal/cli/config/config.go +++ b/internal/cli/config/config.go @@ -16,44 +16,78 @@ package config import ( + "context" "os" - "reflect" + "strings" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" "github.com/spf13/cobra" + "go.bug.st/f" ) -var tr = i18n.Tr - // NewCommand created a new `config` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer, settings *rpc.Configuration) *cobra.Command { configCommand := &cobra.Command{ Use: "config", - Short: tr("Arduino configuration commands."), + Short: i18n.Tr("Arduino configuration commands."), Example: " " + os.Args[0] + " config init", } - configCommand.AddCommand(initAddCommand()) - configCommand.AddCommand(initDeleteCommand()) - configCommand.AddCommand(initDumpCommand()) + configCommand.AddCommand(initAddCommand(srv)) + configCommand.AddCommand(initDeleteCommand(srv)) + configCommand.AddCommand(initDumpCommand(srv)) + configCommand.AddCommand(initGetCommand(srv)) configCommand.AddCommand(initInitCommand()) - configCommand.AddCommand(initRemoveCommand()) - configCommand.AddCommand(initSetCommand()) + configCommand.AddCommand(initRemoveCommand(srv)) + configCommand.AddCommand(initSetCommand(srv)) return configCommand } -// GetConfigurationKeys is an helper function useful to autocomplete. -// It returns a list of configuration keys which can be changed -func GetConfigurationKeys() []string { - var res []string - keys := configuration.Settings.AllKeys() - for _, key := range keys { - kind, _ := typeOf(key) - if kind == reflect.Slice { - res = append(res, key) - } +func getAllSettingsKeys(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + res, _ := srv.SettingsEnumerate(ctx, &rpc.SettingsEnumerateRequest{}) + allKeys := f.Map(res.GetEntries(), (*rpc.SettingsEnumerateResponse_Entry).GetKey) + return allKeys +} + +func getAllArraySettingsKeys(ctx context.Context, srv rpc.ArduinoCoreServiceServer) []string { + res, _ := srv.SettingsEnumerate(ctx, &rpc.SettingsEnumerateRequest{}) + arrayEntries := f.Filter(res.GetEntries(), func(e *rpc.SettingsEnumerateResponse_Entry) bool { + return strings.HasPrefix(e.GetType(), "[]") + }) + arrayKeys := f.Map(arrayEntries, (*rpc.SettingsEnumerateResponse_Entry).GetKey) + return arrayKeys +} + +type ctxValue string + +// GetConfigFile returns the configuration file path from the context +func GetConfigFile(ctx context.Context) string { + res := ctx.Value(ctxValue("config_file")) + if res == nil { + return "" + } + return res.(string) +} + +// SetConfigFile sets the configuration file path in the context +func SetConfigFile(ctx context.Context, configFile string) context.Context { + return context.WithValue(ctx, ctxValue("config_file"), configFile) +} + +func saveConfiguration(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { + var outConfig []byte + if res, err := srv.ConfigurationSave(ctx, &rpc.ConfigurationSaveRequest{SettingsFormat: "yaml"}); err != nil { + feedback.Fatal(i18n.Tr("Error writing to file: %v", err), feedback.ErrGeneric) + } else { + outConfig = []byte(res.GetEncodedSettings()) + } + + configFile := GetConfigFile(ctx) + if err := paths.New(configFile).WriteFile(outConfig); err != nil { + feedback.Fatal(i18n.Tr("Error writing to file: %v", err), feedback.ErrGeneric) } - return res } diff --git a/internal/cli/config/delete.go b/internal/cli/config/delete.go index 794a513a858..e0ff13a1455 100644 --- a/internal/cli/config/delete.go +++ b/internal/cli/config/delete.go @@ -16,44 +16,44 @@ package config import ( + "context" "os" - "github.com/arduino/arduino-cli/commands/daemon" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDeleteCommand() *cobra.Command { +func initDeleteCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { deleteCommand := &cobra.Command{ Use: "delete", - Short: tr("Deletes a settings key and all its sub keys."), - Long: tr("Deletes a settings key and all its sub keys."), + Short: i18n.Tr("Deletes a settings key and all its sub keys."), + Long: i18n.Tr("Deletes a settings key and all its sub keys."), Example: "" + " " + os.Args[0] + " config delete board_manager\n" + " " + os.Args[0] + " config delete board_manager.additional_urls", Args: cobra.ExactArgs(1), - Run: runDeleteCommand, + Run: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() + runDeleteCommand(ctx, srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return configuration.Settings.AllKeys(), cobra.ShellCompDirectiveDefault + ctx := cmd.Context() + return getAllSettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault }, } return deleteCommand } -func runDeleteCommand(cmd *cobra.Command, args []string) { +func runDeleteCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli config delete`") - toDelete := args[0] - svc := daemon.SettingsService{} - _, err := svc.Delete(cmd.Context(), &settings.DeleteRequest{Key: toDelete}) - if err != nil { - feedback.Fatal(tr("Cannot delete the key %[1]s: %[2]v", toDelete, err), feedback.ErrGeneric) - } - _, err = svc.Write(cmd.Context(), &settings.WriteRequest{FilePath: configuration.Settings.ConfigFileUsed()}) - if err != nil { - feedback.Fatal(tr("Cannot write the file %[1]s: %[2]v", configuration.Settings.ConfigFileUsed(), err), feedback.ErrGeneric) + key := args[0] + if _, err := srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{Key: key, EncodedValue: ""}); err != nil { + feedback.Fatal(i18n.Tr("Cannot delete the key %[1]s: %[2]v", key, err), feedback.ErrGeneric) } + + saveConfiguration(ctx, srv) } diff --git a/internal/cli/config/dump.go b/internal/cli/config/dump.go index 9e36a6f577a..6b78e83e83d 100644 --- a/internal/cli/config/dump.go +++ b/internal/cli/config/dump.go @@ -18,45 +18,64 @@ package config import ( "os" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "gopkg.in/yaml.v3" ) -func initDumpCommand() *cobra.Command { +func initDumpCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var dumpCommand = &cobra.Command{ Use: "dump", - Short: tr("Prints the current configuration"), - Long: tr("Prints the current configuration."), + Short: i18n.Tr("Prints the current configuration"), + Long: i18n.Tr("Prints the current configuration."), Example: " " + os.Args[0] + " config dump", Args: cobra.NoArgs, - Run: runDumpCommand, + Run: func(cmd *cobra.Command, args []string) { + logrus.Info("Executing `arduino-cli config dump`") + res := &rawResult{} + switch feedback.GetFormat() { + case feedback.JSON, feedback.MinifiedJSON: + resp, err := srv.ConfigurationSave(cmd.Context(), &rpc.ConfigurationSaveRequest{SettingsFormat: "json"}) + if err != nil { + logrus.Fatalf("Error creating configuration: %v", err) + } + res.rawJSON = []byte(resp.GetEncodedSettings()) + case feedback.Text: + resp, err := srv.ConfigurationSave(cmd.Context(), &rpc.ConfigurationSaveRequest{SettingsFormat: "yaml"}) + if err != nil { + logrus.Fatalf("Error creating configuration: %v", err) + } + res.rawYAML = []byte(resp.GetEncodedSettings()) + default: + logrus.Fatalf("Unsupported format: %v", feedback.GetFormat()) + } + feedback.PrintResult(dumpResult{Config: res}) + }, } return dumpCommand } -func runDumpCommand(cmd *cobra.Command, args []string) { - logrus.Info("Executing `arduino-cli config dump`") - feedback.PrintResult(dumpResult{configuration.Settings.AllSettings()}) +type rawResult struct { + rawJSON []byte + rawYAML []byte +} + +func (r *rawResult) MarshalJSON() ([]byte, error) { + // it is already encoded in rawJSON field + return r.rawJSON, nil } -// output from this command requires special formatting, let's create a dedicated -// feedback.Result implementation type dumpResult struct { - data map[string]interface{} + Config *rawResult `json:"config"` } func (dr dumpResult) Data() interface{} { - return dr.data + return dr } func (dr dumpResult) String() string { - bs, err := yaml.Marshal(dr.data) - if err != nil { - // Should never happen - panic(tr("unable to marshal config to YAML: %v", err)) - } - return string(bs) + // In case of text output do not wrap the output in outer JSON or YAML structure + return string(dr.Config.rawYAML) } diff --git a/internal/cli/config/get.go b/internal/cli/config/get.go new file mode 100644 index 00000000000..8ac4451ee9f --- /dev/null +++ b/internal/cli/config/get.go @@ -0,0 +1,88 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package config + +import ( + "context" + "encoding/json" + "fmt" + "os" + + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + "gopkg.in/yaml.v3" +) + +func initGetCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + getCommand := &cobra.Command{ + Use: "get", + Short: i18n.Tr("Gets a settings key value."), + Long: i18n.Tr("Gets a settings key value."), + Example: "" + + " " + os.Args[0] + " config get logging\n" + + " " + os.Args[0] + " config get daemon.port\n" + + " " + os.Args[0] + " config get board_manager.additional_urls", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + runGetCommand(cmd.Context(), srv, args) + }, + ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + ctx := cmd.Context() + return getAllSettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault + }, + } + return getCommand +} + +func runGetCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { + logrus.Info("Executing `arduino-cli config get`") + + for _, toGet := range args { + resp, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: toGet}) + if err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", toGet, err), feedback.ErrGeneric) + } + var result getResult + if err := json.Unmarshal([]byte(resp.GetEncodedValue()), &result.resp); err != nil { + // Should never happen... + panic(fmt.Sprintf("Cannot parse JSON for key %[1]s: %[2]v", toGet, err)) + } + feedback.PrintResult(result) + } +} + +// output from this command may require special formatting. +// create a dedicated feedback.Result implementation to safely handle +// any changes to the configuration.Settings struct. +type getResult struct { + resp interface{} +} + +func (gr getResult) Data() interface{} { + return gr.resp +} + +func (gr getResult) String() string { + gs, err := yaml.Marshal(gr.resp) + if err != nil { + // Should never happen + panic(i18n.Tr("unable to marshal config to YAML: %v", err)) + } + return string(gs) +} diff --git a/internal/cli/config/init.go b/internal/cli/config/init.go index 471905c54cc..85491492d21 100644 --- a/internal/cli/config/init.go +++ b/internal/cli/config/init.go @@ -16,16 +16,19 @@ package config import ( + "context" + "encoding/json" "os" "strings" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "github.com/spf13/viper" ) var ( @@ -39,10 +42,10 @@ const defaultFileName = "arduino-cli.yaml" func initInitCommand() *cobra.Command { initCommand := &cobra.Command{ Use: "init", - Short: tr("Writes current configuration to a configuration file."), - Long: tr("Creates or updates the configuration file in the data directory or custom directory with the current configuration settings."), + Short: i18n.Tr("Writes current configuration to a configuration file."), + Long: i18n.Tr("Creates or updates the configuration file in the data directory or custom directory with the current configuration settings."), Example: "" + - " # " + tr("Writes current configuration to the configuration file in the data directory.") + "\n" + + " # " + i18n.Tr("Writes current configuration to the configuration file in the data directory.") + "\n" + " " + os.Args[0] + " config init\n" + " " + os.Args[0] + " config init --dest-dir /home/user/MyDirectory\n" + " " + os.Args[0] + " config init --dest-file /home/user/MyDirectory/my_settings.yaml", @@ -50,66 +53,130 @@ func initInitCommand() *cobra.Command { PreRun: func(cmd *cobra.Command, args []string) { arguments.CheckFlagsConflicts(cmd, "dest-file", "dest-dir") }, - Run: runInitCommand, + Run: func(cmd *cobra.Command, args []string) { + runInitCommand(cmd.Context(), cmd) + }, } - initCommand.Flags().StringVar(&destDir, "dest-dir", "", tr("Sets where to save the configuration file.")) - initCommand.Flags().StringVar(&destFile, "dest-file", "", tr("Sets where to save the configuration file.")) - initCommand.Flags().BoolVar(&overwrite, "overwrite", false, tr("Overwrite existing config file.")) + initCommand.Flags().StringVar(&destDir, "dest-dir", "", i18n.Tr("Sets where to save the configuration file.")) + initCommand.Flags().StringVar(&destFile, "dest-file", "", i18n.Tr("Sets where to save the configuration file.")) + initCommand.Flags().BoolVar(&overwrite, "overwrite", false, i18n.Tr("Overwrite existing config file.")) return initCommand } -func runInitCommand(cmd *cobra.Command, args []string) { +func runInitCommand(ctx context.Context, cmd *cobra.Command) { logrus.Info("Executing `arduino-cli config init`") var configFileAbsPath *paths.Path - var absPath *paths.Path + var configFileDir *paths.Path var err error switch { case destFile != "": configFileAbsPath, err = paths.New(destFile).Abs() if err != nil { - feedback.Fatal(tr("Cannot find absolute path: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Cannot find absolute path: %v", err), feedback.ErrGeneric) } + configFileDir = configFileAbsPath.Parent() - absPath = configFileAbsPath.Parent() - case destDir == "": - destDir = configuration.Settings.GetString("directories.Data") - fallthrough - default: - absPath, err = paths.New(destDir).Abs() + case destDir != "": + configFileDir, err = paths.New(destDir).Abs() if err != nil { - feedback.Fatal(tr("Cannot find absolute path: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Cannot find absolute path: %v", err), feedback.ErrGeneric) } - configFileAbsPath = absPath.Join(defaultFileName) + configFileAbsPath = configFileDir.Join(defaultFileName) + + default: + configFileAbsPath = paths.New(GetConfigFile(ctx)) + configFileDir = configFileAbsPath.Parent() } if !overwrite && configFileAbsPath.Exist() { - feedback.Fatal(tr("Config file already exists, use --overwrite to discard the existing one."), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Config file already exists, use --overwrite to discard the existing one."), feedback.ErrGeneric) + } + + logrus.Infof("Writing config file to: %s", configFileDir) + + if err := configFileDir.MkdirAll(); err != nil { + feedback.Fatal(i18n.Tr("Cannot create config file directory: %v", err), feedback.ErrGeneric) } - logrus.Infof("Writing config file to: %s", absPath) + tmpSrv := commands.NewArduinoCoreServer() - if err := absPath.MkdirAll(); err != nil { - feedback.Fatal(tr("Cannot create config file directory: %v", err), feedback.ErrGeneric) + if _, err := tmpSrv.ConfigurationOpen(ctx, &rpc.ConfigurationOpenRequest{SettingsFormat: "yaml", EncodedSettings: ""}); err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) } - newSettings := viper.New() - configuration.SetDefaults(newSettings) - configuration.BindFlags(cmd, newSettings) + // Ensure to always output an empty array for additional urls + if _, err := tmpSrv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{ + Key: "board_manager.additional_urls", EncodedValue: "[]", + }); err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) + } + + ApplyGlobalFlagsToConfiguration(ctx, cmd, tmpSrv) + + resp, err := tmpSrv.ConfigurationSave(ctx, &rpc.ConfigurationSaveRequest{SettingsFormat: "yaml"}) + if err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) + } + + if err := configFileAbsPath.WriteFile([]byte(resp.GetEncodedSettings())); err != nil { + feedback.Fatal(i18n.Tr("Cannot create config file: %v", err), feedback.ErrGeneric) + } - for _, url := range newSettings.GetStringSlice("board_manager.additional_urls") { - if strings.Contains(url, ",") { - feedback.Fatal(tr("Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n%s", url), - feedback.ErrGeneric) + feedback.PrintResult(initResult{ConfigFileAbsPath: configFileAbsPath}) +} + +// ApplyGlobalFlagsToConfiguration overrides server settings with the flags from the command line +func ApplyGlobalFlagsToConfiguration(ctx context.Context, cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer) { + set := func(k string, v any) { + if jsonValue, err := json.Marshal(v); err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) + } else if _, err := srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{ + Key: k, EncodedValue: string(jsonValue), + }); err != nil { + feedback.Fatal(i18n.Tr("Error creating configuration: %v", err), feedback.ErrGeneric) } + } - if err := newSettings.WriteConfigAs(configFileAbsPath.String()); err != nil { - feedback.Fatal(tr("Cannot create config file: %v", err), feedback.ErrGeneric) + if f := cmd.Flags().Lookup("log-level"); f.Changed { + logLevel, _ := cmd.Flags().GetString("log-level") + set("logging.level", logLevel) + } + if f := cmd.Flags().Lookup("log-file"); f.Changed { + logFile, _ := cmd.Flags().GetString("log-file") + set("logging.file", logFile) + } + if f := cmd.Flags().Lookup("no-color"); f.Changed { + noColor, _ := cmd.Flags().GetBool("no-color") + set("output.no_color", noColor) + } + if f := cmd.Flags().Lookup("additional-urls"); f.Changed { + urls, _ := cmd.Flags().GetStringSlice("additional-urls") + for _, url := range urls { + if strings.Contains(url, ",") { + feedback.Fatal( + i18n.Tr("Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n%s", url), + feedback.ErrBadArgument) + } + } + set("board_manager.additional_urls", urls) } +} + +// output from this command requires special formatting, let's create a dedicated +// feedback.Result implementation +type initResult struct { + ConfigFileAbsPath *paths.Path `json:"config_path"` +} + +func (dr initResult) Data() interface{} { + return dr +} - msg := tr("Config file written to: %s", configFileAbsPath.String()) +func (dr initResult) String() string { + msg := i18n.Tr("Config file written to: %s", dr.ConfigFileAbsPath.String()) logrus.Info(msg) - feedback.Print(msg) + return msg } diff --git a/internal/cli/config/remove.go b/internal/cli/config/remove.go index 1be518448e4..45592e5a058 100644 --- a/internal/cli/config/remove.go +++ b/internal/cli/config/remove.go @@ -16,56 +16,64 @@ package config import ( + "context" + "encoding/json" "os" - "reflect" + "slices" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initRemoveCommand() *cobra.Command { +func initRemoveCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { removeCommand := &cobra.Command{ Use: "remove", - Short: tr("Removes one or more values from a setting."), - Long: tr("Removes one or more values from a setting."), + Short: i18n.Tr("Removes one or more values from a setting."), + Long: i18n.Tr("Removes one or more values from a setting."), Example: "" + " " + os.Args[0] + " config remove board_manager.additional_urls https://example.com/package_example_index.json\n" + " " + os.Args[0] + " config remove board_manager.additional_urls https://example.com/package_example_index.json https://another-url.com/package_another_index.json\n", Args: cobra.MinimumNArgs(2), - Run: runRemoveCommand, + Run: func(cmd *cobra.Command, args []string) { + ctx := cmd.Context() + runRemoveCommand(ctx, srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return GetConfigurationKeys(), cobra.ShellCompDirectiveDefault + ctx := cmd.Context() + return getAllArraySettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault }, } return removeCommand } -func runRemoveCommand(cmd *cobra.Command, args []string) { +func runRemoveCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli config remove`") key := args[0] - kind := validateKey(key) - if kind != reflect.Slice { - msg := tr("The key '%[1]v' is not a list of items, can't remove from it.\nMaybe use '%[2]s'?", key, "config delete") + if !slices.Contains(getAllArraySettingsKeys(ctx, srv), key) { + msg := i18n.Tr("The key '%[1]v' is not a list of items, can't remove from it.\nMaybe use '%[2]s'?", key, "config delete") feedback.Fatal(msg, feedback.ErrGeneric) } - mappedValues := map[string]bool{} - for _, v := range configuration.Settings.GetStringSlice(key) { - mappedValues[v] = true + var currentValues []string + if resp, err := srv.SettingsGetValue(ctx, &rpc.SettingsGetValueRequest{Key: key}); err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } else if err := json.Unmarshal([]byte(resp.GetEncodedValue()), ¤tValues); err != nil { + feedback.Fatal(i18n.Tr("Cannot get the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) } + for _, arg := range args[1:] { - delete(mappedValues, arg) + currentValues = slices.DeleteFunc(currentValues, func(in string) bool { return in == arg }) } - values := []string{} - for k := range mappedValues { - values = append(values, k) - } - configuration.Settings.Set(key, values) - if err := configuration.Settings.WriteConfig(); err != nil { - feedback.Fatal(tr("Can't write config file: %v", err), feedback.ErrGeneric) + if newValuesJSON, err := json.Marshal(currentValues); err != nil { + feedback.Fatal(i18n.Tr("Cannot remove the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) + } else if _, err := srv.SettingsSetValue(ctx, &rpc.SettingsSetValueRequest{Key: key, EncodedValue: string(newValuesJSON)}); err != nil { + feedback.Fatal(i18n.Tr("Cannot remove the configuration key %[1]s: %[2]v", key, err), feedback.ErrGeneric) } + + saveConfiguration(ctx, srv) } diff --git a/internal/cli/config/set.go b/internal/cli/config/set.go index f620fa183f5..34adb362811 100644 --- a/internal/cli/config/set.go +++ b/internal/cli/config/set.go @@ -16,61 +16,63 @@ package config import ( + "context" + "encoding/json" "os" - "reflect" - "strconv" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" + "go.bug.st/f" ) -func initSetCommand() *cobra.Command { +func initSetCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { setCommand := &cobra.Command{ Use: "set", - Short: tr("Sets a setting value."), - Long: tr("Sets a setting value."), + Short: i18n.Tr("Sets a setting value."), + Long: i18n.Tr("Sets a setting value."), Example: "" + " " + os.Args[0] + " config set logging.level trace\n" + " " + os.Args[0] + " config set logging.file my-log.txt\n" + " " + os.Args[0] + " config set sketch.always_export_binaries true\n" + " " + os.Args[0] + " config set board_manager.additional_urls https://example.com/package_example_index.json https://another-url.com/package_another_index.json", Args: cobra.MinimumNArgs(2), - Run: runSetCommand, + Run: func(cmd *cobra.Command, args []string) { + runSetCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return configuration.Settings.AllKeys(), cobra.ShellCompDirectiveDefault + ctx := cmd.Context() + return getAllSettingsKeys(ctx, srv), cobra.ShellCompDirectiveDefault }, } return setCommand } -func runSetCommand(cmd *cobra.Command, args []string) { +func runSetCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli config set`") - key := args[0] - kind := validateKey(key) - if kind != reflect.Slice && len(args) > 2 { - feedback.Fatal(tr("Can't set multiple values in key %v", key), feedback.ErrGeneric) + req := &rpc.SettingsSetValueRequest{ + Key: args[0], } - - var value interface{} - switch kind { - case reflect.Slice: - value = uniquifyStringSlice(args[1:]) - case reflect.String: - value = args[1] - case reflect.Bool: - var err error - value, err = strconv.ParseBool(args[1]) + if len(args) == 2 { + // Single value + req.EncodedValue = args[1] + req.ValueFormat = "cli" + } else { + // Uniq Array + jsonValues, err := json.Marshal(f.Uniq(args[1:])) if err != nil { - feedback.Fatal(tr("error parsing value: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error setting value: %v", err), feedback.ErrGeneric) } + req.EncodedValue = string(jsonValues) + req.ValueFormat = "json" } - configuration.Settings.Set(key, value) - - if err := configuration.Settings.WriteConfig(); err != nil { - feedback.Fatal(tr("Writing config file: %v", err), feedback.ErrGeneric) + if _, err := srv.SettingsSetValue(ctx, req); err != nil { + feedback.Fatal(i18n.Tr("Error setting value: %v", err), feedback.ErrGeneric) } + + saveConfiguration(ctx, srv) } diff --git a/internal/cli/config/validate.go b/internal/cli/config/validate.go deleted file mode 100644 index f494bfaac0b..00000000000 --- a/internal/cli/config/validate.go +++ /dev/null @@ -1,61 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package config - -import ( - "fmt" - "reflect" - - "github.com/arduino/arduino-cli/internal/cli/feedback" -) - -var validMap = map[string]reflect.Kind{ - "board_manager.additional_urls": reflect.Slice, - "daemon.port": reflect.String, - "directories.data": reflect.String, - "directories.downloads": reflect.String, - "directories.user": reflect.String, - "directories.builtin.tools": reflect.String, - "directories.builtin.libraries": reflect.String, - "library.enable_unsafe_install": reflect.Bool, - "locale": reflect.String, - "logging.file": reflect.String, - "logging.format": reflect.String, - "logging.level": reflect.String, - "sketch.always_export_binaries": reflect.Bool, - "metrics.addr": reflect.String, - "metrics.enabled": reflect.Bool, - "network.proxy": reflect.String, - "network.user_agent_ext": reflect.String, - "output.no_color": reflect.Bool, - "updater.enable_notification": reflect.Bool, -} - -func typeOf(key string) (reflect.Kind, error) { - t, ok := validMap[key] - if !ok { - return reflect.Invalid, fmt.Errorf(tr("Settings key doesn't exist")) - } - return t, nil -} - -func validateKey(key string) reflect.Kind { - kind, err := typeOf(key) - if err != nil { - feedback.FatalError(err, feedback.ErrGeneric) - } - return kind -} diff --git a/configuration/term.go b/internal/cli/configuration/board_manager.go similarity index 56% rename from configuration/term.go rename to internal/cli/configuration/board_manager.go index 5d83f50e7fa..53f985eef90 100644 --- a/configuration/term.go +++ b/internal/cli/configuration/board_manager.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -15,14 +15,16 @@ package configuration -import ( - "os" +func (settings *Settings) BoardManagerAdditionalUrls() []string { + if urls, ok, _ := settings.GetStringSliceOk("board_manager.additional_urls"); ok { + return urls + } + return settings.Defaults.GetStringSlice("board_manager.additional_urls") +} - "github.com/mattn/go-isatty" -) - -// IsInteractive is set to true if the CLI is interactive (it can receive inputs from terminal/console) -var IsInteractive = isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd()) - -// HasConsole is set to true if the CLI outputs to a terminal/console -var HasConsole = isatty.IsTerminal(os.Stdout.Fd()) || isatty.IsCygwinTerminal(os.Stdout.Fd()) +func (settings *Settings) BoardManagerEnableUnsafeInstall() bool { + if v, ok, _ := settings.GetBoolOk("board_manager.enable_unsafe_install"); ok { + return v + } + return settings.Defaults.GetBool("board_manager.enable_unsafe_install") +} diff --git a/internal/cli/configuration/build_cache.go b/internal/cli/configuration/build_cache.go new file mode 100644 index 00000000000..f2a8014e459 --- /dev/null +++ b/internal/cli/configuration/build_cache.go @@ -0,0 +1,55 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "time" + + "github.com/arduino/go-paths-helper" +) + +// GetCompilationsBeforeBuildCachePurge returns the number of compilations before the build cache is purged. +func (s *Settings) GetCompilationsBeforeBuildCachePurge() uint { + if res, ok, _ := s.GetUintOk("build_cache.compilations_before_purge"); ok { + return res + } + return s.Defaults.GetUint("build_cache.compilations_before_purge") +} + +// GetBuildCacheTTL returns the time-to-live of the build cache (i.e. the minimum age to wait before purging the cache). +func (s *Settings) GetBuildCacheTTL() time.Duration { + if res, ok, _ := s.GetDurationOk("build_cache.ttl"); ok { + return res + } + return s.Defaults.GetDuration("build_cache.ttl") +} + +// GetBuildCachePath returns the path to the build cache. +func (s *Settings) GetBuildCachePath() *paths.Path { + if p, ok, _ := s.GetStringOk("build_cache.path"); ok { + return paths.New(p) + } + return paths.New(s.Defaults.GetString("build_cache.path")) +} + +// GetBuildCacheExtraPaths returns the extra paths to the build cache. +// Those paths are visited to look for precompiled items if not found elsewhere. +func (s *Settings) GetBuildCacheExtraPaths() paths.PathList { + if p, ok, _ := s.GetStringSliceOk("build_cache.extra_paths"); ok { + return paths.NewPathList(p...) + } + return nil +} diff --git a/internal/cli/configuration/configuration.go b/internal/cli/configuration/configuration.go new file mode 100644 index 00000000000..134efdfdaf6 --- /dev/null +++ b/internal/cli/configuration/configuration.go @@ -0,0 +1,153 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "fmt" + "os" + "path/filepath" + "runtime" + + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/go-configmap" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/go-paths-helper" + "github.com/arduino/go-win32-utils" +) + +// Settings contains the configuration of the Arduino CLI core service +type Settings struct { + *configmap.Map + Defaults *configmap.Map +} + +// NewSettings creates a new instance of Settings with the default values set +func NewSettings() *Settings { + res := &Settings{ + Map: configmap.New(), + Defaults: configmap.New(), + } + SetDefaults(res) + return res +} + +var userProvidedDefaultDataDir *string + +// getDefaultArduinoDataDir returns the full path to the default arduino folder +func getDefaultArduinoDataDir() string { + // This is overridden by --config-dir flag + if userProvidedDefaultDataDir != nil { + return *userProvidedDefaultDataDir + } + + userHomeDir, err := os.UserHomeDir() + if err != nil { + feedback.Warning(i18n.Tr("Unable to get user home dir: %v", err)) + return "." + } + + switch runtime.GOOS { + case "linux": + return filepath.Join(userHomeDir, ".arduino15") + case "darwin": + return filepath.Join(userHomeDir, "Library", "Arduino15") + case "windows": + localAppDataPath, err := win32.GetLocalAppDataFolder() + if err != nil { + feedback.Warning(i18n.Tr("Unable to get Local App Data Folder: %v", err)) + return "." + } + return filepath.Join(localAppDataPath, "Arduino15") + default: + return "." + } +} + +// getDefaultUserDir returns the full path to the default user folder +func getDefaultUserDir() string { + userHomeDir, err := os.UserHomeDir() + if err != nil { + feedback.Warning(i18n.Tr("Unable to get user home dir: %v", err)) + return "." + } + + switch runtime.GOOS { + case "linux": + return filepath.Join(userHomeDir, "Arduino") + case "darwin": + return filepath.Join(userHomeDir, "Documents", "Arduino") + case "windows": + documentsPath, err := win32.GetDocumentsFolder() + if err != nil { + feedback.Warning(i18n.Tr("Unable to get Documents Folder: %v", err)) + return "." + } + return filepath.Join(documentsPath, "Arduino") + default: + return "." + } +} + +// getDefaultBuildCacheDir returns the full path to the default build cache folder +func getDefaultBuildCacheDir() string { + var cacheDir *paths.Path + if p, err := os.UserCacheDir(); err == nil { + cacheDir = paths.New(p) + } else { + // fallback to /tmp + cacheDir = paths.TempDir() + } + return cacheDir.Join("arduino").String() +} + +// FindConfigFlagsInArgsOrFallbackOnEnv returns the config file path using the +// argument '--config-file' (if specified), if empty looks for the ARDUINO_CONFIG_FILE env, +// or looking in the current working dir +func FindConfigFlagsInArgsOrFallbackOnEnv(args []string) string { + // Look for '--config-dir' argument + for i, arg := range args { + if arg == "--config-dir" { + if len(args) > i+1 { + absArgs, err := paths.New(args[i+1]).Abs() + if err != nil { + feedback.FatalError(fmt.Errorf("invalid --config-dir value: %w", err), feedback.ErrBadArgument) + } + configDir := absArgs.String() + userProvidedDefaultDataDir = &configDir + break + } + } + } + + // Look for '--config-file' argument + for i, arg := range args { + if arg == "--config-file" { + if len(args) > i+1 { + return args[i+1] + } + } + } + if p, ok := os.LookupEnv("ARDUINO_CONFIG_FILE"); ok { + return p + } + if p, ok := os.LookupEnv("ARDUINO_DIRECTORIES_DATA"); ok { + return filepath.Join(p, "arduino-cli.yaml") + } + if p, ok := os.LookupEnv("ARDUINO_DATA_DIR"); ok { + return filepath.Join(p, "arduino-cli.yaml") + } + return filepath.Join(getDefaultArduinoDataDir(), "arduino-cli.yaml") +} diff --git a/configuration/configuration.schema.json b/internal/cli/configuration/configuration.schema.json similarity index 78% rename from configuration/configuration.schema.json rename to internal/cli/configuration/configuration.schema.json index a273353967b..4ffdb9fafa4 100644 --- a/configuration/configuration.schema.json +++ b/internal/cli/configuration/configuration.schema.json @@ -13,6 +13,10 @@ "type": "string", "format": "uri" } + }, + "enable_unsafe_install": { + "description": "set to `true` to allow installation of packages that do not pass the checksum test. This is considered an unsafe installation method and should be used only for development purposes.", + "type": "boolean" } }, "type": "object" @@ -20,6 +24,17 @@ "build_cache": { "description": "configuration options related to the compilation cache", "properties": { + "path": { + "description": "the path to the build cache, default is `$TMP/arduino`.", + "type": "string" + }, + "extra_paths": { + "description": "a list of paths to look for precompiled artifacts if not found on `build_cache.path` setting.", + "type": "array", + "items": { + "type": "string" + } + }, "compilations_before_purge": { "description": "interval, in number of compilations, at which the cache is purged, defaults to `10`. When `0` the cache is never purged.", "type": "integer", @@ -27,16 +42,8 @@ }, "ttl": { "description": "cache expiration time of build folders. If the cache is hit by a compilation the corresponding build files lifetime is renewed. The value format must be a valid input for time.ParseDuration(), defaults to `720h` (30 days)", - "oneOf": [ - { - "type": "integer", - "minimum": 0 - }, - { - "type": "string", - "pattern": "^\\+?([0-9]?\\.?[0-9]+(([nuµm]?s)|m|h))+$" - } - ] + "type": "string", + "pattern": "^[+-]?(([0-9]+(\\.[0-9]*)?|(\\.[0-9]+))(ns|us|µs|μs|ms|s|m|h))+$" } }, "type": "object" @@ -135,6 +142,35 @@ }, "type": "object" }, + "network": { + "description": "settings related to network connections.", + "type": "object", + "properties": { + "proxy": { + "description": "proxy settings for network connections.", + "type": "string" + }, + "user_agent_ext": { + "description": "extra string to append to the user agent string in HTTP requests.", + "type": "string" + }, + "connection_timeout": { + "description": "timeout for network connections, defaults to '30s'", + "type": "string", + "pattern": "^[+-]?(([0-9]+(\\.[0-9]*)?|(\\.[0-9]+))(ns|us|µs|μs|ms|s|m|h))+$" + }, + "cloud_api": { + "description": "settings related to the Arduino Cloud API.", + "type": "object", + "properties": { + "skip_board_detection_calls": { + "description": "do not call the Arduino Cloud API to detect an unknown board", + "type": "boolean" + } + } + } + } + }, "output": { "description": "settings related to text output.", "properties": { diff --git a/configuration/configuration_schema_test.go b/internal/cli/configuration/configuration_schema_test.go similarity index 100% rename from configuration/configuration_schema_test.go rename to internal/cli/configuration/configuration_schema_test.go diff --git a/internal/cli/configuration/configuration_test.go b/internal/cli/configuration/configuration_test.go new file mode 100644 index 00000000000..8e448fa15b7 --- /dev/null +++ b/internal/cli/configuration/configuration_test.go @@ -0,0 +1,74 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "path/filepath" + "testing" + + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestInit(t *testing.T) { + settings := NewSettings() + + require.Equal(t, "info", settings.Defaults.GetString("logging.level")) + require.Equal(t, "text", settings.Defaults.GetString("logging.format")) + + require.Empty(t, settings.Defaults.GetStringSlice("board_manager.additional_urls")) + + require.NotEmpty(t, settings.Defaults.GetString("directories.data")) + require.Empty(t, settings.Defaults.GetString("directories.downloads")) + require.NotEmpty(t, settings.DownloadsDir().String()) + require.NotEmpty(t, settings.Defaults.GetString("directories.user")) + + require.Equal(t, "50051", settings.Defaults.GetString("daemon.port")) + + require.Equal(t, true, settings.Defaults.GetBool("metrics.enabled")) + require.Equal(t, ":9090", settings.Defaults.GetString("metrics.addr")) +} + +func TestFindConfigFile(t *testing.T) { + defaultConfigFile := filepath.Join(getDefaultArduinoDataDir(), "arduino-cli.yaml") + configFile := FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-file"}) + require.Equal(t, defaultConfigFile, configFile) + + configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-file", "some/path/to/config"}) + require.Equal(t, "some/path/to/config", configFile) + + configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-file", "some/path/to/config/arduino-cli.yaml"}) + require.Equal(t, "some/path/to/config/arduino-cli.yaml", configFile) + + configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{}) + require.Equal(t, defaultConfigFile, configFile) + + t.Setenv("ARDUINO_CONFIG_FILE", "some/path/to/config") + configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{}) + require.Equal(t, "some/path/to/config", configFile) + + // when both env and flag are specified flag takes precedence + configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-file", "flag/path"}) + require.Equal(t, "flag/path", configFile) +} + +func TestFindConfigDir(t *testing.T) { + // Check behaviour with --config-dir + expected, err := paths.New("anotherpath", "arduino-cli.yaml").Abs() + require.NoError(t, err) + configFile := FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-dir", "anotherpath"}) + require.Equal(t, expected.String(), configFile) +} diff --git a/executils/executils_linux.go b/internal/cli/configuration/daemon.go similarity index 73% rename from executils/executils_linux.go rename to internal/cli/configuration/daemon.go index 92e65d3d28b..9ae053c2aee 100644 --- a/executils/executils_linux.go +++ b/internal/cli/configuration/daemon.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,9 +13,11 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package configuration -import "os/exec" - -func tellCommandNotToSpawnShell(_ *exec.Cmd) { +func (s *Settings) DaemonPort() string { + if port, ok, _ := s.GetStringOk("daemon.port"); ok { + return port + } + return s.Defaults.GetString("daemon.port") } diff --git a/internal/cli/configuration/defaults.go b/internal/cli/configuration/defaults.go new file mode 100644 index 00000000000..4a6670f9480 --- /dev/null +++ b/internal/cli/configuration/defaults.go @@ -0,0 +1,99 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "os" + "time" +) + +// SetDefaults sets the default values for certain keys +func SetDefaults(settings *Settings) { + setKeyTypeSchema := func(k string, v any) { + settings.SetKeyTypeSchema(k, v) + settings.Defaults.SetKeyTypeSchema(k, v) + } + setDefaultValueAndKeyTypeSchema := func(k string, v any) { + setKeyTypeSchema(k, v) + settings.Defaults.Set(k, v) + } + + // logging + setDefaultValueAndKeyTypeSchema("logging.level", "info") + setDefaultValueAndKeyTypeSchema("logging.format", "text") + setKeyTypeSchema("logging.file", "") + + // Libraries + setDefaultValueAndKeyTypeSchema("library.enable_unsafe_install", false) + + // Boards Manager + setDefaultValueAndKeyTypeSchema("board_manager.additional_urls", []string{}) + setDefaultValueAndKeyTypeSchema("board_manager.enable_unsafe_install", false) + + // arduino directories + setDefaultValueAndKeyTypeSchema("directories.data", getDefaultArduinoDataDir()) + setDefaultValueAndKeyTypeSchema("directories.downloads", "") + setDefaultValueAndKeyTypeSchema("directories.user", getDefaultUserDir()) + setKeyTypeSchema("directories.builtin.libraries", "") + + // Sketch compilation + setDefaultValueAndKeyTypeSchema("sketch.always_export_binaries", false) + setDefaultValueAndKeyTypeSchema("build_cache.ttl", (time.Hour * 24 * 30).String()) + setDefaultValueAndKeyTypeSchema("build_cache.compilations_before_purge", uint(10)) + setDefaultValueAndKeyTypeSchema("build_cache.path", getDefaultBuildCacheDir()) + setKeyTypeSchema("build_cache.extra_paths", []string{}) + + // daemon settings + setDefaultValueAndKeyTypeSchema("daemon.port", "50051") + + // metrics settings + setDefaultValueAndKeyTypeSchema("metrics.enabled", true) + setDefaultValueAndKeyTypeSchema("metrics.addr", ":9090") + + // output settings + setDefaultValueAndKeyTypeSchema("output.no_color", false) + + // updater settings + setDefaultValueAndKeyTypeSchema("updater.enable_notification", true) + + // network settings + setKeyTypeSchema("network.proxy", "") + setKeyTypeSchema("network.user_agent_ext", "") + setDefaultValueAndKeyTypeSchema("network.connection_timeout", (time.Second * 60).String()) + // network: Arduino Cloud API settings + setKeyTypeSchema("network.cloud_api.skip_board_detection_calls", false) + + // locale + setKeyTypeSchema("locale", "") +} + +// InjectEnvVars change settings based on the environment variables values +func InjectEnvVars(settings *Settings) { + // Bind env vars + settings.InjectEnvVars(os.Environ(), "ARDUINO") + + // Bind env aliases to keep backward compatibility + setIfEnvExists := func(key, env string) { + if v, ok := os.LookupEnv(env); ok { + settings.SetFromENV(key, v) + } + } + setIfEnvExists("library.enable_unsafe_install", "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL") + setIfEnvExists("directories.user", "ARDUINO_SKETCHBOOK_DIR") + setIfEnvExists("directories.downloads", "ARDUINO_DOWNLOADS_DIR") + setIfEnvExists("directories.data", "ARDUINO_DATA_DIR") + setIfEnvExists("sketch.always_export_binaries", "ARDUINO_SKETCH_ALWAYS_EXPORT_BINARIES") +} diff --git a/configuration/directories.go b/internal/cli/configuration/directories.go similarity index 50% rename from configuration/directories.go rename to internal/cli/configuration/directories.go index 9a69548ceef..a58aa21f885 100644 --- a/configuration/directories.go +++ b/internal/cli/configuration/directories.go @@ -17,24 +17,18 @@ package configuration import ( "github.com/arduino/go-paths-helper" - "github.com/spf13/viper" ) // HardwareDirectories returns all paths that may contains hardware packages. -func HardwareDirectories(settings *viper.Viper) paths.PathList { +func (settings *Settings) HardwareDirectories() paths.PathList { res := paths.PathList{} - if settings.IsSet("directories.Data") { - packagesDir := PackagesDir(Settings) - if packagesDir.IsDir() { - res.Add(packagesDir) - } + if packagesDir := settings.PackagesDir(); packagesDir.IsDir() { + res.Add(packagesDir) } - if settings.IsSet("directories.User") { - skDir := paths.New(settings.GetString("directories.User")) - hwDir := skDir.Join("hardware") - if hwDir.IsDir() { + if userDir, ok, _ := settings.GetStringOk("directories.user"); ok { + if hwDir := paths.New(userDir, "hardware"); hwDir.IsDir() { res.Add(hwDir) } } @@ -42,41 +36,53 @@ func HardwareDirectories(settings *viper.Viper) paths.PathList { return res } -// BuiltinToolsDirectories returns all paths that may contains bundled-tools. -func BuiltinToolsDirectories(settings *viper.Viper) paths.PathList { - return paths.NewPathList(settings.GetStringSlice("directories.builtin.Tools")...) -} - // IDEBuiltinLibrariesDir returns the IDE-bundled libraries path. Usually // this directory is present in the Arduino IDE. -func IDEBuiltinLibrariesDir(settings *viper.Viper) *paths.Path { - return paths.New(Settings.GetString("directories.builtin.Libraries")) +func (settings *Settings) IDEBuiltinLibrariesDir() *paths.Path { + if builtinLibsDir, ok, _ := settings.GetStringOk("directories.builtin.libraries"); ok { + return paths.New(builtinLibsDir) + } + return nil } // LibrariesDir returns the full path to the user directory containing // custom libraries -func LibrariesDir(settings *viper.Viper) *paths.Path { - return paths.New(settings.GetString("directories.User")).Join("libraries") +func (settings *Settings) LibrariesDir() *paths.Path { + return settings.UserDir().Join("libraries") +} + +// UserDir returns the full path to the user directory +func (settings *Settings) UserDir() *paths.Path { + if userDir, ok, _ := settings.GetStringOk("directories.user"); ok { + return paths.New(userDir) + } + return paths.New(settings.Defaults.GetString("directories.user")) } // PackagesDir returns the full path to the packages folder -func PackagesDir(settings *viper.Viper) *paths.Path { - return DataDir(settings).Join("packages") +func (settings *Settings) PackagesDir() *paths.Path { + return settings.DataDir().Join("packages") } // ProfilesCacheDir returns the full path to the profiles cache directory // (it contains all the platforms and libraries used to compile a sketch // using profiles) -func ProfilesCacheDir(settings *viper.Viper) *paths.Path { - return DataDir(settings).Join("internal") +func (settings *Settings) ProfilesCacheDir() *paths.Path { + return settings.DataDir().Join("internal") } // DataDir returns the full path to the data directory -func DataDir(settings *viper.Viper) *paths.Path { - return paths.New(settings.GetString("directories.Data")) +func (settings *Settings) DataDir() *paths.Path { + if dataDir, ok, _ := settings.GetStringOk("directories.data"); ok { + return paths.New(dataDir) + } + return paths.New(settings.Defaults.GetString("directories.data")) } // DownloadsDir returns the full path to the download cache directory -func DownloadsDir(settings *viper.Viper) *paths.Path { - return paths.New(settings.GetString("directories.Downloads")) +func (settings *Settings) DownloadsDir() *paths.Path { + if downloadDir, ok, _ := settings.GetStringOk("directories.downloads"); ok { + return paths.New(downloadDir) + } + return settings.DataDir().Join("staging") } diff --git a/executils/executils_darwin.go b/internal/cli/configuration/libraries.go similarity index 78% rename from executils/executils_darwin.go rename to internal/cli/configuration/libraries.go index 92e65d3d28b..6dc73b9b0d6 100644 --- a/executils/executils_darwin.go +++ b/internal/cli/configuration/libraries.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,9 +13,8 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package configuration -import "os/exec" - -func tellCommandNotToSpawnShell(_ *exec.Cmd) { +func (s *Settings) LibraryEnableUnsafeInstall() bool { + return s.GetBool("library.enable_unsafe_install") } diff --git a/internal/cli/configuration/locale.go b/internal/cli/configuration/locale.go new file mode 100644 index 00000000000..eb647731400 --- /dev/null +++ b/internal/cli/configuration/locale.go @@ -0,0 +1,23 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +func (s *Settings) Locale() string { + if locale, ok, err := s.GetStringOk("locale"); ok && err == nil { + return locale + } + return s.Defaults.GetString("locale") +} diff --git a/internal/cli/configuration/logging.go b/internal/cli/configuration/logging.go new file mode 100644 index 00000000000..73f1bacab35 --- /dev/null +++ b/internal/cli/configuration/logging.go @@ -0,0 +1,42 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import "github.com/arduino/go-paths-helper" + +func (s *Settings) LoggingLevel() string { + if l, ok, _ := s.GetStringOk("logging.level"); ok { + return l + } + return s.Defaults.GetString("logging.level") +} + +func (s *Settings) LoggingFormat() string { + if l, ok, _ := s.GetStringOk("logging.format"); ok { + return l + } + return s.Defaults.GetString("logging.format") +} + +func (s *Settings) LoggingFile() *paths.Path { + if l, ok, _ := s.GetStringOk("logging.file"); ok && l != "" { + return paths.New(l) + } + if l, ok, _ := s.Defaults.GetStringOk("logging.file"); ok && l != "" { + return paths.New(l) + } + return nil +} diff --git a/internal/cli/configuration/network.go b/internal/cli/configuration/network.go new file mode 100644 index 00000000000..43b502a03fb --- /dev/null +++ b/internal/cli/configuration/network.go @@ -0,0 +1,133 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +import ( + "context" + "errors" + "fmt" + "net/http" + "net/url" + "os" + "runtime" + "strings" + "time" + + "github.com/arduino/arduino-cli/commands/cmderrors" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/version" + "go.bug.st/downloader/v2" + "google.golang.org/grpc/metadata" +) + +// UserAgent returns the user agent (mainly used by HTTP clients) +func (settings *Settings) UserAgent() string { + subComponent := "" + if settings != nil { + subComponent = settings.GetString("network.user_agent_ext") + } + if subComponent != "" { + subComponent = " " + subComponent + } + + extendedUA := os.Getenv("ARDUINO_CLI_USER_AGENT_EXTENSION") + if extendedUA != "" { + extendedUA = " " + extendedUA + } + + return fmt.Sprintf("%s/%s%s (%s; %s; %s) Commit:%s%s", + version.VersionInfo.Application, + version.VersionInfo.VersionString, + subComponent, + runtime.GOARCH, runtime.GOOS, runtime.Version(), + version.VersionInfo.Commit, + extendedUA) +} + +// ExtraUserAgent returns the extended user-agent section provided via configuration settings +func (settings *Settings) ExtraUserAgent() string { + return settings.GetString("network.user_agent_ext") +} + +// ConnectionTimeout returns the network connection timeout +func (settings *Settings) ConnectionTimeout() time.Duration { + if timeout, ok, _ := settings.GetDurationOk("network.connection_timeout"); ok { + return timeout + } + return settings.Defaults.GetDuration("network.connection_timeout") +} + +// SkipCloudApiForBoardDetection returns whether the cloud API should be ignored for board detection +func (settings *Settings) SkipCloudApiForBoardDetection() bool { + return settings.GetBool("network.cloud_api.skip_board_detection_calls") +} + +// NetworkProxy returns the proxy configuration (mainly used by HTTP clients) +func (settings *Settings) NetworkProxy() (*url.URL, error) { + if proxyConfig, ok, _ := settings.GetStringOk("network.proxy"); !ok { + return nil, nil + } else if proxy, err := url.Parse(proxyConfig); err != nil { + return nil, errors.New(i18n.Tr("Invalid network.proxy '%[1]s': %[2]s", proxyConfig, err)) + } else { + return proxy, nil + } +} + +// NewHttpClient returns a new http client for use in the arduino-cli +func (settings *Settings) NewHttpClient(ctx context.Context) (*http.Client, error) { + proxy, err := settings.NetworkProxy() + if err != nil { + return nil, err + } + userAgent := settings.UserAgent() + if md, ok := metadata.FromIncomingContext(ctx); ok { + if extraUserAgent := strings.Join(md.Get("user-agent"), " "); extraUserAgent != "" { + userAgent += " " + extraUserAgent + } + } + return &http.Client{ + Transport: &httpClientRoundTripper{ + transport: &http.Transport{ + Proxy: http.ProxyURL(proxy), + }, + userAgent: userAgent, + }, + Timeout: settings.ConnectionTimeout(), + }, nil +} + +type httpClientRoundTripper struct { + transport http.RoundTripper + userAgent string +} + +func (h *httpClientRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + req.Header.Add("User-Agent", h.userAgent) + return h.transport.RoundTrip(req) +} + +// DownloaderConfig returns the downloader configuration based on current settings. +func (settings *Settings) DownloaderConfig(ctx context.Context) (downloader.Config, error) { + httpClient, err := settings.NewHttpClient(ctx) + if err != nil { + return downloader.Config{}, &cmderrors.InvalidArgumentError{ + Message: i18n.Tr("Could not connect via HTTP"), + Cause: err} + } + return downloader.Config{ + HttpClient: *httpClient, + }, nil +} diff --git a/internal/cli/configuration/network_test.go b/internal/cli/configuration/network_test.go new file mode 100644 index 00000000000..563c0414589 --- /dev/null +++ b/internal/cli/configuration/network_test.go @@ -0,0 +1,110 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration_test + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + "time" + + "github.com/arduino/arduino-cli/internal/cli/configuration" + "github.com/stretchr/testify/require" +) + +func TestUserAgentHeader(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, r.Header.Get("User-Agent")) + })) + defer ts.Close() + + settings := configuration.NewSettings() + require.NoError(t, settings.Set("network.user_agent_ext", "test-user-agent")) + client, err := settings.NewHttpClient(context.Background()) + require.NoError(t, err) + + request, err := http.NewRequest("GET", ts.URL, nil) + require.NoError(t, err) + + response, err := client.Do(request) + require.NoError(t, err) + + b, err := io.ReadAll(response.Body) + require.NoError(t, err) + + fmt.Println("RESPONSE:", string(b)) + require.Contains(t, string(b), "test-user-agent") +} + +func TestProxy(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNoContent) + })) + defer ts.Close() + + settings := configuration.NewSettings() + settings.Set("network.proxy", ts.URL) + client, err := settings.NewHttpClient(context.Background()) + require.NoError(t, err) + + request, err := http.NewRequest("GET", "http://arduino.cc", nil) + require.NoError(t, err) + + response, err := client.Do(request) + require.NoError(t, err) + require.Equal(t, http.StatusNoContent, response.StatusCode) +} + +func TestConnectionTimeout(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + time.Sleep(5 * time.Second) + w.WriteHeader(http.StatusNoContent) + })) + defer ts.Close() + + doRequest := func(timeout int) (*http.Response, time.Duration, error) { + settings := configuration.NewSettings() + require.NoError(t, settings.Set("network.proxy", ts.URL)) + if timeout != 0 { + require.NoError(t, settings.Set("network.connection_timeout", "2s")) + } + client, err := settings.NewHttpClient(context.Background()) + require.NoError(t, err) + + request, err := http.NewRequest("GET", "http://arduino.cc", nil) + require.NoError(t, err) + + start := time.Now() + resp, err := client.Do(request) + duration := time.Since(start) + + return resp, duration, err + } + + // Using default timeout (0), will wait indefinitely (in our case up to 5s) + response, elapsed, err := doRequest(0) + require.NoError(t, err) + require.Equal(t, http.StatusNoContent, response.StatusCode) + require.True(t, elapsed.Seconds() >= 4 && elapsed.Seconds() <= 6) // Adding some tolerance just in case... + + // Setting a timeout of 1 seconds, will drop the connection after 1s + _, elapsed, err = doRequest(1) + require.Error(t, err) + require.True(t, elapsed.Seconds() >= 0.5 && elapsed.Seconds() <= 3) // Adding some tolerance just in case... +} diff --git a/executils/executils_freebsd.go b/internal/cli/configuration/output.go similarity index 81% rename from executils/executils_freebsd.go rename to internal/cli/configuration/output.go index 92e65d3d28b..67ae5e72d99 100644 --- a/executils/executils_freebsd.go +++ b/internal/cli/configuration/output.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,9 +13,8 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package configuration -import "os/exec" - -func tellCommandNotToSpawnShell(_ *exec.Cmd) { +func (s *Settings) NoColor() bool { + return s.GetBool("output.no_color") } diff --git a/internal/cli/configuration/sketch.go b/internal/cli/configuration/sketch.go new file mode 100644 index 00000000000..27638b67df5 --- /dev/null +++ b/internal/cli/configuration/sketch.go @@ -0,0 +1,25 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +// SketchAlwaysExportBinaries returns true if the compile command should +// export binaries by default. +func (settings *Settings) SketchAlwaysExportBinaries() bool { + if res, ok, _ := settings.GetBoolOk("sketch.always_export_binaries"); ok { + return res + } + return settings.Defaults.GetBool("sketch.always_export_binaries") +} diff --git a/internal/cli/configuration/updater.go b/internal/cli/configuration/updater.go new file mode 100644 index 00000000000..3f553782254 --- /dev/null +++ b/internal/cli/configuration/updater.go @@ -0,0 +1,23 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configuration + +func (s *Settings) UpdaterEnableNotification() bool { + if en, ok, _ := s.GetBoolOk("updater.enable_notification"); ok { + return en + } + return s.GetBool("updater.enable_notification") +} diff --git a/internal/cli/core/core.go b/internal/cli/core/core.go index f040d3e2efc..c966db14e93 100644 --- a/internal/cli/core/core.go +++ b/internal/cli/core/core.go @@ -18,28 +18,27 @@ package core import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `core` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { coreCommand := &cobra.Command{ Use: "core", - Short: tr("Arduino core operations."), - Long: tr("Arduino core operations."), + Short: i18n.Tr("Arduino core operations."), + Long: i18n.Tr("Arduino core operations."), Example: " " + os.Args[0] + " core update-index", } - coreCommand.AddCommand(initDownloadCommand()) - coreCommand.AddCommand(initInstallCommand()) - coreCommand.AddCommand(initListCommand()) - coreCommand.AddCommand(initUpdateIndexCommand()) - coreCommand.AddCommand(initUpgradeCommand()) - coreCommand.AddCommand(initUninstallCommand()) - coreCommand.AddCommand(initSearchCommand()) + coreCommand.AddCommand(initDownloadCommand(srv)) + coreCommand.AddCommand(initInstallCommand(srv)) + coreCommand.AddCommand(initListCommand(srv)) + coreCommand.AddCommand(initUpdateIndexCommand(srv)) + coreCommand.AddCommand(initUpgradeCommand(srv)) + coreCommand.AddCommand(initUninstallCommand(srv)) + coreCommand.AddCommand(initSearchCommand(srv)) return coreCommand } diff --git a/internal/cli/core/download.go b/internal/cli/core/download.go index daa87f04ef2..c4e7ee8732c 100644 --- a/internal/cli/core/download.go +++ b/internal/cli/core/download.go @@ -20,40 +20,43 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDownloadCommand() *cobra.Command { +func initDownloadCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { downloadCommand := &cobra.Command{ - Use: fmt.Sprintf("download [%s:%s[@%s]]...", tr("PACKAGER"), tr("ARCH"), tr("VERSION")), - Short: tr("Downloads one or more cores and corresponding tool dependencies."), - Long: tr("Downloads one or more cores and corresponding tool dependencies."), + Use: fmt.Sprintf("download [%s:%s[@%s]]...", i18n.Tr("PACKAGER"), i18n.Tr("ARCH"), i18n.Tr("VERSION")), + Short: i18n.Tr("Downloads one or more cores and corresponding tool dependencies."), + Long: i18n.Tr("Downloads one or more cores and corresponding tool dependencies."), Example: "" + - " " + os.Args[0] + " core download arduino:samd # " + tr("download the latest version of Arduino SAMD core.") + "\n" + - " " + os.Args[0] + " core download arduino:samd@1.6.9 # " + tr("download a specific version (in this case 1.6.9)."), + " " + os.Args[0] + " core download arduino:samd # " + i18n.Tr("download the latest version of Arduino SAMD core.") + "\n" + + " " + os.Args[0] + " core download arduino:samd@1.6.9 # " + i18n.Tr("download a specific version (in this case 1.6.9)."), Args: cobra.MinimumNArgs(1), - Run: runDownloadCommand, + Run: func(cmd *cobra.Command, args []string) { + runDownloadCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstallableCores(), cobra.ShellCompDirectiveDefault + return arguments.GetInstallableCores(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } return downloadCommand } -func runDownloadCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runDownloadCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli core download`") - platformsRefs, err := arguments.ParseReferences(args) + platformsRefs, err := arguments.ParseReferences(ctx, srv, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for i, platformRef := range platformsRefs { @@ -63,9 +66,9 @@ func runDownloadCommand(cmd *cobra.Command, args []string) { Architecture: platformRef.Architecture, Version: platformRef.Version, } - _, err := core.PlatformDownload(context.Background(), platformDownloadreq, feedback.ProgressBar()) - if err != nil { - feedback.Fatal(tr("Error downloading %[1]s: %[2]v", args[i], err), feedback.ErrNetwork) + stream := commands.PlatformDownloadStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + if err := srv.PlatformDownload(platformDownloadreq, stream); err != nil { + feedback.Fatal(i18n.Tr("Error downloading %[1]s: %[2]v", args[i], err), feedback.ErrNetwork) } } } diff --git a/internal/cli/core/install.go b/internal/cli/core/install.go index 8193a8b4344..8a0e7284d35 100644 --- a/internal/cli/core/install.go +++ b/internal/cli/core/install.go @@ -20,49 +20,50 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initInstallCommand() *cobra.Command { +func initInstallCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var noOverwrite bool var scriptFlags arguments.PrePostScriptsFlags installCommand := &cobra.Command{ - Use: fmt.Sprintf("install %s:%s[@%s]...", tr("PACKAGER"), tr("ARCH"), tr("VERSION")), - Short: tr("Installs one or more cores and corresponding tool dependencies."), - Long: tr("Installs one or more cores and corresponding tool dependencies."), - Example: " # " + tr("download the latest version of Arduino SAMD core.") + "\n" + + Use: fmt.Sprintf("install %s:%s[@%s]...", i18n.Tr("PACKAGER"), i18n.Tr("ARCH"), i18n.Tr("VERSION")), + Short: i18n.Tr("Installs one or more cores and corresponding tool dependencies."), + Long: i18n.Tr("Installs one or more cores and corresponding tool dependencies."), + Example: " # " + i18n.Tr("download the latest version of Arduino SAMD core.") + "\n" + " " + os.Args[0] + " core install arduino:samd\n\n" + - " # " + tr("download a specific version (in this case 1.6.9).") + "\n" + + " # " + i18n.Tr("download a specific version (in this case 1.6.9).") + "\n" + " " + os.Args[0] + " core install arduino:samd@1.6.9", Args: cobra.MinimumNArgs(1), PreRun: func(cmd *cobra.Command, args []string) { arguments.CheckFlagsConflicts(cmd, "run-post-install", "skip-post-install") }, Run: func(cmd *cobra.Command, args []string) { - runInstallCommand(args, scriptFlags, noOverwrite) + runInstallCommand(cmd.Context(), srv, args, scriptFlags, noOverwrite) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstallableCores(), cobra.ShellCompDirectiveDefault + return arguments.GetInstallableCores(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } scriptFlags.AddToCommand(installCommand) - installCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, tr("Do not overwrite already installed platforms.")) + installCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, i18n.Tr("Do not overwrite already installed platforms.")) return installCommand } -func runInstallCommand(args []string, scriptFlags arguments.PrePostScriptsFlags, noOverwrite bool) { - inst := instance.CreateAndInit() +func runInstallCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, scriptFlags arguments.PrePostScriptsFlags, noOverwrite bool) { logrus.Info("Executing `arduino-cli core install`") + inst := instance.CreateAndInit(ctx, srv) - platformsRefs, err := arguments.ParseReferences(args) + platformsRefs, err := arguments.ParseReferences(ctx, srv, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for _, platformRef := range platformsRefs { @@ -75,9 +76,9 @@ func runInstallCommand(args []string, scriptFlags arguments.PrePostScriptsFlags, NoOverwrite: noOverwrite, SkipPreUninstall: scriptFlags.DetectSkipPreUninstallValue(), } - _, err := core.PlatformInstall(context.Background(), platformInstallRequest, feedback.ProgressBar(), feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error during install: %v", err), feedback.ErrGeneric) + stream := commands.PlatformInstallStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + if err := srv.PlatformInstall(platformInstallRequest, stream); err != nil { + feedback.Fatal(i18n.Tr("Error during install: %v", err), feedback.ErrGeneric) } } } diff --git a/internal/cli/core/list.go b/internal/cli/core/list.go index 4645295b063..4fe1661b0e5 100644 --- a/internal/cli/core/list.go +++ b/internal/cli/core/list.go @@ -16,83 +16,111 @@ package core import ( - "fmt" + "context" "os" - "github.com/arduino/arduino-cli/commands/core" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initListCommand() *cobra.Command { +func initListCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var updatableOnly bool var all bool listCommand := &cobra.Command{ Use: "list", - Short: tr("Shows the list of installed platforms."), - Long: tr("Shows the list of installed platforms."), + Short: i18n.Tr("Shows the list of installed platforms."), + Long: i18n.Tr("Shows the list of installed platforms."), Example: " " + os.Args[0] + " core list", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runListCommand(args, all, updatableOnly) + runListCommand(cmd.Context(), srv, all, updatableOnly) }, } - listCommand.Flags().BoolVar(&updatableOnly, "updatable", false, tr("List updatable platforms.")) - listCommand.Flags().BoolVar(&all, "all", false, tr("If set return all installable and installed cores, including manually installed.")) + listCommand.Flags().BoolVar(&updatableOnly, "updatable", false, i18n.Tr("List updatable platforms.")) + listCommand.Flags().BoolVar(&all, "all", false, i18n.Tr("If set return all installable and installed cores, including manually installed.")) return listCommand } -func runListCommand(args []string, all bool, updatableOnly bool) { - inst := instance.CreateAndInit() +func runListCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, all bool, updatableOnly bool) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli core list`") - List(inst, all, updatableOnly) + List(ctx, srv, inst, all, updatableOnly) } // List gets and prints a list of installed platforms. -func List(inst *rpc.Instance, all bool, updatableOnly bool) { - platforms := GetList(inst, all, updatableOnly) - feedback.PrintResult(installedResult{platforms}) +func List(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance, all bool, updatableOnly bool) { + platforms := GetList(ctx, srv, inst, all, updatableOnly) + feedback.PrintResult(newCoreListResult(platforms, updatableOnly)) } // GetList returns a list of installed platforms. -func GetList(inst *rpc.Instance, all bool, updatableOnly bool) []*rpc.Platform { - platforms, err := core.PlatformList(&rpc.PlatformListRequest{ - Instance: inst, - UpdatableOnly: updatableOnly, - All: all, +func GetList(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance, all bool, updatableOnly bool) []*rpc.PlatformSummary { + platforms, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + ManuallyInstalled: true, }) if err != nil { - feedback.Fatal(tr("Error listing platforms: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error listing platforms: %v", err), feedback.ErrGeneric) } - return platforms.InstalledPlatforms + + // If both `all` and `updatableOnly` are set, `all` takes precedence. + if all { + return platforms.GetSearchOutput() + } + + result := []*rpc.PlatformSummary{} + for _, platform := range platforms.GetSearchOutput() { + if platform.GetInstalledVersion() == "" && !platform.GetMetadata().GetManuallyInstalled() { + continue + } + if updatableOnly && platform.GetInstalledVersion() == platform.GetLatestVersion() { + continue + } + result = append(result, platform) + } + return result } -// output from this command requires special formatting, let's create a dedicated -// feedback.Result implementation -type installedResult struct { - platforms []*rpc.Platform +func newCoreListResult(in []*rpc.PlatformSummary, updatableOnly bool) *coreListResult { + res := &coreListResult{updatableOnly: updatableOnly, Platforms: make([]*result.PlatformSummary, len(in))} + for i, platformSummary := range in { + res.Platforms[i] = result.NewPlatformSummary(platformSummary) + } + return res } -func (ir installedResult) Data() interface{} { - return ir.platforms +type coreListResult struct { + Platforms []*result.PlatformSummary `json:"platforms"` + updatableOnly bool } -func (ir installedResult) String() string { - if len(ir.platforms) == 0 { - return tr("No platforms installed.") +// Data implements Result interface +func (ir coreListResult) Data() interface{} { + return ir +} + +// String implements Result interface +func (ir coreListResult) String() string { + if len(ir.Platforms) == 0 { + if ir.updatableOnly { + return i18n.Tr("All platforms are up to date.") + } + return i18n.Tr("No platforms installed.") } t := table.New() - t.SetHeader(tr("ID"), tr("Installed"), tr("Latest"), tr("Name")) - for _, p := range ir.platforms { - name := p.Name - if p.Deprecated { - name = fmt.Sprintf("[%s] %s", tr("DEPRECATED"), name) + t.SetHeader(i18n.Tr("ID"), i18n.Tr("Installed"), i18n.Tr("Latest"), i18n.Tr("Name")) + for _, platform := range ir.Platforms { + latestVersion := platform.LatestVersion.String() + if latestVersion == "" { + latestVersion = "n/a" } - t.AddRow(p.Id, p.Installed, p.Latest, name) + t.AddRow(platform.Id, platform.InstalledVersion, latestVersion, platform.GetPlatformName()) } return t.Render() diff --git a/internal/cli/core/search.go b/internal/cli/core/search.go index 0259d35bf44..590fce9e62d 100644 --- a/internal/cli/core/search.go +++ b/internal/cli/core/search.go @@ -19,148 +19,121 @@ import ( "context" "fmt" "os" - "path" "strings" "time" - "github.com/arduino/arduino-cli/arduino/globals" - "github.com/arduino/arduino-cli/arduino/utils" "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/core" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var ( - allVersions bool -) - -func initSearchCommand() *cobra.Command { +func initSearchCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + var allVersions bool searchCommand := &cobra.Command{ - Use: fmt.Sprintf("search <%s...>", tr("keywords")), - Short: tr("Search for a core in Boards Manager."), - Long: tr("Search for a core in Boards Manager using the specified keywords."), + Use: fmt.Sprintf("search <%s...>", i18n.Tr("keywords")), + Short: i18n.Tr("Search for a core in Boards Manager."), + Long: i18n.Tr("Search for a core in Boards Manager using the specified keywords."), Example: " " + os.Args[0] + " core search MKRZero -a -v", Args: cobra.ArbitraryArgs, - Run: runSearchCommand, + Run: func(cmd *cobra.Command, args []string) { + runSearchCommand(cmd.Context(), srv, args, allVersions) + }, } - searchCommand.Flags().BoolVarP(&allVersions, "all", "a", false, tr("Show all available core versions.")) + searchCommand.Flags().BoolVarP(&allVersions, "all", "a", false, i18n.Tr("Show all available core versions.")) return searchCommand } // indexUpdateInterval specifies the time threshold over which indexes are updated -const indexUpdateInterval = "24h" +const indexUpdateInterval = 24 * time.Hour -func runSearchCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runSearchCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, allVersions bool) { + inst := instance.CreateAndInit(ctx, srv) - if indexesNeedUpdating(indexUpdateInterval) { - err := commands.UpdateIndex(context.Background(), &rpc.UpdateIndexRequest{Instance: inst}, feedback.ProgressBar()) - if err != nil { - feedback.FatalError(err, feedback.ErrGeneric) + stream, res := commands.UpdateIndexStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + err := srv.UpdateIndex( + &rpc.UpdateIndexRequest{Instance: inst, UpdateIfOlderThanSecs: int64(indexUpdateInterval.Seconds())}, + stream) + if err != nil { + feedback.FatalError(err, feedback.ErrGeneric) + } + for _, idxRes := range res().GetUpdatedIndexes() { + if idxRes.GetStatus() == rpc.IndexUpdateReport_STATUS_UPDATED { + // At least one index has been updated, reinitialize the instance + instance.Init(ctx, srv, inst) + break } - instance.Init(inst) } arguments := strings.ToLower(strings.Join(args, " ")) logrus.Infof("Executing `arduino-cli core search` with args: '%s'", arguments) - resp, err := core.PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: arguments, - AllVersions: allVersions, + resp, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: arguments, }) if err != nil { - feedback.Fatal(tr("Error searching for platforms: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error searching for platforms: %v", err), feedback.ErrGeneric) } coreslist := resp.GetSearchOutput() - feedback.PrintResult(searchResults{coreslist}) + feedback.PrintResult(newSearchResult(coreslist, allVersions)) } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type searchResults struct { - platforms []*rpc.Platform + Platforms []*result.PlatformSummary `json:"platforms"` + allVersions bool +} + +func newSearchResult(in []*rpc.PlatformSummary, allVersions bool) *searchResults { + res := &searchResults{ + Platforms: make([]*result.PlatformSummary, len(in)), + allVersions: allVersions, + } + for i, platformSummary := range in { + res.Platforms[i] = result.NewPlatformSummary(platformSummary) + } + return res } func (sr searchResults) Data() interface{} { - return sr.platforms + return sr } func (sr searchResults) String() string { - if len(sr.platforms) > 0 { - t := table.New() - t.SetHeader(tr("ID"), tr("Version"), tr("Name")) - for _, item := range sr.platforms { - name := item.GetName() - if item.Deprecated { - name = fmt.Sprintf("[%s] %s", tr("DEPRECATED"), name) - } - t.AddRow(item.GetId(), item.GetLatest(), name) - } - return t.Render() + if len(sr.Platforms) == 0 { + return i18n.Tr("No platforms matching your search.") } - return tr("No platforms matching your search.") -} -// indexesNeedUpdating returns whether one or more index files need updating. -// A duration string must be provided to calculate the time threshold -// used to update the indexes, if the duration is not valid a default -// of 24 hours is used. -// Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". -func indexesNeedUpdating(duration string) bool { - indexpath := configuration.DataDir(configuration.Settings) + t := table.New() + t.SetHeader(i18n.Tr("ID"), i18n.Tr("Version"), i18n.Tr("Name")) - now := time.Now() - modTimeThreshold, err := time.ParseDuration(duration) - if err != nil { - feedback.Fatal(tr("Invalid timeout: %s", err), feedback.ErrBadArgument) - } - - urls := []string{globals.DefaultIndexURL} - urls = append(urls, configuration.Settings.GetStringSlice("board_manager.additional_urls")...) - for _, u := range urls { - URL, err := utils.URLParse(u) - if err != nil { - continue + addRow := func(platform *result.PlatformSummary, release *result.PlatformRelease) { + if release == nil { + t.AddRow(platform.Id, "n/a", platform.GetPlatformName()) + return } + t.AddRow(platform.Id, release.Version, release.FormatName()) + } - if URL.Scheme == "file" { - // No need to update local files + for _, platform := range sr.Platforms { + // When allVersions is not requested we only show the latest compatible version + if !sr.allVersions { + addRow(platform, platform.GetLatestRelease()) continue } - // should handle: - // - package_index.json - // - package_index.json.sig - // - package_index.json.gz - // - package_index.tar.bz2 - indexFileName := path.Base(URL.Path) - indexFileName = strings.TrimSuffix(indexFileName, ".tar.bz2") - indexFileName = strings.TrimSuffix(indexFileName, ".gz") - indexFileName = strings.TrimSuffix(indexFileName, ".sig") - indexFileName = strings.TrimSuffix(indexFileName, ".json") - // and obtain package_index.json as result - coreIndexPath := indexpath.Join(indexFileName + ".json") - if coreIndexPath.NotExist() { - return true - } - - info, err := coreIndexPath.Stat() - if err != nil { - return true - } - - if now.After(info.ModTime().Add(modTimeThreshold)) { - return true + for _, release := range platform.Releases.Values() { + addRow(platform, release) } } - return false + return t.Render() } diff --git a/internal/cli/core/uninstall.go b/internal/cli/core/uninstall.go index 10992ef9bdf..b939c5789e6 100644 --- a/internal/cli/core/uninstall.go +++ b/internal/cli/core/uninstall.go @@ -20,57 +20,59 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUninstallCommand() *cobra.Command { +func initUninstallCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var preUninstallFlags arguments.PrePostScriptsFlags uninstallCommand := &cobra.Command{ - Use: fmt.Sprintf("uninstall %s:%s ...", tr("PACKAGER"), tr("ARCH")), - Short: tr("Uninstalls one or more cores and corresponding tool dependencies if no longer used."), - Long: tr("Uninstalls one or more cores and corresponding tool dependencies if no longer used."), + Use: fmt.Sprintf("uninstall %s:%s ...", i18n.Tr("PACKAGER"), i18n.Tr("ARCH")), + Short: i18n.Tr("Uninstalls one or more cores and corresponding tool dependencies if no longer used."), + Long: i18n.Tr("Uninstalls one or more cores and corresponding tool dependencies if no longer used."), Example: " " + os.Args[0] + " core uninstall arduino:samd\n", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - runUninstallCommand(args, preUninstallFlags) + runUninstallCommand(cmd.Context(), srv, args, preUninstallFlags) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetUninstallableCores(), cobra.ShellCompDirectiveDefault + return arguments.GetUninstallableCores(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } preUninstallFlags.AddToCommand(uninstallCommand) return uninstallCommand } -func runUninstallCommand(args []string, preUninstallFlags arguments.PrePostScriptsFlags) { - inst := instance.CreateAndInit() +func runUninstallCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, preUninstallFlags arguments.PrePostScriptsFlags) { logrus.Info("Executing `arduino-cli core uninstall`") + inst := instance.CreateAndInit(ctx, srv) - platformsRefs, err := arguments.ParseReferences(args) + platformsRefs, err := arguments.ParseReferences(ctx, srv, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for _, platformRef := range platformsRefs { if platformRef.Version != "" { - feedback.Fatal(tr("Invalid parameter %s: version not allowed", platformRef), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid parameter %s: version not allowed", platformRef), feedback.ErrBadArgument) } } for _, platformRef := range platformsRefs { - _, err := core.PlatformUninstall(context.Background(), &rpc.PlatformUninstallRequest{ + req := &rpc.PlatformUninstallRequest{ Instance: inst, PlatformPackage: platformRef.PackageName, Architecture: platformRef.Architecture, SkipPreUninstall: preUninstallFlags.DetectSkipPreUninstallValue(), - }, feedback.NewTaskProgressCB()) - if err != nil { - feedback.Fatal(tr("Error during uninstall: %v", err), feedback.ErrGeneric) + } + stream := commands.PlatformUninstallStreamResponseToCallbackFunction(ctx, feedback.NewTaskProgressCB()) + if err := srv.PlatformUninstall(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error during uninstall: %v", err), feedback.ErrGeneric) } } } diff --git a/internal/cli/core/update_index.go b/internal/cli/core/update_index.go index 548ff9113da..d18e006defb 100644 --- a/internal/cli/core/update_index.go +++ b/internal/cli/core/update_index.go @@ -21,34 +21,54 @@ import ( "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUpdateIndexCommand() *cobra.Command { +func initUpdateIndexCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { updateIndexCommand := &cobra.Command{ Use: "update-index", - Short: tr("Updates the index of cores."), - Long: tr("Updates the index of cores to the latest version."), + Short: i18n.Tr("Updates the index of cores."), + Long: i18n.Tr("Updates the index of cores to the latest version."), Example: " " + os.Args[0] + " core update-index", Args: cobra.NoArgs, - Run: runUpdateIndexCommand, + Run: func(cmd *cobra.Command, args []string) { + runUpdateIndexCommand(cmd.Context(), srv) + }, } return updateIndexCommand } -func runUpdateIndexCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runUpdateIndexCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli core update-index`") - UpdateIndex(inst) + inst := instance.CreateAndInit(ctx, srv) + resp := UpdateIndex(ctx, srv, inst) + + feedback.PrintResult(&updateIndexResult{result.NewUpdateIndexResponse_ResultResult(resp)}) } // UpdateIndex updates the index of platforms. -func UpdateIndex(inst *rpc.Instance) { - err := commands.UpdateIndex(context.Background(), &rpc.UpdateIndexRequest{Instance: inst}, feedback.ProgressBar()) +func UpdateIndex(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance) *rpc.UpdateIndexResponse_Result { + stream, res := commands.UpdateIndexStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + err := srv.UpdateIndex(&rpc.UpdateIndexRequest{Instance: inst}, stream) if err != nil { feedback.FatalError(err, feedback.ErrGeneric) } + return res() +} + +type updateIndexResult struct { + *result.UpdateIndexResponse_ResultResult +} + +func (r *updateIndexResult) Data() interface{} { + return r +} + +func (r *updateIndexResult) String() string { + return "" } diff --git a/internal/cli/core/upgrade.go b/internal/cli/core/upgrade.go index f8484dc985b..ee65e47e806 100644 --- a/internal/cli/core/upgrade.go +++ b/internal/cli/core/upgrade.go @@ -21,82 +21,97 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/core" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUpgradeCommand() *cobra.Command { +func initUpgradeCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var postInstallFlags arguments.PrePostScriptsFlags upgradeCommand := &cobra.Command{ - Use: fmt.Sprintf("upgrade [%s:%s] ...", tr("PACKAGER"), tr("ARCH")), - Short: tr("Upgrades one or all installed platforms to the latest version."), - Long: tr("Upgrades one or all installed platforms to the latest version."), + Use: fmt.Sprintf("upgrade [%s:%s] ...", i18n.Tr("PACKAGER"), i18n.Tr("ARCH")), + Short: i18n.Tr("Upgrades one or all installed platforms to the latest version."), + Long: i18n.Tr("Upgrades one or all installed platforms to the latest version."), Example: "" + - " # " + tr("upgrade everything to the latest version") + "\n" + + " # " + i18n.Tr("upgrade everything to the latest version") + "\n" + " " + os.Args[0] + " core upgrade\n\n" + - " # " + tr("upgrade arduino:samd to the latest version") + "\n" + + " # " + i18n.Tr("upgrade arduino:samd to the latest version") + "\n" + " " + os.Args[0] + " core upgrade arduino:samd", Run: func(cmd *cobra.Command, args []string) { - runUpgradeCommand(args, postInstallFlags.DetectSkipPostInstallValue(), postInstallFlags.DetectSkipPreUninstallValue()) + runUpgradeCommand(cmd.Context(), srv, args, postInstallFlags.DetectSkipPostInstallValue(), postInstallFlags.DetectSkipPreUninstallValue()) }, } postInstallFlags.AddToCommand(upgradeCommand) return upgradeCommand } -func runUpgradeCommand(args []string, skipPostInstall bool, skipPreUninstall bool) { - inst := instance.CreateAndInit() +func runUpgradeCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, skipPostInstall bool, skipPreUninstall bool) { logrus.Info("Executing `arduino-cli core upgrade`") - Upgrade(inst, args, skipPostInstall, skipPreUninstall) + inst := instance.CreateAndInit(ctx, srv) + Upgrade(ctx, srv, inst, args, skipPostInstall, skipPreUninstall) } // Upgrade upgrades one or all installed platforms to the latest version. -func Upgrade(inst *rpc.Instance, args []string, skipPostInstall bool, skipPreUninstall bool) { +func Upgrade(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance, args []string, skipPostInstall bool, skipPreUninstall bool) { // if no platform was passed, upgrade allthethings if len(args) == 0 { - targets, err := core.PlatformList(&rpc.PlatformListRequest{ - Instance: inst, - UpdatableOnly: true, + platforms, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, }) if err != nil { - feedback.Fatal(tr("Error retrieving core list: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error retrieving core list: %v", err), feedback.ErrGeneric) } - if len(targets.InstalledPlatforms) == 0 { - feedback.Print(tr("All the cores are already at the latest version")) + targets := []*rpc.Platform{} + for _, platform := range platforms.GetSearchOutput() { + if platform.GetInstalledVersion() == "" { + continue + } + // if it's not updatable, skip it + latestRelease := platform.GetLatestRelease() + if latestRelease != nil && platform.GetInstalledVersion() != latestRelease.GetVersion() { + targets = append(targets, &rpc.Platform{ + Metadata: platform.GetMetadata(), + Release: latestRelease, + }) + } + } + + if len(targets) == 0 { + feedback.Print(i18n.Tr("All the cores are already at the latest version")) return } - for _, t := range targets.InstalledPlatforms { - args = append(args, t.Id) + for _, t := range targets { + args = append(args, t.GetMetadata().GetId()) } } - warningMissingIndex := func(response *rpc.PlatformUpgradeResponse) { - if response == nil || response.Platform == nil { + warningMissingIndex := func(platform *rpc.Platform) { + if platform == nil { return } - if !response.Platform.Indexed { - feedback.Warning(tr("missing package index for %s, future updates cannot be guaranteed", response.Platform.Id)) + if !platform.GetMetadata().GetIndexed() { + feedback.Warning(i18n.Tr("missing package index for %s, future updates cannot be guaranteed", platform.GetMetadata().GetId())) } } // proceed upgrading, if anything is upgradable - platformsRefs, err := arguments.ParseReferences(args) + platformsRefs, err := arguments.ParseReferences(ctx, srv, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } hasBadArguments := false for i, platformRef := range platformsRefs { if platformRef.Version != "" { - feedback.Warning(tr("Invalid item %s", args[i])) + feedback.Warning(i18n.Tr("Invalid item %s", args[i])) hasBadArguments = true continue } @@ -108,27 +123,28 @@ func Upgrade(inst *rpc.Instance, args []string, skipPostInstall bool, skipPreUni SkipPostInstall: skipPostInstall, SkipPreUninstall: skipPreUninstall, } - response, err := core.PlatformUpgrade(context.Background(), r, feedback.ProgressBar(), feedback.TaskProgress()) - warningMissingIndex(response) + stream, respCB := commands.PlatformUpgradeStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + err := srv.PlatformUpgrade(r, stream) + warningMissingIndex(respCB().GetPlatform()) if err != nil { - var alreadyAtLatestVersionErr *arduino.PlatformAlreadyAtTheLatestVersionError + var alreadyAtLatestVersionErr *cmderrors.PlatformAlreadyAtTheLatestVersionError if errors.As(err, &alreadyAtLatestVersionErr) { feedback.Warning(err.Error()) continue } - feedback.Fatal(tr("Error during upgrade: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error during upgrade: %v", err), feedback.ErrGeneric) } } if hasBadArguments { - feedback.Fatal(tr("Some upgrades failed, please check the output for details."), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Some upgrades failed, please check the output for details."), feedback.ErrBadArgument) } feedback.PrintResult(&platformUpgradeResult{}) } -// This is needed so we can print warning messages in case users use --format json +// This is needed so we can print warning messages in case users use --json type platformUpgradeResult struct{} // Data implements feedback.Result. diff --git a/internal/cli/daemon/daemon.go b/internal/cli/daemon/daemon.go index 5024f4255d0..ea9476a2ec7 100644 --- a/internal/cli/daemon/daemon.go +++ b/internal/cli/daemon/daemon.go @@ -21,60 +21,86 @@ import ( "fmt" "net" "os" + "path/filepath" "strings" "syscall" - "github.com/arduino/arduino-cli/commands/daemon" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" - srv_commands "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - srv_settings "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" - "github.com/arduino/arduino-cli/version" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "google.golang.org/grpc" ) -var ( - tr = i18n.Tr - daemonize bool - debug bool - debugFile string - debugFilters []string -) - // NewCommand created a new `daemon` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer, settings *rpc.Configuration) *cobra.Command { + var daemonize bool + var debug bool + var debugFile string + var debugFiltersArg []string + var daemonPort string + var maxGRPCRecvMsgSize int daemonCommand := &cobra.Command{ Use: "daemon", - Short: tr("Run as a daemon on port: %s", configuration.Settings.GetString("daemon.port")), - Long: tr("Running as a daemon the initialization of cores and libraries is done only once."), + Short: i18n.Tr("Run the Arduino CLI as a gRPC daemon."), Example: " " + os.Args[0] + " daemon", Args: cobra.NoArgs, - Run: runDaemonCommand, + PreRun: func(cmd *cobra.Command, args []string) { + // Bundled libraries support is enabled by default when running as a daemon + if settings.GetDirectories().GetBuiltin().GetLibraries() == "" { + defaultBuiltinLibDir := filepath.Join(settings.GetDirectories().GetData(), "libraries") + _, err := srv.SettingsSetValue(cmd.Context(), &rpc.SettingsSetValueRequest{ + Key: "directories.builtin.libraries", + ValueFormat: "cli", + EncodedValue: defaultBuiltinLibDir, + }) + if err != nil { + // Should never happen... + panic("Failed to set default value for directories.builtin.libraries: " + err.Error()) + } + } + + // Validate the maxGRPCRecvMsgSize flag + if maxGRPCRecvMsgSize < 1024 { + feedback.Fatal(i18n.Tr("%s must be >= 1024", "--max-grpc-recv-message-size"), feedback.ErrBadArgument) + } + }, + Run: func(cmd *cobra.Command, args []string) { + runDaemonCommand(srv, daemonPort, debugFile, debug, daemonize, debugFiltersArg, maxGRPCRecvMsgSize) + }, } - daemonCommand.PersistentFlags().String("port", "", tr("The TCP port the daemon will listen to")) - configuration.Settings.BindPFlag("daemon.port", daemonCommand.PersistentFlags().Lookup("port")) - daemonCommand.Flags().BoolVar(&daemonize, "daemonize", false, tr("Do not terminate daemon process if the parent process dies")) - daemonCommand.Flags().BoolVar(&debug, "debug", false, tr("Enable debug logging of gRPC calls")) - daemonCommand.Flags().StringVar(&debugFile, "debug-file", "", tr("Append debug logging to the specified file")) - daemonCommand.Flags().StringSliceVar(&debugFilters, "debug-filter", []string{}, tr("Display only the provided gRPC calls")) + defaultDaemonPort := settings.GetDaemon().GetPort() + + daemonCommand.Flags().StringVar(&daemonPort, + "port", defaultDaemonPort, + i18n.Tr("The TCP port the daemon will listen to")) + daemonCommand.Flags().BoolVar(&daemonize, + "daemonize", false, + i18n.Tr("Do not terminate daemon process if the parent process dies")) + daemonCommand.Flags().BoolVar(&debug, + "debug", false, + i18n.Tr("Enable debug logging of gRPC calls")) + daemonCommand.Flags().StringVar(&debugFile, + "debug-file", "", + i18n.Tr("Append debug logging to the specified file")) + daemonCommand.Flags().StringSliceVar(&debugFiltersArg, + "debug-filter", []string{}, + i18n.Tr("Display only the provided gRPC calls")) + daemonCommand.Flags().IntVar(&maxGRPCRecvMsgSize, + "max-grpc-recv-message-size", 16*1024*1024, + i18n.Tr("Sets the maximum message size in bytes the daemon can receive")) return daemonCommand } -func runDaemonCommand(cmd *cobra.Command, args []string) { +func runDaemonCommand(srv rpc.ArduinoCoreServiceServer, daemonPort, debugFile string, debug, daemonize bool, debugFiltersArg []string, maxGRPCRecvMsgSize int) { logrus.Info("Executing `arduino-cli daemon`") - // Bundled libraries support is enabled by default when running as a daemon - configuration.Settings.SetDefault("directories.builtin.Libraries", configuration.GetDefaultBuiltinLibrariesDir()) - - port := configuration.Settings.GetString("daemon.port") gRPCOptions := []grpc.ServerOption{} if debugFile != "" { if !debug { - feedback.Fatal(tr("The flag --debug-file must be used with --debug."), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("The flag --debug-file must be used with --debug."), feedback.ErrBadArgument) } } if debug { @@ -82,81 +108,76 @@ func runDaemonCommand(cmd *cobra.Command, args []string) { outFile := paths.New(debugFile) f, err := outFile.Append() if err != nil { - feedback.Fatal(tr("Error opening debug logging file: %s", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error opening debug logging file: %s", err), feedback.ErrGeneric) } defer f.Close() debugStdOut = f } else { if out, _, err := feedback.DirectStreams(); err != nil { - feedback.Fatal(tr("Can't write debug log: %s", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Can't write debug log: %s", err), feedback.ErrBadArgument) } else { debugStdOut = out } } + debugFilters = debugFiltersArg gRPCOptions = append(gRPCOptions, grpc.UnaryInterceptor(unaryLoggerInterceptor), grpc.StreamInterceptor(streamLoggerInterceptor), ) } + gRPCOptions = append(gRPCOptions, grpc.MaxRecvMsgSize(maxGRPCRecvMsgSize)) s := grpc.NewServer(gRPCOptions...) - // Set specific user-agent for the daemon - configuration.Settings.Set("network.user_agent_ext", "daemon") // register the commands service - srv_commands.RegisterArduinoCoreServiceServer(s, &daemon.ArduinoCoreServerImpl{ - VersionString: version.VersionInfo.VersionString, - }) - - // Register the settings service - srv_settings.RegisterSettingsServiceServer(s, &daemon.SettingsService{}) + rpc.RegisterArduinoCoreServiceServer(s, srv) if !daemonize { // When parent process ends terminate also the daemon go feedback.ExitWhenParentProcessEnds() } - ip := "127.0.0.1" - lis, err := net.Listen("tcp", fmt.Sprintf("%s:%s", ip, port)) + daemonIP := "127.0.0.1" + lis, err := net.Listen("tcp", fmt.Sprintf("%s:%s", daemonIP, daemonPort)) if err != nil { // Invalid port, such as "Foo" var dnsError *net.DNSError if errors.As(err, &dnsError) { - feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. %[2]s is unknown name.", port, dnsError.Name), feedback.ErrCoreConfig) + feedback.Fatal(i18n.Tr("Failed to listen on TCP port: %[1]s. %[2]s is unknown name.", daemonPort, dnsError.Name), feedback.ErrBadTCPPortArgument) } // Invalid port number, such as -1 var addrError *net.AddrError if errors.As(err, &addrError) { - feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. %[2]s is an invalid port.", port, addrError.Addr), feedback.ErrCoreConfig) + feedback.Fatal(i18n.Tr("Failed to listen on TCP port: %[1]s. %[2]s is an invalid port.", daemonPort, addrError.Addr), feedback.ErrBadTCPPortArgument) } // Port is already in use var syscallErr *os.SyscallError if errors.As(err, &syscallErr) && errors.Is(syscallErr.Err, syscall.EADDRINUSE) { - feedback.Fatal(tr("Failed to listen on TCP port: %s. Address already in use.", port), feedback.ErrNetwork) + feedback.Fatal(i18n.Tr("Failed to listen on TCP port: %s. Address already in use.", daemonPort), feedback.ErrFailedToListenToTCPPort) } - feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v", port, err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v", daemonPort, err), feedback.ErrFailedToListenToTCPPort) } - // We need to parse the port used only if the user let - // us choose it randomly, in all other cases we already - // know which is used. - if port == "0" { + // We need to retrieve the port used only if the user did not specify it + // and let the OS choose it randomly, in all other cases we already know + // which port is used. + if daemonPort == "0" { address := lis.Addr() split := strings.Split(address.String(), ":") - if len(split) == 0 { - feedback.Fatal(tr("Invalid TCP address: port is missing"), feedback.ErrBadArgument) + if len(split) <= 1 { + feedback.Fatal(i18n.Tr("Invalid TCP address: port is missing"), feedback.ErrBadTCPPortArgument) } - port = split[len(split)-1] + daemonPort = split[1] } feedback.PrintResult(daemonResult{ - IP: ip, - Port: port, + IP: daemonIP, + Port: daemonPort, }) if err := s.Serve(lis); err != nil { - logrus.Fatalf("Failed to serve: %v", err) + feedback.Fatal(fmt.Sprintf("Failed to serve: %v", err), feedback.ErrFailedToListenToTCPPort) } } @@ -171,5 +192,5 @@ func (r daemonResult) Data() interface{} { func (r daemonResult) String() string { j, _ := json.Marshal(r) - return fmt.Sprintln(tr("Daemon is now listening on %s:%s", r.IP, r.Port)) + fmt.Sprintln(string(j)) + return fmt.Sprintln(i18n.Tr("Daemon is now listening on %s:%s", r.IP, r.Port)) + fmt.Sprintln(string(j)) } diff --git a/internal/cli/daemon/interceptors.go b/internal/cli/daemon/interceptors.go index 0da2307b1aa..242d7610609 100644 --- a/internal/cli/daemon/interceptors.go +++ b/internal/cli/daemon/interceptors.go @@ -28,6 +28,7 @@ import ( var debugStdOut io.Writer var debugSeq uint32 +var debugFilters []string func log(isRequest bool, seq uint32, msg interface{}) { prefix := fmt.Sprint(seq, " | ") diff --git a/internal/cli/debug/debug.go b/internal/cli/debug/debug.go index 69d9ddd716c..a4cce1815e7 100644 --- a/internal/cli/debug/debug.go +++ b/internal/cli/debug/debug.go @@ -18,55 +18,68 @@ package debug import ( "context" "encoding/json" + "errors" "os" "os/signal" - "github.com/arduino/arduino-cli/commands/debug" - "github.com/arduino/arduino-cli/commands/sketch" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/fatih/color" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var ( - fqbnArg arguments.Fqbn - portArgs arguments.Port - interpreter string - importDir string - printInfo bool - programmer arguments.Programmer - tr = i18n.Tr -) - // NewCommand created a new `upload` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + var ( + fqbnArg arguments.Fqbn + portArgs arguments.Port + profileArg arguments.Profile + interpreter string + importDir string + printInfo bool + programmer arguments.Programmer + debugProperties []string + ) + debugCommand := &cobra.Command{ Use: "debug", - Short: tr("Debug Arduino sketches."), - Long: tr("Debug Arduino sketches. (this command opens an interactive gdb session)"), + Short: i18n.Tr("Debug Arduino sketches."), + Long: i18n.Tr("Debug Arduino sketches. (this command opens an interactive gdb session)"), Example: " " + os.Args[0] + " debug -b arduino:samd:mkr1000 -P atmel_ice /home/user/Arduino/MySketch", Args: cobra.MaximumNArgs(1), - Run: runDebugCommand, + PreRun: func(cmd *cobra.Command, args []string) { + arguments.CheckFlagsConflicts(cmd, "input-dir", "build-path") + }, + Run: func(cmd *cobra.Command, args []string) { + runDebugCommand(cmd.Context(), srv, args, &portArgs, &fqbnArg, interpreter, importDir, &programmer, printInfo, &profileArg, debugProperties) + }, } - fqbnArg.AddToCommand(debugCommand) - portArgs.AddToCommand(debugCommand) - programmer.AddToCommand(debugCommand) - debugCommand.Flags().StringVar(&interpreter, "interpreter", "console", tr("Debug interpreter e.g.: %s", "console, mi, mi1, mi2, mi3")) - debugCommand.Flags().StringVarP(&importDir, "input-dir", "", "", tr("Directory containing binaries for debug.")) - debugCommand.Flags().BoolVarP(&printInfo, "info", "I", false, tr("Show metadata about the debug session instead of starting the debugger.")) + debugCommand.AddCommand(newDebugCheckCommand(srv)) + fqbnArg.AddToCommand(debugCommand, srv) + portArgs.AddToCommand(debugCommand, srv) + programmer.AddToCommand(debugCommand, srv) + profileArg.AddToCommand(debugCommand, srv) + debugCommand.Flags().StringVar(&interpreter, "interpreter", "console", i18n.Tr("Debug interpreter e.g.: %s", "console, mi, mi1, mi2, mi3")) + debugCommand.Flags().StringVarP(&importDir, "build-path", "", "", i18n.Tr("Directory containing binaries for debug.")) + debugCommand.Flags().StringVarP(&importDir, "input-dir", "", "", i18n.Tr("Directory containing binaries for debug.")) + debugCommand.Flags().BoolVarP(&printInfo, "info", "I", false, i18n.Tr("Show metadata about the debug session instead of starting the debugger.")) + debugCommand.Flags().StringArrayVar(&debugProperties, "debug-property", []string{}, + i18n.Tr("Override an debug property with a custom value. Can be used multiple times for multiple properties.")) return debugCommand } -func runDebugCommand(command *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runDebugCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, portArgs *arguments.Port, fqbnArg *arguments.Fqbn, + interpreter string, importDir string, programmer *arguments.Programmer, printInfo bool, profileArg *arguments.Profile, + debugProperties []string) { logrus.Info("Executing `arduino-cli debug`") path := "" @@ -75,25 +88,55 @@ func runDebugCommand(command *cobra.Command, args []string) { } sketchPath := arguments.InitSketchPath(path) - sk, err := sketch.LoadSketch(context.Background(), &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) if err != nil { feedback.FatalError(err, feedback.ErrGeneric) } - fqbn, port := arguments.CalculateFQBNAndPort(&portArgs, &fqbnArg, instance, sk.GetDefaultFqbn(), sk.GetDefaultPort(), sk.GetDefaultProtocol()) + sk := resp.GetSketch() + feedback.WarnAboutDeprecatedFiles(sk) + + var inst *rpc.Instance + var profile *rpc.SketchProfile + + if profileArg.Get() == "" { + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, sk.GetDefaultProfile().GetName(), sketchPath) + } else { + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, profileArg.Get(), sketchPath) + } + + if fqbnArg.String() == "" { + fqbnArg.Set(profile.GetFqbn()) + } + + fqbn, port := arguments.CalculateFQBNAndPort(ctx, portArgs, fqbnArg, inst, srv, sk.GetDefaultFqbn(), sk.GetDefaultPort(), sk.GetDefaultProtocol(), profile) + + prog := profile.GetProgrammer() + if prog == "" || programmer.GetProgrammer() != "" { + prog = programmer.String(ctx, inst, srv, fqbn) + } + if prog == "" { + prog = sk.GetDefaultProgrammer() + } + debugConfigRequested := &rpc.GetDebugConfigRequest{ - Instance: instance, - Fqbn: fqbn, - SketchPath: sketchPath.String(), - Port: port, - Interpreter: interpreter, - ImportDir: importDir, - Programmer: programmer.String(), + Instance: inst, + Fqbn: fqbn, + SketchPath: sketchPath.String(), + Port: port, + Interpreter: interpreter, + ImportDir: importDir, + Programmer: prog, + DebugProperties: debugProperties, } if printInfo { - if res, err := debug.GetDebugConfig(context.Background(), debugConfigRequested); err != nil { - feedback.Fatal(tr("Error getting Debug info: %v", err), feedback.ErrBadArgument) + if res, err := srv.GetDebugConfig(ctx, debugConfigRequested); err != nil { + errcode := feedback.ErrBadArgument + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.Fatal(i18n.Tr("Error getting Debug info: %v", err), errcode) } else { feedback.PrintResult(newDebugInfoResult(res)) } @@ -108,24 +151,32 @@ func runDebugCommand(command *cobra.Command, args []string) { if err != nil { feedback.FatalError(err, feedback.ErrBadArgument) } - if _, err := debug.Debug(context.Background(), debugConfigRequested, in, out, ctrlc); err != nil { - feedback.Fatal(tr("Error during Debug: %v", err), feedback.ErrGeneric) + + resultCB := func(dr *rpc.DebugResponse_Result) {} + stream := commands.DebugServerToStreams(ctx, debugConfigRequested, in, out, ctrlc, resultCB) + if err := srv.Debug(stream); err != nil { + errcode := feedback.ErrGeneric + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.Fatal(i18n.Tr("Error during Debug: %v", err), errcode) } } } type debugInfoResult struct { - Executable string `json:"executable,omitempty"` - Toolchain string `json:"toolchain,omitempty"` - ToolchainPath string `json:"toolchain_path,omitempty"` - ToolchainPrefix string `json:"toolchain_prefix,omitempty"` - ToolchainConfig any `json:"toolchain_configuration,omitempty"` - Server string `json:"server,omitempty"` - ServerPath string `json:"server_path,omitempty"` - ServerConfig any `json:"server_configuration,omitempty"` - SvdFile string `json:"svd_file,omitempty"` - CortexDebugCustomConfig any `json:"cortex-debug_custom_configuration,omitempty"` + Executable string `json:"executable,omitempty"` + Toolchain string `json:"toolchain,omitempty"` + ToolchainPath string `json:"toolchain_path,omitempty"` + ToolchainPrefix string `json:"toolchain_prefix,omitempty"` + ToolchainConfig any `json:"toolchain_configuration,omitempty"` + Server string `json:"server,omitempty"` + ServerPath string `json:"server_path,omitempty"` + ServerConfig any `json:"server_configuration,omitempty"` + SvdFile string `json:"svd_file,omitempty"` + CustomConfigs map[string]any `json:"custom_configs,omitempty"` + Programmer string `json:"programmer"` } type openOcdServerConfigResult struct { @@ -137,35 +188,37 @@ type openOcdServerConfigResult struct { func newDebugInfoResult(info *rpc.GetDebugConfigResponse) *debugInfoResult { var toolchainConfig interface{} var serverConfig interface{} - switch info.Server { + switch info.GetServer() { case "openocd": var openocdConf rpc.DebugOpenOCDServerConfiguration if err := info.GetServerConfiguration().UnmarshalTo(&openocdConf); err != nil { - feedback.Fatal(tr("Error during Debug: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error during Debug: %v", err), feedback.ErrGeneric) } serverConfig = &openOcdServerConfigResult{ - Path: openocdConf.Path, - ScriptsDir: openocdConf.ScriptsDir, - Scripts: openocdConf.Scripts, + Path: openocdConf.GetPath(), + ScriptsDir: openocdConf.GetScriptsDir(), + Scripts: openocdConf.GetScripts(), } } - var cortexDebugCustomConfig any - if info.CortexDebugCustomJson != "" { - if err := json.Unmarshal([]byte(info.CortexDebugCustomJson), &cortexDebugCustomConfig); err != nil { - feedback.Fatal(tr("Error during Debug: %v", err), feedback.ErrGeneric) + customConfigs := map[string]any{} + for id, configJson := range info.GetCustomConfigs() { + var config any + if err := json.Unmarshal([]byte(configJson), &config); err == nil { + customConfigs[id] = config } } return &debugInfoResult{ - Executable: info.Executable, - Toolchain: info.Toolchain, - ToolchainPath: info.ToolchainPath, - ToolchainPrefix: info.ToolchainPrefix, - ToolchainConfig: toolchainConfig, - Server: info.Server, - ServerPath: info.ServerPath, - ServerConfig: serverConfig, - SvdFile: info.SvdFile, - CortexDebugCustomConfig: cortexDebugCustomConfig, + Executable: info.GetExecutable(), + Toolchain: info.GetToolchain(), + ToolchainPath: info.GetToolchainPath(), + ToolchainPrefix: info.GetToolchainPrefix(), + ToolchainConfig: toolchainConfig, + Server: info.GetServer(), + ServerPath: info.GetServerPath(), + ServerConfig: serverConfig, + SvdFile: info.GetSvdFile(), + CustomConfigs: customConfigs, + Programmer: info.GetProgrammer(), } } @@ -177,24 +230,24 @@ func (r *debugInfoResult) String() string { t := table.New() green := color.New(color.FgHiGreen) dimGreen := color.New(color.FgGreen) - t.AddRow(tr("Executable to debug"), table.NewCell(r.Executable, green)) - t.AddRow(tr("Toolchain type"), table.NewCell(r.Toolchain, green)) - t.AddRow(tr("Toolchain path"), table.NewCell(r.ToolchainPath, dimGreen)) - t.AddRow(tr("Toolchain prefix"), table.NewCell(r.ToolchainPrefix, dimGreen)) + t.AddRow(i18n.Tr("Executable to debug"), table.NewCell(r.Executable, green)) + t.AddRow(i18n.Tr("Toolchain type"), table.NewCell(r.Toolchain, green)) + t.AddRow(i18n.Tr("Toolchain path"), table.NewCell(r.ToolchainPath, dimGreen)) + t.AddRow(i18n.Tr("Toolchain prefix"), table.NewCell(r.ToolchainPrefix, dimGreen)) if r.SvdFile != "" { - t.AddRow(tr("SVD file path"), table.NewCell(r.SvdFile, dimGreen)) + t.AddRow(i18n.Tr("SVD file path"), table.NewCell(r.SvdFile, dimGreen)) } switch r.Toolchain { case "gcc": // no options available at the moment... default: } - t.AddRow(tr("Server type"), table.NewCell(r.Server, green)) - t.AddRow(tr("Server path"), table.NewCell(r.ServerPath, dimGreen)) + t.AddRow(i18n.Tr("Server type"), table.NewCell(r.Server, green)) + t.AddRow(i18n.Tr("Server path"), table.NewCell(r.ServerPath, dimGreen)) switch r.Server { case "openocd": - t.AddRow(tr("Configuration options for %s", r.Server)) + t.AddRow(i18n.Tr("Configuration options for %s", r.Server)) openocdConf := r.ServerConfig.(*openOcdServerConfigResult) if openocdConf.Path != "" { t.AddRow(" - Path", table.NewCell(openocdConf.Path, dimGreen)) @@ -207,10 +260,12 @@ func (r *debugInfoResult) String() string { } default: } - if r.CortexDebugCustomConfig != nil { - t.AddRow(tr("Custom configuration for cortex-debug IDE plugin:")) - data, _ := json.MarshalIndent(r.CortexDebugCustomConfig, " ", " ") - return t.Render() + " " + string(data) + if custom := r.CustomConfigs; custom != nil { + for id, config := range custom { + configJson, _ := json.MarshalIndent(config, "", " ") + t.AddRow(i18n.Tr("Custom configuration for %s:", id)) + return t.Render() + " " + string(configJson) + } } return t.Render() } diff --git a/internal/cli/debug/debug_check.go b/internal/cli/debug/debug_check.go new file mode 100644 index 00000000000..7061d6e5412 --- /dev/null +++ b/internal/cli/debug/debug_check.go @@ -0,0 +1,95 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package debug + +import ( + "context" + "os" + + "github.com/arduino/arduino-cli/internal/cli/arguments" + "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +func newDebugCheckCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + var ( + fqbnArg arguments.Fqbn + portArgs arguments.Port + interpreter string + programmer arguments.Programmer + debugProperties []string + ) + debugCheckCommand := &cobra.Command{ + Use: "check", + Short: i18n.Tr("Check if the given board/programmer combination supports debugging."), + Example: " " + os.Args[0] + " debug check -b arduino:samd:mkr1000 -P atmel_ice", + Run: func(cmd *cobra.Command, args []string) { + runDebugCheckCommand(cmd.Context(), srv, &portArgs, &fqbnArg, interpreter, &programmer, debugProperties) + }, + } + fqbnArg.AddToCommand(debugCheckCommand, srv) + portArgs.AddToCommand(debugCheckCommand, srv) + programmer.AddToCommand(debugCheckCommand, srv) + debugCheckCommand.Flags().StringVar(&interpreter, "interpreter", "console", i18n.Tr("Debug interpreter e.g.: %s", "console, mi, mi1, mi2, mi3")) + debugCheckCommand.Flags().StringArrayVar(&debugProperties, "debug-property", []string{}, + i18n.Tr("Override an debug property with a custom value. Can be used multiple times for multiple properties.")) + return debugCheckCommand +} + +func runDebugCheckCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, portArgs *arguments.Port, + fqbnArg *arguments.Fqbn, interpreter string, programmerArg *arguments.Programmer, debugProperties []string, +) { + instance := instance.CreateAndInit(ctx, srv) + logrus.Info("Executing `arduino-cli debug`") + + port, err := portArgs.GetPort(ctx, instance, srv, "", "", nil) + if err != nil { + feedback.FatalError(err, feedback.ErrBadArgument) + } + fqbn := fqbnArg.String() + resp, err := srv.IsDebugSupported(ctx, &rpc.IsDebugSupportedRequest{ + Instance: instance, + Fqbn: fqbn, + Port: port, + Interpreter: interpreter, + Programmer: programmerArg.String(ctx, instance, srv, fqbn), + DebugProperties: debugProperties, + }) + if err != nil { + feedback.FatalError(err, feedback.ErrGeneric) + } + feedback.PrintResult(&debugCheckResult{result.NewIsDebugSupportedResponse(resp)}) +} + +type debugCheckResult struct { + Result *result.IsDebugSupportedResponse +} + +func (d *debugCheckResult) Data() interface{} { + return d.Result +} + +func (d *debugCheckResult) String() string { + if d.Result.DebuggingSupported { + return i18n.Tr("The given board/programmer configuration supports debugging.") + } + return i18n.Tr("The given board/programmer configuration does NOT support debugging.") +} diff --git a/internal/cli/feedback/errorcodes.go b/internal/cli/feedback/errorcodes.go index 1e1a0edf19e..0f92ee07c73 100644 --- a/internal/cli/feedback/errorcodes.go +++ b/internal/cli/feedback/errorcodes.go @@ -42,4 +42,18 @@ const ( // ErrBadArgument is returned when the arguments are not valid (7) ErrBadArgument + + // ErrFailedToListenToTCPPort is returned if the CLI failed to open a TCP port + // to listen for incoming connections (8) + ErrFailedToListenToTCPPort + + // ErrBadTCPPortArgument is returned if the TCP port argument is not valid (9) + ErrBadTCPPortArgument + + // ErrInitializingInventory is returned when the inventory cannot be initialized, + // usually depends on a wrong configuration of the data dir (10) + ErrInitializingInventory + + // ErrMissingProgrammer is returned when the programmer argument is missing (11) + ErrMissingProgrammer ) diff --git a/internal/cli/feedback/feedback.go b/internal/cli/feedback/feedback.go index 17383e1ba3a..c6550d9bd01 100644 --- a/internal/cli/feedback/feedback.go +++ b/internal/cli/feedback/feedback.go @@ -24,9 +24,8 @@ import ( "io" "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/sirupsen/logrus" - "gopkg.in/yaml.v3" ) // OutputFormat is an output format @@ -39,14 +38,11 @@ const ( JSON // MinifiedJSON format MinifiedJSON - // YAML format - YAML ) var formats = map[string]OutputFormat{ "json": JSON, "jsonmini": MinifiedJSON, - "yaml": YAML, "text": Text, } @@ -88,8 +84,8 @@ func reset() { stdErr = os.Stderr feedbackOut = os.Stdout feedbackErr = os.Stderr - bufferOut = &bytes.Buffer{} - bufferErr = &bytes.Buffer{} + bufferOut = bytes.NewBuffer(nil) + bufferErr = bytes.NewBuffer(nil) bufferWarnings = nil format = Text formatSelected = false @@ -109,8 +105,6 @@ type ErrorResult interface { ErrorString() string } -var tr = i18n.Tr - // SetOut can be used to change the out writer at runtime func SetOut(out io.Writer) { if formatSelected { @@ -204,8 +198,6 @@ func Fatal(errorMsg string, exitCode ExitCode) { d, _ = json.MarshalIndent(augment(res), "", " ") case MinifiedJSON: d, _ = json.Marshal(augment(res)) - case YAML: - d, _ = yaml.Marshal(augment(res)) default: panic("unknown output format") } @@ -241,19 +233,13 @@ func PrintResult(res Result) { case JSON: d, err := json.MarshalIndent(augment(res.Data()), "", " ") if err != nil { - Fatal(tr("Error during JSON encoding of the output: %v", err), ErrGeneric) + Fatal(i18n.Tr("Error during JSON encoding of the output: %v", err), ErrGeneric) } data = string(d) case MinifiedJSON: d, err := json.Marshal(augment(res.Data())) if err != nil { - Fatal(tr("Error during JSON encoding of the output: %v", err), ErrGeneric) - } - data = string(d) - case YAML: - d, err := yaml.Marshal(augment(res.Data())) - if err != nil { - Fatal(tr("Error during YAML encoding of the output: %v", err), ErrGeneric) + Fatal(i18n.Tr("Error during JSON encoding of the output: %v", err), ErrGeneric) } data = string(d) case Text: diff --git a/internal/cli/feedback/result/rpc.go b/internal/cli/feedback/result/rpc.go new file mode 100644 index 00000000000..9798e59584a --- /dev/null +++ b/internal/cli/feedback/result/rpc.go @@ -0,0 +1,1124 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package result + +import ( + "cmp" + "fmt" + "slices" + + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/orderedmap" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "go.bug.st/f" + semver "go.bug.st/relaxed-semver" +) + +// NewPlatformSummary creates a new result.PlatformSummary from rpc.PlatformSummary +func NewPlatformSummary(in *rpc.PlatformSummary) *PlatformSummary { + if in == nil { + return nil + } + + releases := orderedmap.NewWithConversionFunc[*semver.Version, *PlatformRelease, string]((*semver.Version).String) + for k, v := range in.GetReleases() { + releases.Set(semver.MustParse(k), NewPlatformRelease(v)) + } + releases.SortKeys((*semver.Version).CompareTo) + + return &PlatformSummary{ + Id: in.GetMetadata().GetId(), + Maintainer: in.GetMetadata().GetMaintainer(), + Website: in.GetMetadata().GetWebsite(), + Email: in.GetMetadata().GetEmail(), + ManuallyInstalled: in.GetMetadata().GetManuallyInstalled(), + Deprecated: in.GetMetadata().GetDeprecated(), + Indexed: in.GetMetadata().GetIndexed(), + Releases: releases, + InstalledVersion: semver.MustParse(in.GetInstalledVersion()), + LatestVersion: semver.MustParse(in.GetLatestVersion()), + } +} + +// PlatformSummary maps a rpc.PlatformSummary +type PlatformSummary struct { + Id string `json:"id,omitempty"` + Maintainer string `json:"maintainer,omitempty"` + Website string `json:"website,omitempty"` + Email string `json:"email,omitempty"` + ManuallyInstalled bool `json:"manually_installed,omitempty"` + Deprecated bool `json:"deprecated,omitempty"` + Indexed bool `json:"indexed,omitempty"` + + Releases orderedmap.Map[*semver.Version, *PlatformRelease] `json:"releases,omitempty"` + + InstalledVersion *semver.Version `json:"installed_version,omitempty"` + LatestVersion *semver.Version `json:"latest_version,omitempty"` +} + +// GetLatestRelease returns the latest relase of this platform or nil if none available. +func (p *PlatformSummary) GetLatestRelease() *PlatformRelease { + return p.Releases.Get(p.LatestVersion) +} + +// GetInstalledRelease returns the installed relase of this platform or nil if none available. +func (p *PlatformSummary) GetInstalledRelease() *PlatformRelease { + return p.Releases.Get(p.InstalledVersion) +} + +// GetPlatformName compute the name of the platform based on the installed/available releases. +func (p *PlatformSummary) GetPlatformName() string { + var name string + if installed := p.GetInstalledRelease(); installed != nil { + name = installed.FormatName() + } + if name == "" { + if latest := p.GetLatestRelease(); latest != nil { + name = latest.FormatName() + } else { + keys := p.Releases.Keys() + name = p.Releases.Get(keys[len(keys)-1]).FormatName() + } + } + return name +} + +// NewPlatformRelease creates a new result.PlatformRelease from rpc.PlatformRelease +func NewPlatformRelease(in *rpc.PlatformRelease) *PlatformRelease { + if in == nil { + return nil + } + var boards []*Board + for _, board := range in.GetBoards() { + boards = append(boards, &Board{ + Name: board.GetName(), + Fqbn: board.GetFqbn(), + }) + } + var help *HelpResource + if in.GetHelp() != nil { + help = &HelpResource{ + Online: in.GetHelp().GetOnline(), + } + } + res := &PlatformRelease{ + Name: in.GetName(), + Version: in.GetVersion(), + Types: in.GetTypes(), + Installed: in.GetInstalled(), + Boards: boards, + Help: help, + MissingMetadata: in.GetMissingMetadata(), + Deprecated: in.GetDeprecated(), + Compatible: in.GetCompatible(), + } + return res +} + +// PlatformRelease maps a rpc.PlatformRelease +type PlatformRelease struct { + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` + Types []string `json:"types,omitempty"` + Installed bool `json:"installed,omitempty"` + Boards []*Board `json:"boards,omitempty"` + Help *HelpResource `json:"help,omitempty"` + MissingMetadata bool `json:"missing_metadata,omitempty"` + Deprecated bool `json:"deprecated,omitempty"` + Compatible bool `json:"compatible"` +} + +func (p *PlatformRelease) FormatName() string { + if p.Deprecated { + return fmt.Sprintf("[%s] %s", i18n.Tr("DEPRECATED"), p.Name) + } + return p.Name +} + +// Board maps a rpc.Board +type Board struct { + Name string `json:"name,omitempty"` + Fqbn string `json:"fqbn,omitempty"` +} + +// HelpResource maps a rpc.HelpResource +type HelpResource struct { + Online string `json:"online,omitempty"` +} + +type InstalledLibrary struct { + Library *Library `json:"library,omitempty"` + Release *LibraryRelease `json:"release,omitempty"` +} + +type LibraryLocation string + +const ( + LibraryLocationUser LibraryLocation = "user" + LibraryLocationIDEBuiltin LibraryLocation = "ide" + LibraryLocationPlatformBuiltin LibraryLocation = "platform" + LibraryLocationReferencedPlatformBuiltin LibraryLocation = "ref-platform" + LibraryLocationUnmanged LibraryLocation = "unmanaged" +) + +func NewLibraryLocation(r rpc.LibraryLocation) LibraryLocation { + switch r { + case rpc.LibraryLocation_LIBRARY_LOCATION_BUILTIN: + return LibraryLocationIDEBuiltin + case rpc.LibraryLocation_LIBRARY_LOCATION_PLATFORM_BUILTIN: + return LibraryLocationPlatformBuiltin + case rpc.LibraryLocation_LIBRARY_LOCATION_REFERENCED_PLATFORM_BUILTIN: + return LibraryLocationReferencedPlatformBuiltin + case rpc.LibraryLocation_LIBRARY_LOCATION_USER: + return LibraryLocationUser + case rpc.LibraryLocation_LIBRARY_LOCATION_UNMANAGED: + return LibraryLocationUnmanged + } + return LibraryLocationIDEBuiltin +} + +type LibraryLayout string + +const ( + LibraryLayoutFlat LibraryLayout = "flat" + LibraryLayoutRecursive LibraryLayout = "recursive" +) + +func NewLibraryLayout(r rpc.LibraryLayout) LibraryLayout { + switch r { + case rpc.LibraryLayout_LIBRARY_LAYOUT_FLAT: + return LibraryLayoutFlat + case rpc.LibraryLayout_LIBRARY_LAYOUT_RECURSIVE: + return LibraryLayoutRecursive + } + return LibraryLayoutFlat +} + +type Library struct { + Name string `json:"name,omitempty"` + Author string `json:"author,omitempty"` + Maintainer string `json:"maintainer,omitempty"` + Sentence string `json:"sentence,omitempty"` + Paragraph string `json:"paragraph,omitempty"` + Website string `json:"website,omitempty"` + Category string `json:"category,omitempty"` + Architectures []string `json:"architectures,omitempty"` + Types []string `json:"types,omitempty"` + InstallDir string `json:"install_dir,omitempty"` + SourceDir string `json:"source_dir,omitempty"` + UtilityDir string `json:"utility_dir,omitempty"` + ContainerPlatform string `json:"container_platform,omitempty"` + DotALinkage bool `json:"dot_a_linkage,omitempty"` + Precompiled bool `json:"precompiled,omitempty"` + LdFlags string `json:"ld_flags,omitempty"` + IsLegacy bool `json:"is_legacy,omitempty"` + Version string `json:"version,omitempty"` + License string `json:"license,omitempty"` + Properties orderedmap.Map[string, string] `json:"properties,omitempty"` + Location LibraryLocation `json:"location,omitempty"` + Layout LibraryLayout `json:"layout,omitempty"` + Examples []string `json:"examples,omitempty"` + ProvidesIncludes []string `json:"provides_includes,omitempty"` + CompatibleWith orderedmap.Map[string, bool] `json:"compatible_with,omitempty"` + InDevelopment bool `json:"in_development,omitempty"` +} + +func NewLibrary(l *rpc.Library) *Library { + if l == nil { + return nil + } + libraryPropsMap := orderedmap.New[string, string]() + for k, v := range l.GetProperties() { + libraryPropsMap.Set(k, v) + } + libraryPropsMap.SortStableKeys(cmp.Compare) + + libraryCompatibleWithMap := orderedmap.New[string, bool]() + for k, v := range l.GetCompatibleWith() { + libraryCompatibleWithMap.Set(k, v) + } + libraryCompatibleWithMap.SortStableKeys(cmp.Compare) + + return &Library{ + Name: l.GetName(), + Author: l.GetAuthor(), + Maintainer: l.GetMaintainer(), + Sentence: l.GetSentence(), + Paragraph: l.GetParagraph(), + Website: l.GetWebsite(), + Category: l.GetCategory(), + Architectures: l.GetArchitectures(), + Types: l.GetTypes(), + InstallDir: l.GetInstallDir(), + SourceDir: l.GetSourceDir(), + UtilityDir: l.GetUtilityDir(), + ContainerPlatform: l.GetContainerPlatform(), + DotALinkage: l.GetDotALinkage(), + Precompiled: l.GetPrecompiled(), + LdFlags: l.GetLdFlags(), + IsLegacy: l.GetIsLegacy(), + Version: l.GetVersion(), + License: l.GetLicense(), + Properties: libraryPropsMap, + Location: NewLibraryLocation(l.GetLocation()), + Layout: NewLibraryLayout(l.GetLayout()), + Examples: l.GetExamples(), + ProvidesIncludes: l.GetProvidesIncludes(), + CompatibleWith: libraryCompatibleWithMap, + InDevelopment: l.GetInDevelopment(), + } +} + +type LibraryRelease struct { + Author string `json:"author,omitempty"` + Version string `json:"version,omitempty"` + Maintainer string `json:"maintainer,omitempty"` + Sentence string `json:"sentence,omitempty"` + Paragraph string `json:"paragraph,omitempty"` + Website string `json:"website,omitempty"` + Category string `json:"category,omitempty"` + Architectures []string `json:"architectures,omitempty"` + Types []string `json:"types,omitempty"` + Resources *DownloadResource `json:"resources,omitempty"` + License string `json:"license,omitempty"` + ProvidesIncludes []string `json:"provides_includes,omitempty"` + Dependencies []*LibraryDependency `json:"dependencies,omitempty"` +} + +func NewLibraryRelease(l *rpc.LibraryRelease) *LibraryRelease { + if l == nil { + return nil + } + return &LibraryRelease{ + Author: l.GetAuthor(), + Version: l.GetVersion(), + Maintainer: l.GetMaintainer(), + Sentence: l.GetSentence(), + Paragraph: l.GetParagraph(), + Website: l.GetWebsite(), + Category: l.GetCategory(), + Architectures: l.GetArchitectures(), + Types: l.GetTypes(), + Resources: NewDownloadResource(l.GetResources()), + License: l.GetLicense(), + ProvidesIncludes: l.GetProvidesIncludes(), + Dependencies: NewLibraryDependencies(l.GetDependencies()), + } +} + +type DownloadResource struct { + Url string `json:"url,omitempty"` + ArchiveFilename string `json:"archive_filename,omitempty"` + Checksum string `json:"checksum,omitempty"` + Size int64 `json:"size,omitempty"` + CachePath string `json:"cache_path,omitempty"` +} + +type LibraryDependency struct { + Name string `json:"name,omitempty"` + VersionConstraint string `json:"version_constraint,omitempty"` +} + +func NewInstalledLibrary(l *rpc.InstalledLibrary) *InstalledLibrary { + return &InstalledLibrary{ + Library: NewLibrary(l.GetLibrary()), + Release: NewLibraryRelease(l.GetRelease()), + } +} + +func NewDownloadResource(r *rpc.DownloadResource) *DownloadResource { + if r == nil { + return nil + } + return &DownloadResource{ + Url: r.GetUrl(), + ArchiveFilename: r.GetArchiveFilename(), + Checksum: r.GetChecksum(), + Size: r.GetSize(), + CachePath: r.GetCachePath(), + } +} + +func NewLibraryDependencies(d []*rpc.LibraryDependency) []*LibraryDependency { + if d == nil { + return nil + } + result := make([]*LibraryDependency, len(d)) + for i, v := range d { + result[i] = NewLibraryDependency(v) + } + return result +} + +func NewLibraryDependency(d *rpc.LibraryDependency) *LibraryDependency { + if d == nil { + return nil + } + return &LibraryDependency{ + Name: d.GetName(), + VersionConstraint: d.GetVersionConstraint(), + } +} + +type Port struct { + Address string `json:"address,omitempty"` + Label string `json:"label,omitempty"` + Protocol string `json:"protocol,omitempty"` + ProtocolLabel string `json:"protocol_label,omitempty"` + Properties orderedmap.Map[string, string] `json:"properties,omitempty"` + HardwareId string `json:"hardware_id,omitempty"` +} + +func NewPort(p *rpc.Port) *Port { + if p == nil { + return nil + } + propertiesMap := orderedmap.New[string, string]() + for k, v := range p.GetProperties() { + propertiesMap.Set(k, v) + } + propertiesMap.SortStableKeys(cmp.Compare) + return &Port{ + Address: p.GetAddress(), + Label: p.GetLabel(), + Protocol: p.GetProtocol(), + ProtocolLabel: p.GetProtocolLabel(), + Properties: propertiesMap, + HardwareId: p.GetHardwareId(), + } +} + +type BoardDetailsResponse struct { + Fqbn string `json:"fqbn,omitempty"` + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` + PropertiesId string `json:"properties_id,omitempty"` + Alias string `json:"alias,omitempty"` + Official bool `json:"official,omitempty"` + Pinout string `json:"pinout,omitempty"` + Package *Package `json:"package,omitempty"` + Platform *BoardPlatform `json:"platform,omitempty"` + ToolsDependencies []*ToolsDependency `json:"tools_dependencies,omitempty"` + ConfigOptions []*ConfigOption `json:"config_options,omitempty"` + Programmers []*Programmer `json:"programmers,omitempty"` + IdentificationProperties []*BoardIdentificationProperties `json:"identification_properties,omitempty"` + BuildProperties []string `json:"build_properties,omitempty"` + DefaultProgrammerID string `json:"default_programmer_id,omitempty"` +} + +func NewBoardDetailsResponse(b *rpc.BoardDetailsResponse) *BoardDetailsResponse { + if b == nil { + return nil + } + buildProperties := b.GetBuildProperties() + slices.Sort(buildProperties) + return &BoardDetailsResponse{ + Fqbn: b.GetFqbn(), + Name: b.GetName(), + Version: b.GetVersion(), + PropertiesId: b.GetPropertiesId(), + Alias: b.GetAlias(), + Official: b.GetOfficial(), + Pinout: b.GetPinout(), + Package: NewPackage(b.GetPackage()), + Platform: NewBoardPlatform(b.GetPlatform()), + ToolsDependencies: NewToolsDependencies(b.GetToolsDependencies()), + ConfigOptions: NewConfigOptions(b.GetConfigOptions()), + Programmers: NewProgrammers(b.GetProgrammers()), + IdentificationProperties: NewBoardIdentificationProperties(b.GetIdentificationProperties()), + BuildProperties: buildProperties, + DefaultProgrammerID: b.GetDefaultProgrammerId(), + } +} + +type Package struct { + Maintainer string `json:"maintainer,omitempty"` + Url string `json:"url,omitempty"` + WebsiteUrl string `json:"website_url,omitempty"` + Email string `json:"email,omitempty"` + Name string `json:"name,omitempty"` + Help *Help `json:"help,omitempty"` +} + +func NewPackage(p *rpc.Package) *Package { + if p == nil { + return nil + } + return &Package{ + Maintainer: p.GetMaintainer(), + Url: p.GetUrl(), + WebsiteUrl: p.GetWebsiteUrl(), + Email: p.GetEmail(), + Name: p.GetName(), + Help: NewHelp(p.GetHelp()), + } +} + +type Help struct { + Online string `json:"online,omitempty"` +} + +func NewHelp(h *rpc.Help) *Help { + if h == nil { + return nil + } + return &Help{Online: h.GetOnline()} +} + +type BoardPlatform struct { + Architecture string `json:"architecture,omitempty"` + Category string `json:"category,omitempty"` + Url string `json:"url,omitempty"` + ArchiveFilename string `json:"archive_filename,omitempty"` + Checksum string `json:"checksum,omitempty"` + Size int64 `json:"size,omitempty"` + Name string `json:"name,omitempty"` +} + +func NewBoardPlatform(p *rpc.BoardPlatform) *BoardPlatform { + if p == nil { + return nil + } + return &BoardPlatform{ + Architecture: p.GetArchitecture(), + Category: p.GetCategory(), + Url: p.GetUrl(), + ArchiveFilename: p.GetArchiveFilename(), + Checksum: p.GetChecksum(), + Size: p.GetSize(), + Name: p.GetName(), + } +} + +type ToolsDependency struct { + Packager string `json:"packager,omitempty"` + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` + Systems []*System `json:"systems,omitempty"` +} + +func NewToolsDependencies(p []*rpc.ToolsDependencies) []*ToolsDependency { + if p == nil { + return nil + } + res := make([]*ToolsDependency, len(p)) + for i, v := range p { + res[i] = NewToolsDependency(v) + } + return res +} + +func NewToolsDependency(p *rpc.ToolsDependencies) *ToolsDependency { + if p == nil { + return nil + } + return &ToolsDependency{ + Packager: p.GetPackager(), + Name: p.GetName(), + Version: p.GetVersion(), + Systems: NewSystems(p.GetSystems()), + } +} + +type System struct { + Checksum string `json:"checksum,omitempty"` + Host string `json:"host,omitempty"` + ArchiveFilename string `json:"archive_filename,omitempty"` + Url string `json:"url,omitempty"` + Size int64 `json:"size,omitempty"` +} + +func NewSystems(p []*rpc.Systems) []*System { + if p == nil { + return nil + } + res := make([]*System, len(p)) + for i, v := range p { + res[i] = NewSystem(v) + } + return res +} + +func NewSystem(s *rpc.Systems) *System { + if s == nil { + return nil + } + return &System{ + Checksum: s.GetChecksum(), + Host: s.GetHost(), + ArchiveFilename: s.GetArchiveFilename(), + Url: s.GetUrl(), + Size: s.GetSize(), + } +} + +type ConfigOption struct { + Option string `json:"option,omitempty"` + OptionLabel string `json:"option_label,omitempty"` + Values []*ConfigValue `json:"values,omitempty"` +} + +func NewConfigOptions(c []*rpc.ConfigOption) []*ConfigOption { + if c == nil { + return nil + } + res := make([]*ConfigOption, len(c)) + for i, v := range c { + res[i] = NewConfigOption(v) + } + return res +} + +func NewConfigOption(o *rpc.ConfigOption) *ConfigOption { + if o == nil { + return nil + } + return &ConfigOption{ + Option: o.GetOption(), + OptionLabel: o.GetOptionLabel(), + Values: NewConfigValues(o.GetValues()), + } +} + +type ConfigValue struct { + Value string `json:"value,omitempty"` + ValueLabel string `json:"value_label,omitempty"` + Selected bool `json:"selected,omitempty"` +} + +func NewConfigValues(c []*rpc.ConfigValue) []*ConfigValue { + if c == nil { + return nil + } + res := make([]*ConfigValue, len(c)) + for i, v := range c { + res[i] = NewConfigValue(v) + } + return res +} + +func NewConfigValue(c *rpc.ConfigValue) *ConfigValue { + if c == nil { + return nil + } + return &ConfigValue{ + Value: c.GetValue(), + ValueLabel: c.GetValueLabel(), + Selected: c.GetSelected(), + } +} + +type Programmer struct { + Platform string `json:"platform,omitempty"` + Id string `json:"id,omitempty"` + Name string `json:"name,omitempty"` +} + +func NewProgrammers(c []*rpc.Programmer) []*Programmer { + if c == nil { + return nil + } + res := make([]*Programmer, len(c)) + for i, v := range c { + res[i] = NewProgrammer(v) + } + + slices.SortFunc(res, func(a, b *Programmer) int { + return cmp.Compare(a.Id, b.Id) + }) + return res +} + +func NewProgrammer(c *rpc.Programmer) *Programmer { + if c == nil { + return nil + } + return &Programmer{ + Platform: c.GetPlatform(), + Id: c.GetId(), + Name: c.GetName(), + } +} + +type BoardIdentificationProperties struct { + Properties orderedmap.Map[string, string] `json:"properties,omitempty"` +} + +func NewBoardIdentificationProperties(p []*rpc.BoardIdentificationProperties) []*BoardIdentificationProperties { + if p == nil { + return nil + } + res := make([]*BoardIdentificationProperties, len(p)) + for i, v := range p { + res[i] = NewBoardIndentificationProperty(v) + } + return res +} + +func NewBoardIndentificationProperty(p *rpc.BoardIdentificationProperties) *BoardIdentificationProperties { + if p == nil { + return nil + } + propertiesMap := orderedmap.New[string, string]() + for k, v := range p.GetProperties() { + propertiesMap.Set(k, v) + } + propertiesMap.SortStableKeys(cmp.Compare) + + return &BoardIdentificationProperties{Properties: propertiesMap} +} + +type BoardListAllResponse struct { + Boards []*BoardListItem `json:"boards,omitempty"` +} + +func NewBoardListAllResponse(p *rpc.BoardListAllResponse) *BoardListAllResponse { + if p == nil { + return nil + } + boards := make([]*BoardListItem, len(p.GetBoards())) + for i, v := range p.GetBoards() { + boards[i] = NewBoardListItem(v) + } + return &BoardListAllResponse{Boards: boards} +} + +type BoardListItem struct { + Name string `json:"name,omitempty"` + Fqbn string `json:"fqbn,omitempty"` + IsHidden bool `json:"is_hidden,omitempty"` + Platform *Platform `json:"platform,omitempty"` +} + +func NewBoardListItems(b []*rpc.BoardListItem) []*BoardListItem { + if b == nil { + return nil + } + res := make([]*BoardListItem, len(b)) + for i, v := range b { + res[i] = NewBoardListItem(v) + } + return res +} + +func NewBoardListItem(b *rpc.BoardListItem) *BoardListItem { + if b == nil { + return nil + } + return &BoardListItem{ + Name: b.GetName(), + Fqbn: b.GetFqbn(), + IsHidden: b.GetIsHidden(), + Platform: NewPlatform(b.GetPlatform()), + } +} + +type Platform struct { + Metadata *PlatformMetadata `json:"metadata,omitempty"` + Release *PlatformRelease `json:"release,omitempty"` +} + +func NewPlatform(p *rpc.Platform) *Platform { + if p == nil { + return nil + } + return &Platform{ + Metadata: NewPlatformMetadata(p.GetMetadata()), + Release: NewPlatformRelease(p.GetRelease()), + } +} + +type PlatformMetadata struct { + Id string `json:"id,omitempty"` + Maintainer string `json:"maintainer,omitempty"` + Website string `json:"website,omitempty"` + Email string `json:"email,omitempty"` + ManuallyInstalled bool `json:"manually_installed,omitempty"` + Deprecated bool `json:"deprecated,omitempty"` + Indexed bool `json:"indexed,omitempty"` +} + +func NewPlatformMetadata(p *rpc.PlatformMetadata) *PlatformMetadata { + if p == nil { + return nil + } + return &PlatformMetadata{ + Id: p.GetId(), + Maintainer: p.GetMaintainer(), + Website: p.GetWebsite(), + Email: p.GetEmail(), + ManuallyInstalled: p.GetManuallyInstalled(), + Deprecated: p.GetDeprecated(), + Indexed: p.GetIndexed(), + } +} + +type DetectedPort struct { + MatchingBoards []*BoardListItem `json:"matching_boards,omitempty"` + Port *Port `json:"port,omitempty"` +} + +func NewDetectedPorts(p []*rpc.DetectedPort) []*DetectedPort { + if p == nil { + return nil + } + res := make([]*DetectedPort, len(p)) + for i, v := range p { + res[i] = NewDetectedPort(v) + } + return res +} + +func NewDetectedPort(p *rpc.DetectedPort) *DetectedPort { + if p == nil { + return nil + } + return &DetectedPort{ + MatchingBoards: NewBoardListItems(p.GetMatchingBoards()), + Port: NewPort(p.GetPort()), + } +} + +type LibraryResolveDependenciesResponse struct { + Dependencies []*LibraryDependencyStatus `json:"dependencies,omitempty"` +} + +func NewLibraryResolveDependenciesResponse(l *rpc.LibraryResolveDependenciesResponse) *LibraryResolveDependenciesResponse { + if l == nil { + return nil + } + dependencies := make([]*LibraryDependencyStatus, len(l.GetDependencies())) + for i, v := range l.GetDependencies() { + dependencies[i] = NewLibraryDependencyStatus(v) + } + return &LibraryResolveDependenciesResponse{Dependencies: dependencies} +} + +type LibraryDependencyStatus struct { + Name string `json:"name,omitempty"` + VersionRequired string `json:"version_required,omitempty"` + VersionInstalled string `json:"version_installed,omitempty"` +} + +func NewLibraryDependencyStatus(l *rpc.LibraryDependencyStatus) *LibraryDependencyStatus { + if l == nil { + return nil + } + return &LibraryDependencyStatus{ + Name: l.GetName(), + VersionRequired: l.GetVersionRequired(), + VersionInstalled: l.GetVersionInstalled(), + } +} + +type LibrarySearchStatus string + +const ( + LibrarySearchStatusFailed LibrarySearchStatus = "failed" + LibrarySearchStatusSuccess LibrarySearchStatus = "success" +) + +func NewLibrarySearchStatus(r rpc.LibrarySearchStatus) LibrarySearchStatus { + switch r { + case rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_FAILED: + return LibrarySearchStatusFailed + case rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS: + return LibrarySearchStatusSuccess + } + return LibrarySearchStatusFailed +} + +type LibrarySearchResponse struct { + Libraries []*SearchedLibrary `json:"libraries,omitempty"` + Status LibrarySearchStatus `json:"status,omitempty"` +} + +func NewLibrarySearchResponse(l *rpc.LibrarySearchResponse) *LibrarySearchResponse { + if l == nil { + return nil + } + + searchedLibraries := make([]*SearchedLibrary, len(l.GetLibraries())) + for i, v := range l.GetLibraries() { + searchedLibraries[i] = NewSearchedLibrary(v) + } + + return &LibrarySearchResponse{ + Libraries: searchedLibraries, + Status: NewLibrarySearchStatus(l.GetStatus()), + } +} + +type SearchedLibrary struct { + Name string `json:"name,omitempty"` + Releases orderedmap.Map[*semver.Version, *LibraryRelease] `json:"releases,omitempty"` + Latest *LibraryRelease `json:"latest,omitempty"` + AvailableVersions []string `json:"available_versions,omitempty"` +} + +func NewSearchedLibrary(l *rpc.SearchedLibrary) *SearchedLibrary { + if l == nil { + return nil + } + releasesMap := orderedmap.NewWithConversionFunc[*semver.Version, *LibraryRelease, string]((*semver.Version).String) + for k, v := range l.GetReleases() { + releasesMap.Set(semver.MustParse(k), NewLibraryRelease(v)) + } + releasesMap.SortKeys((*semver.Version).CompareTo) + return &SearchedLibrary{ + Name: l.GetName(), + Releases: releasesMap, + Latest: NewLibraryRelease(l.GetLatest()), + AvailableVersions: l.GetAvailableVersions(), + } +} + +type MonitorPortSettingDescriptor struct { + SettingId string `json:"setting_id,omitempty"` + Label string `json:"label,omitempty"` + Type string `json:"type,omitempty"` + EnumValues []string `json:"enum_values,omitempty"` + Value string `json:"value,omitempty"` +} + +func NewMonitorPortSettingDescriptor(m *rpc.MonitorPortSettingDescriptor) *MonitorPortSettingDescriptor { + if m == nil { + return nil + } + return &MonitorPortSettingDescriptor{ + SettingId: m.GetSettingId(), + Label: m.GetLabel(), + Type: m.GetType(), + EnumValues: m.GetEnumValues(), + Value: m.GetValue(), + } +} + +type BuilderResult struct { + BuildPath string `json:"build_path,omitempty"` + UsedLibraries []*Library `json:"used_libraries,omitempty"` + ExecutableSectionsSize []*ExecutableSectionSize `json:"executable_sections_size,omitempty"` + BoardPlatform *InstalledPlatformReference `json:"board_platform,omitempty"` + BuildPlatform *InstalledPlatformReference `json:"build_platform,omitempty"` + BuildProperties []string `json:"build_properties,omitempty"` + Diagnostics []*CompileDiagnostic `json:"diagnostics,omitempty"` +} + +func NewBuilderResult(c *rpc.BuilderResult) *BuilderResult { + if c == nil { + return nil + } + usedLibs := make([]*Library, len(c.GetUsedLibraries())) + for i, v := range c.GetUsedLibraries() { + usedLibs[i] = NewLibrary(v) + } + executableSectionsSizes := make([]*ExecutableSectionSize, len(c.GetExecutableSectionsSize())) + for i, v := range c.GetExecutableSectionsSize() { + executableSectionsSizes[i] = NewExecutableSectionSize(v) + } + + return &BuilderResult{ + BuildPath: c.GetBuildPath(), + UsedLibraries: usedLibs, + ExecutableSectionsSize: executableSectionsSizes, + BoardPlatform: NewInstalledPlatformReference(c.GetBoardPlatform()), + BuildPlatform: NewInstalledPlatformReference(c.GetBuildPlatform()), + BuildProperties: c.GetBuildProperties(), + Diagnostics: NewCompileDiagnostics(c.GetDiagnostics()), + } +} + +type ExecutableSectionSize struct { + Name string `json:"name,omitempty"` + Size int64 `json:"size,omitempty"` + MaxSize int64 `json:"max_size,omitempty"` +} + +func NewExecutableSectionSize(s *rpc.ExecutableSectionSize) *ExecutableSectionSize { + if s == nil { + return nil + } + return &ExecutableSectionSize{ + Name: s.GetName(), + Size: s.GetSize(), + MaxSize: s.GetMaxSize(), + } +} + +type InstalledPlatformReference struct { + Id string `json:"id,omitempty"` + Version string `json:"version,omitempty"` + InstallDir string `json:"install_dir,omitempty"` + PackageUrl string `json:"package_url,omitempty"` +} + +func NewInstalledPlatformReference(r *rpc.InstalledPlatformReference) *InstalledPlatformReference { + if r == nil { + return nil + } + return &InstalledPlatformReference{ + Id: r.GetId(), + Version: r.GetVersion(), + InstallDir: r.GetInstallDir(), + PackageUrl: r.GetPackageUrl(), + } +} + +type BoardListWatchResponse struct { + EventType string `json:"event_type,omitempty"` + Port *DetectedPort `json:"port,omitempty"` + Error string `json:"error,omitempty"` +} + +func NewBoardListWatchResponse(r *rpc.BoardListWatchResponse) *BoardListWatchResponse { + if r == nil { + return nil + } + return &BoardListWatchResponse{ + EventType: r.GetEventType(), + Port: NewDetectedPort(r.GetPort()), + Error: r.GetError(), + } +} + +type CompileDiagnostic struct { + Severity string `json:"severity,omitempty"` + Message string `json:"message,omitempty"` + File string `json:"file,omitempty"` + Line int64 `json:"line,omitempty"` + Column int64 `json:"column,omitempty"` + Context []*CompileDiagnosticContext `json:"context,omitempty"` + Notes []*CompileDiagnosticNote `json:"notes,omitempty"` +} + +func NewCompileDiagnostics(cd []*rpc.CompileDiagnostic) []*CompileDiagnostic { + return f.Map(cd, NewCompileDiagnostic) +} + +func NewCompileDiagnostic(cd *rpc.CompileDiagnostic) *CompileDiagnostic { + return &CompileDiagnostic{ + Severity: cd.GetSeverity(), + Message: cd.GetMessage(), + File: cd.GetFile(), + Line: cd.GetLine(), + Column: cd.GetColumn(), + Context: f.Map(cd.GetContext(), NewCompileDiagnosticContext), + Notes: f.Map(cd.GetNotes(), NewCompileDiagnosticNote), + } +} + +type CompileDiagnosticContext struct { + Message string `json:"message,omitempty"` + File string `json:"file,omitempty"` + Line int64 `json:"line,omitempty"` + Column int64 `json:"column,omitempty"` +} + +func NewCompileDiagnosticContext(cdc *rpc.CompileDiagnosticContext) *CompileDiagnosticContext { + return &CompileDiagnosticContext{ + Message: cdc.GetMessage(), + File: cdc.GetFile(), + Line: cdc.GetLine(), + Column: cdc.GetColumn(), + } +} + +type CompileDiagnosticNote struct { + Message string `json:"message,omitempty"` + File string `json:"file,omitempty"` + Line int64 `json:"line,omitempty"` + Column int64 `json:"column,omitempty"` +} + +func NewCompileDiagnosticNote(cdn *rpc.CompileDiagnosticNote) *CompileDiagnosticNote { + return &CompileDiagnosticNote{ + Message: cdn.GetMessage(), + File: cdn.GetFile(), + Line: cdn.GetLine(), + Column: cdn.GetColumn(), + } +} + +type IsDebugSupportedResponse struct { + DebuggingSupported bool `json:"debugging_supported"` + DebugFQBN string `json:"debug_fqbn,omitempty"` +} + +func NewIsDebugSupportedResponse(resp *rpc.IsDebugSupportedResponse) *IsDebugSupportedResponse { + return &IsDebugSupportedResponse{ + DebuggingSupported: resp.GetDebuggingSupported(), + DebugFQBN: resp.GetDebugFqbn(), + } +} + +type UpdateIndexResponse_ResultResult struct { + UpdatedIndexes []*IndexUpdateReportResult `json:"updated_indexes,omitempty"` +} + +func NewUpdateIndexResponse_ResultResult(resp *rpc.UpdateIndexResponse_Result) *UpdateIndexResponse_ResultResult { + return &UpdateIndexResponse_ResultResult{ + UpdatedIndexes: f.Map(resp.GetUpdatedIndexes(), NewIndexUpdateReportResult), + } +} + +type UpdateLibrariesIndexResponse_ResultResult struct { + LibrariesIndex *IndexUpdateReportResult `json:"libraries_index"` +} + +func NewUpdateLibrariesIndexResponse_ResultResult(resp *rpc.UpdateLibrariesIndexResponse_Result) *UpdateLibrariesIndexResponse_ResultResult { + return &UpdateLibrariesIndexResponse_ResultResult{ + LibrariesIndex: NewIndexUpdateReportResult(resp.GetLibrariesIndex()), + } +} + +type IndexUpdateReportResult struct { + IndexURL string `json:"index_url"` + Status IndexUpdateReport_Status `json:"status"` +} + +func NewIndexUpdateReportResult(resp *rpc.IndexUpdateReport) *IndexUpdateReportResult { + return &IndexUpdateReportResult{ + IndexURL: resp.GetIndexUrl(), + Status: NewIndexUpdateReport_Status(resp.GetStatus()), + } +} + +type IndexUpdateReport_Status string + +const ( + IndexUpdateReport_StatusUnspecified IndexUpdateReport_Status = "unspecified" + IndexUpdateReport_StatusAlreadyUpToDate IndexUpdateReport_Status = "already-up-to-date" + IndexUpdateReport_StatusFailed IndexUpdateReport_Status = "failed" + IndexUpdateReport_StatusSkipped IndexUpdateReport_Status = "skipped" + IndexUpdateReport_StatusUpdated IndexUpdateReport_Status = "updated" +) + +func NewIndexUpdateReport_Status(r rpc.IndexUpdateReport_Status) IndexUpdateReport_Status { + switch r { + case rpc.IndexUpdateReport_STATUS_UNSPECIFIED: + return IndexUpdateReport_StatusUnspecified + case rpc.IndexUpdateReport_STATUS_UPDATED: + return IndexUpdateReport_StatusUpdated + case rpc.IndexUpdateReport_STATUS_ALREADY_UP_TO_DATE: + return IndexUpdateReport_StatusAlreadyUpToDate + case rpc.IndexUpdateReport_STATUS_FAILED: + return IndexUpdateReport_StatusFailed + case rpc.IndexUpdateReport_STATUS_SKIPPED: + return IndexUpdateReport_StatusSkipped + default: + return IndexUpdateReport_StatusUnspecified + } +} diff --git a/internal/cli/feedback/result/rpc_test.go b/internal/cli/feedback/result/rpc_test.go new file mode 100644 index 00000000000..f0158912c7f --- /dev/null +++ b/internal/cli/feedback/result/rpc_test.go @@ -0,0 +1,286 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package result_test + +import ( + "reflect" + "slices" + "strings" + "testing" + + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/stretchr/testify/require" +) + +func getStructJsonTags(t *testing.T, a any) []string { + tags := []string{} + rt := reflect.TypeOf(a) + if rt.Kind() != reflect.Struct { + rt = rt.Elem() + require.Equal(t, reflect.Struct, rt.Kind()) + } + for i := 0; i < rt.NumField(); i++ { + tag := rt.Field(i).Tag.Get("json") + if tag == "" { + continue + } + key, _, _ := strings.Cut(tag, ",") + tags = append(tags, key) + } + return tags +} + +func mustContainsAllPropertyOfRpcStruct(t *testing.T, a, b any, excludeFields ...string) { + // must not be the same pointer, a and b struct must be of different type + require.NotSame(t, a, b) + rta, rtb := reflect.TypeOf(a), reflect.TypeOf(b) + if rta.Kind() != reflect.Struct { + rta = rta.Elem() + require.Equal(t, reflect.Struct, rta.Kind()) + } + if rtb.Kind() != reflect.Struct { + rtb = rtb.Elem() + require.Equal(t, reflect.Struct, rtb.Kind()) + } + require.NotEqual(t, rta.String(), rtb.String()) + + aTags := getStructJsonTags(t, a) + bTags := getStructJsonTags(t, b) + if len(excludeFields) > 0 { + aTags = slices.DeleteFunc(aTags, func(s string) bool { return slices.Contains(excludeFields, s) }) + bTags = slices.DeleteFunc(bTags, func(s string) bool { return slices.Contains(excludeFields, s) }) + } + require.ElementsMatch(t, aTags, bTags) +} + +func TestAllFieldAreMapped(t *testing.T) { + // Our PlatformSummary expands the PlatformMetadata without the need to nest it as the rpc does. + platformSummaryRpc := &rpc.PlatformSummary{ + InstalledVersion: "1.0.0", + LatestVersion: "1.0.0", + } + platformSummaryRpcTags := getStructJsonTags(t, platformSummaryRpc) + platformSummaryRpcTags = append(platformSummaryRpcTags, getStructJsonTags(t, platformSummaryRpc.GetMetadata())...) + platformSummaryRpcTags = slices.DeleteFunc(platformSummaryRpcTags, func(s string) bool { return s == "metadata" }) + + platformSummaryResult := result.NewPlatformSummary(platformSummaryRpc) + platformSummaryResultTags := getStructJsonTags(t, platformSummaryResult) + + require.ElementsMatch(t, platformSummaryRpcTags, platformSummaryResultTags) + + platformRelease := &rpc.PlatformRelease{} + platformReleaseResult := result.NewPlatformRelease(platformRelease) + mustContainsAllPropertyOfRpcStruct(t, platformRelease, platformReleaseResult) + + libraryRpc := &rpc.Library{} + libraryResult := result.NewLibrary(libraryRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryRpc, libraryResult) + + libraryReleaseRpc := &rpc.LibraryRelease{} + libraryReleaseResult := result.NewLibraryRelease(libraryReleaseRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryReleaseRpc, libraryReleaseResult) + + installedLibrary := &rpc.InstalledLibrary{} + installedLibraryResult := result.NewInstalledLibrary(installedLibrary) + mustContainsAllPropertyOfRpcStruct(t, installedLibrary, installedLibraryResult) + + downloadResource := &rpc.DownloadResource{} + downloadResourceResult := result.NewDownloadResource(downloadResource) + mustContainsAllPropertyOfRpcStruct(t, downloadResource, downloadResourceResult) + + libraryDependencyRpc := &rpc.LibraryDependency{} + libraryDependencyResult := result.NewLibraryDependency(libraryDependencyRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryDependencyRpc, libraryDependencyResult) + + portRpc := &rpc.Port{} + portResult := result.NewPort(portRpc) + mustContainsAllPropertyOfRpcStruct(t, portRpc, portResult) + + boardDetailsResponseRpc := &rpc.BoardDetailsResponse{} + boardDetailsResponseResult := result.NewBoardDetailsResponse(boardDetailsResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, boardDetailsResponseRpc, boardDetailsResponseResult) + + packageRpc := &rpc.Package{} + packageResult := result.NewPackage(packageRpc) + mustContainsAllPropertyOfRpcStruct(t, packageRpc, packageResult) + + helpRpc := &rpc.Help{} + helpResult := result.NewHelp(helpRpc) + mustContainsAllPropertyOfRpcStruct(t, helpRpc, helpResult) + + boardPlatformRpc := &rpc.BoardPlatform{} + boardPlatformResult := result.NewBoardPlatform(boardPlatformRpc) + mustContainsAllPropertyOfRpcStruct(t, boardPlatformRpc, boardPlatformResult) + + toolsDependencyRpc := &rpc.ToolsDependencies{} + toolsDependencyResult := result.NewToolsDependency(toolsDependencyRpc) + mustContainsAllPropertyOfRpcStruct(t, toolsDependencyRpc, toolsDependencyResult) + + systemRpc := &rpc.Systems{} + systemResult := result.NewSystem(systemRpc) + mustContainsAllPropertyOfRpcStruct(t, systemRpc, systemResult) + + configOptionRpc := &rpc.ConfigOption{} + configOptionResult := result.NewConfigOption(configOptionRpc) + mustContainsAllPropertyOfRpcStruct(t, configOptionRpc, configOptionResult) + + configValueRpc := &rpc.ConfigValue{} + configValueResult := result.NewConfigValue(configValueRpc) + mustContainsAllPropertyOfRpcStruct(t, configValueRpc, configValueResult) + + programmerRpc := &rpc.Programmer{} + programmerResult := result.NewProgrammer(programmerRpc) + mustContainsAllPropertyOfRpcStruct(t, programmerRpc, programmerResult) + + boardIdentificationPropertiesRpc := &rpc.BoardIdentificationProperties{} + boardIdentificationPropertiesResult := result.NewBoardIndentificationProperty(boardIdentificationPropertiesRpc) + mustContainsAllPropertyOfRpcStruct(t, boardIdentificationPropertiesRpc, boardIdentificationPropertiesResult) + + boardListAllResponseRpc := &rpc.BoardListAllResponse{} + boardListAllResponseResult := result.NewBoardListAllResponse(boardListAllResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, boardListAllResponseRpc, boardListAllResponseResult) + + boardListItemRpc := &rpc.BoardListItem{} + boardListItemResult := result.NewBoardListItem(boardListItemRpc) + mustContainsAllPropertyOfRpcStruct(t, boardListItemRpc, boardListItemResult) + + platformRpc := &rpc.Platform{} + platformResult := result.NewPlatform(platformRpc) + mustContainsAllPropertyOfRpcStruct(t, platformRpc, platformResult) + + platformMetadataRpc := &rpc.PlatformMetadata{} + platformMetadataResult := result.NewPlatformMetadata(platformMetadataRpc) + mustContainsAllPropertyOfRpcStruct(t, platformMetadataRpc, platformMetadataResult) + + detectedPortRpc := &rpc.DetectedPort{} + detectedPortResult := result.NewDetectedPort(detectedPortRpc) + mustContainsAllPropertyOfRpcStruct(t, detectedPortRpc, detectedPortResult) + + libraryResolveDependenciesResponseRpc := &rpc.LibraryResolveDependenciesResponse{} + libraryResolveDependenciesResponseResult := result.NewLibraryResolveDependenciesResponse(libraryResolveDependenciesResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryResolveDependenciesResponseRpc, libraryResolveDependenciesResponseResult) + + libraryDependencyStatusRpc := &rpc.LibraryDependencyStatus{} + libraryDependencyStatusResult := result.NewLibraryDependencyStatus(libraryDependencyStatusRpc) + mustContainsAllPropertyOfRpcStruct(t, libraryDependencyStatusRpc, libraryDependencyStatusResult) + + librarySearchResponseRpc := &rpc.LibrarySearchResponse{} + librarySearchResponseResult := result.NewLibrarySearchResponse(librarySearchResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, librarySearchResponseRpc, librarySearchResponseResult) + + searchedLibraryRpc := &rpc.SearchedLibrary{} + searchedLibraryResult := result.NewSearchedLibrary(searchedLibraryRpc) + mustContainsAllPropertyOfRpcStruct(t, searchedLibraryRpc, searchedLibraryResult) + + monitorPortSettingDescriptorRpc := &rpc.MonitorPortSettingDescriptor{} + monitorPortSettingDescriptorResult := result.NewMonitorPortSettingDescriptor(monitorPortSettingDescriptorRpc) + mustContainsAllPropertyOfRpcStruct(t, monitorPortSettingDescriptorRpc, monitorPortSettingDescriptorResult) + + builderResultRpc := &rpc.BuilderResult{} + builderResultResult := result.NewBuilderResult(builderResultRpc) + mustContainsAllPropertyOfRpcStruct(t, builderResultRpc, builderResultResult) + + executableSectionSizeRpc := &rpc.ExecutableSectionSize{} + executableSectionSizeResult := result.NewExecutableSectionSize(executableSectionSizeRpc) + mustContainsAllPropertyOfRpcStruct(t, executableSectionSizeRpc, executableSectionSizeResult) + + installedPlatformReferenceRpc := &rpc.InstalledPlatformReference{} + installedPlatformReferenceResult := result.NewInstalledPlatformReference(installedPlatformReferenceRpc) + mustContainsAllPropertyOfRpcStruct(t, installedPlatformReferenceRpc, installedPlatformReferenceResult) + + boardListWatchResponseRpc := &rpc.BoardListWatchResponse{} + boardListWatchResponseResult := result.NewBoardListWatchResponse(boardListWatchResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, boardListWatchResponseRpc, boardListWatchResponseResult) + + compileDiagnosticRpc := &rpc.CompileDiagnostic{} + compileDiagnosticResult := result.NewCompileDiagnostic(compileDiagnosticRpc) + mustContainsAllPropertyOfRpcStruct(t, compileDiagnosticRpc, compileDiagnosticResult) + + compileDiagnosticContextRpc := &rpc.CompileDiagnosticContext{} + compileDiagnosticContextResult := result.NewCompileDiagnosticContext(compileDiagnosticContextRpc) + mustContainsAllPropertyOfRpcStruct(t, compileDiagnosticContextRpc, compileDiagnosticContextResult) + + compileDiagnosticNoteRpc := &rpc.CompileDiagnosticNote{} + compileDiagnosticNoteResult := result.NewCompileDiagnosticNote(compileDiagnosticNoteRpc) + mustContainsAllPropertyOfRpcStruct(t, compileDiagnosticNoteRpc, compileDiagnosticNoteResult) + + isDebugSupportedResponseRpc := &rpc.IsDebugSupportedResponse{} + isDebugSupportedResponseResult := result.NewIsDebugSupportedResponse(isDebugSupportedResponseRpc) + mustContainsAllPropertyOfRpcStruct(t, isDebugSupportedResponseRpc, isDebugSupportedResponseResult) + + updateIndexResponse_ResultRpc := &rpc.UpdateIndexResponse_Result{} + updateIndexResponse_ResultResult := result.NewUpdateIndexResponse_ResultResult(updateIndexResponse_ResultRpc) + mustContainsAllPropertyOfRpcStruct(t, updateIndexResponse_ResultRpc, updateIndexResponse_ResultResult) + + updateLibrariesIndexResponse_ResultRpc := &rpc.UpdateLibrariesIndexResponse_Result{} + updateLibrariesIndexResponse_ResultResult := result.NewUpdateLibrariesIndexResponse_ResultResult(updateLibrariesIndexResponse_ResultRpc) + mustContainsAllPropertyOfRpcStruct(t, updateLibrariesIndexResponse_ResultRpc, updateLibrariesIndexResponse_ResultResult) + + indexUpdateReportRpc := &rpc.IndexUpdateReport{} + indexUpdateReportResult := result.NewIndexUpdateReportResult(indexUpdateReportRpc) + mustContainsAllPropertyOfRpcStruct(t, indexUpdateReportRpc, indexUpdateReportResult) +} + +func TestEnumsMapsEveryRpcCounterpart(t *testing.T) { + t.Run("LibraryLocation enums maps every element", func(t *testing.T) { + results := make([]result.LibraryLocation, 0, len(rpc.LibraryLocation_name)) + for key := range rpc.LibraryLocation_name { + results = append(results, result.NewLibraryLocation(rpc.LibraryLocation(key))) + } + require.NotEmpty(t, results) + require.Len(t, results, len(rpc.LibraryLocation_name)) + require.True(t, isUnique(results)) + }) + t.Run("LibraryLayout enums maps every element", func(t *testing.T) { + results := make([]result.LibraryLayout, 0, len(rpc.LibraryLayout_name)) + for key := range rpc.LibraryLayout_name { + results = append(results, result.NewLibraryLayout(rpc.LibraryLayout(key))) + } + require.NotEmpty(t, results) + require.Len(t, results, len(rpc.LibraryLayout_name)) + require.True(t, isUnique(results)) + }) + t.Run("LibrarySearchStatus enums maps every element", func(t *testing.T) { + results := make([]result.LibrarySearchStatus, 0, len(rpc.LibrarySearchStatus_name)) + for key := range rpc.LibrarySearchStatus_name { + results = append(results, result.NewLibrarySearchStatus(rpc.LibrarySearchStatus(key))) + } + require.NotEmpty(t, results) + require.Len(t, results, len(rpc.LibrarySearchStatus_name)) + require.True(t, isUnique(results)) + }) + t.Run("IndexUpdateReport_Status enums maps every element", func(t *testing.T) { + results := make([]result.IndexUpdateReport_Status, 0, len(rpc.IndexUpdateReport_Status_name)) + for key := range rpc.IndexUpdateReport_Status_name { + results = append(results, result.NewIndexUpdateReport_Status(rpc.IndexUpdateReport_Status(key))) + } + require.NotEmpty(t, results) + require.Len(t, results, len(rpc.IndexUpdateReport_Status_name)) + require.True(t, isUnique(results)) + }) +} + +func isUnique[T comparable](s []T) bool { + seen := map[T]bool{} + for _, v := range s { + if _, ok := seen[v]; ok { + return false + } + seen[v] = true + } + return true +} diff --git a/internal/cli/feedback/rpc_progress.go b/internal/cli/feedback/rpc_progress.go index c9a413a4fdb..0d63d5cd346 100644 --- a/internal/cli/feedback/rpc_progress.go +++ b/internal/cli/feedback/rpc_progress.go @@ -18,6 +18,7 @@ package feedback import ( "sync" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/cmaglie/pb" ) @@ -70,7 +71,7 @@ func NewDownloadProgressBarCB() func(*rpc.DownloadProgress) { if end := curr.GetEnd(); end != nil { msg := end.GetMessage() if end.GetSuccess() && msg == "" { - msg = tr("downloaded") + msg = i18n.Tr("downloaded") } if started { bar.FinishPrintOver(label + " " + msg) diff --git a/internal/cli/feedback/stdio.go b/internal/cli/feedback/stdio.go index 87f37f0c227..fa5f463fa97 100644 --- a/internal/cli/feedback/stdio.go +++ b/internal/cli/feedback/stdio.go @@ -19,6 +19,8 @@ import ( "bytes" "errors" "io" + + "github.com/arduino/arduino-cli/internal/i18n" ) // DirectStreams returns the underlying io.Writer to directly stream to @@ -32,7 +34,7 @@ func DirectStreams() (io.Writer, io.Writer, error) { panic("output format not yet selected") } if format != Text { - return nil, nil, errors.New(tr("available only in text format")) + return nil, nil, errors.New(i18n.Tr("available only in text format")) } return stdOut, stdErr, nil } @@ -66,7 +68,7 @@ func OutputStreams() (io.Writer, io.Writer, func() *OutputStreamsResult) { // object that can be used as a Result or to retrieve the accumulated output // to embed it in another object. func NewBufferedStreams() (io.Writer, io.Writer, func() *OutputStreamsResult) { - out, err := &bytes.Buffer{}, &bytes.Buffer{} + out, err := bytes.NewBuffer(nil), bytes.NewBuffer(nil) return out, err, func() *OutputStreamsResult { return &OutputStreamsResult{ Stdout: out.String(), diff --git a/table/cell.go b/internal/cli/feedback/table/cell.go similarity index 100% rename from table/cell.go rename to internal/cli/feedback/table/cell.go diff --git a/table/table.go b/internal/cli/feedback/table/table.go similarity index 100% rename from table/table.go rename to internal/cli/feedback/table/table.go diff --git a/internal/cli/feedback/terminal.go b/internal/cli/feedback/terminal.go index 11c466bae8b..8dc4c09a611 100644 --- a/internal/cli/feedback/terminal.go +++ b/internal/cli/feedback/terminal.go @@ -22,6 +22,8 @@ import ( "io" "os" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/mattn/go-isatty" "golang.org/x/term" ) @@ -33,10 +35,7 @@ func InteractiveStreams() (io.Reader, io.Writer, error) { panic("output format not yet selected") } if format != Text { - return nil, nil, errors.New(tr("interactive terminal not supported for the '%s' output format", format)) - } - if !isTerminal() { - return nil, nil, errors.New(tr("not running in a terminal")) + return nil, nil, errors.New(i18n.Tr("interactive terminal not supported for the '%s' output format", format)) } return os.Stdin, stdOut, nil } @@ -45,11 +44,19 @@ var oldStateStdin *term.State // SetRawModeStdin sets the stdin stream in RAW mode (no buffering, echo disabled, // no terminal escape codes nor signals interpreted) -func SetRawModeStdin() { +func SetRawModeStdin() error { if oldStateStdin != nil { panic("terminal already in RAW mode") } - oldStateStdin, _ = term.MakeRaw(int(os.Stdin.Fd())) + if !IsInteractive() { + return errors.New(i18n.Tr("not running in a terminal")) + } + old, err := term.MakeRaw(int(os.Stdin.Fd())) + if err != nil { + return err + } + oldStateStdin = old + return nil } // RestoreModeStdin restore the terminal settings to the normal non-RAW state. This @@ -63,17 +70,31 @@ func RestoreModeStdin() { oldStateStdin = nil } -func isTerminal() bool { - return term.IsTerminal(int(os.Stdin.Fd())) +// IsInteractive returns true if the CLI is interactive (it can receive inputs from terminal/console) +func IsInteractive() bool { + return isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd()) +} + +// HasConsole returns true if the CLI outputs to a terminal/console +func HasConsole() bool { + return isatty.IsTerminal(os.Stdout.Fd()) || isatty.IsCygwinTerminal(os.Stdout.Fd()) +} + +// IsCI returns true if running on CI environments. +// (based on https://github.com/watson/ci-info/blob/HEAD/index.js) +func IsCI() bool { + return os.Getenv("CI") != "" || // GitHub Actions, Travis CI, CircleCI, Cirrus CI, GitLab CI, AppVeyor, CodeShip, dsari + os.Getenv("BUILD_NUMBER") != "" || // Jenkins, TeamCity + os.Getenv("RUN_ID") != "" // TaskCluster, dsari } // InputUserField prompts the user to input the provided user field. func InputUserField(prompt string, secret bool) (string, error) { if format != Text { - return "", errors.New(tr("user input not supported for the '%s' output format", format)) + return "", errors.New(i18n.Tr("user input not supported for the '%s' output format", format)) } - if !isTerminal() { - return "", errors.New(tr("user input not supported in non interactive mode")) + if !IsInteractive() { + return "", errors.New(i18n.Tr("user input not supported in non interactive mode")) } fmt.Fprintf(stdOut, "%s: ", prompt) diff --git a/internal/cli/feedback/warn_deprecated.go b/internal/cli/feedback/warn_deprecated.go new file mode 100644 index 00000000000..1354ef77269 --- /dev/null +++ b/internal/cli/feedback/warn_deprecated.go @@ -0,0 +1,45 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package feedback + +import ( + "fmt" + "strings" + + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" +) + +// WarnAboutDeprecatedFiles warns the user that a type of sketch files are deprecated +func WarnAboutDeprecatedFiles(s *rpc.Sketch) { + var files []string + for _, f := range s.GetOtherSketchFiles() { + if strings.HasSuffix(f, ".pde") { + files = append(files, f) + } + } + if strings.HasSuffix(s.GetMainFile(), ".pde") { + files = append(files, s.GetMainFile()) + } + if len(files) > 0 { + // .pde files are still supported but deprecated, this warning urges the user to rename them + msg := i18n.Tr("Sketches with .pde extension are deprecated, please rename the following files to .ino:") + for _, f := range files { + msg += fmt.Sprintf("\n - %s", f) + } + Warning(msg) + } +} diff --git a/internal/cli/generatedocs/generatedocs.go b/internal/cli/generatedocs/generatedocs.go index 0be07a768cb..d8bdd0a18af 100644 --- a/internal/cli/generatedocs/generatedocs.go +++ b/internal/cli/generatedocs/generatedocs.go @@ -19,8 +19,8 @@ import ( "os" "path/filepath" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/spf13/cobra/doc" @@ -35,14 +35,14 @@ var ( func NewCommand() *cobra.Command { generateDocsCommand := &cobra.Command{ Use: "generate-docs", - Short: tr("Generates bash completion and command manpages."), - Long: tr("Generates bash completion and command manpages."), + Short: i18n.Tr("Generates bash completion and command manpages."), + Long: i18n.Tr("Generates bash completion and command manpages."), Example: " " + os.Args[0] + " generate-docs bash-completions", Hidden: true, } generateDocsCommand.PersistentFlags().StringVarP(&outputDir, "output-dir", "o", "", - tr("Directory where to save generated files. Default is './docs', the directory must exist.")) + i18n.Tr("Directory where to save generated files. Default is './docs', the directory must exist.")) generateDocsCommand.AddCommand(&cobra.Command{ Use: "manpage", Args: cobra.NoArgs, @@ -77,7 +77,7 @@ func generateManPages(cmd *cobra.Command, args []string) { } logrus.WithField("outputDir", outputDir).Info("Generating manpages") header := &doc.GenManHeader{ - Title: tr("ARDUINO COMMAND LINE MANUAL"), + Title: i18n.Tr("ARDUINO COMMAND LINE MANUAL"), Section: "1", } err := doc.GenManTree(cmd.Root(), header, outputDir) diff --git a/internal/cli/instance/instance.go b/internal/cli/instance/instance.go index 60fbe8b54f7..316a1b0baf6 100644 --- a/internal/cli/instance/instance.go +++ b/internal/cli/instance/instance.go @@ -16,43 +16,43 @@ package instance import ( + "context" + "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" ) -var tr = i18n.Tr - // CreateAndInit return a new initialized instance. // If Create fails the CLI prints an error and exits since // to execute further operations a valid Instance is mandatory. // If Init returns errors they're printed only. -func CreateAndInit() *rpc.Instance { - inst, _ := CreateAndInitWithProfile("", nil) +func CreateAndInit(ctx context.Context, srv rpc.ArduinoCoreServiceServer) *rpc.Instance { + inst, _ := CreateAndInitWithProfile(ctx, srv, "", nil) return inst } // CreateAndInitWithProfile returns a new initialized instance using the given profile of the given sketch. // If Create fails the CLI prints an error and exits since to execute further operations a valid Instance is mandatory. // If Init returns errors they're printed only. -func CreateAndInitWithProfile(profileName string, sketchPath *paths.Path) (*rpc.Instance, *rpc.Profile) { - instance, err := create() +func CreateAndInitWithProfile(ctx context.Context, srv rpc.ArduinoCoreServiceServer, profileName string, sketchPath *paths.Path) (*rpc.Instance, *rpc.SketchProfile) { + instance, err := create(ctx, srv) if err != nil { - feedback.Fatal(tr("Error creating instance: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error creating instance: %v", err), feedback.ErrGeneric) } - profile := InitWithProfile(instance, profileName, sketchPath) + profile := InitWithProfile(ctx, srv, instance, profileName, sketchPath) return instance, profile } // create and return a new Instance. -func create() (*rpc.Instance, error) { - res, err := commands.Create(&rpc.CreateRequest{}) +func create(ctx context.Context, srv rpc.ArduinoCoreServiceServer) (*rpc.Instance, error) { + res, err := srv.Create(ctx, &rpc.CreateRequest{}) if err != nil { return nil, err } - return res.Instance, nil + return res.GetInstance(), nil } // Init initializes instance by loading installed libraries and platforms. @@ -60,14 +60,14 @@ func create() (*rpc.Instance, error) { // platform or library that we failed to load. // Package and library indexes files are automatically updated if the // CLI is run for the first time. -func Init(instance *rpc.Instance) { - InitWithProfile(instance, "", nil) +func Init(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance) { + InitWithProfile(ctx, srv, instance, "", nil) } // InitWithProfile initializes instance by loading libraries and platforms specified in the given profile of the given sketch. // In case of loading failures return a list of errors for each platform or library that we failed to load. // Required Package and library indexes files are automatically downloaded. -func InitWithProfile(instance *rpc.Instance, profileName string, sketchPath *paths.Path) *rpc.Profile { +func InitWithProfile(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, profileName string, sketchPath *paths.Path) *rpc.SketchProfile { downloadCallback := feedback.ProgressBar() taskCallback := feedback.TaskProgress() @@ -76,27 +76,28 @@ func InitWithProfile(instance *rpc.Instance, profileName string, sketchPath *pat initReq.SketchPath = sketchPath.String() initReq.Profile = profileName } - var profile *rpc.Profile - err := commands.Init(initReq, func(res *rpc.InitResponse) { + var profile *rpc.SketchProfile + err := srv.Init(initReq, commands.InitStreamResponseToCallbackFunction(ctx, func(res *rpc.InitResponse) error { if st := res.GetError(); st != nil { - feedback.Warning(tr("Error initializing instance: %v", st.Message)) + feedback.Warning(i18n.Tr("Error initializing instance: %v", st.GetMessage())) } if progress := res.GetInitProgress(); progress != nil { - if progress.DownloadProgress != nil { - downloadCallback(progress.DownloadProgress) + if progress.GetDownloadProgress() != nil { + downloadCallback(progress.GetDownloadProgress()) } - if progress.TaskProgress != nil { - taskCallback(progress.TaskProgress) + if progress.GetTaskProgress() != nil { + taskCallback(progress.GetTaskProgress()) } } if p := res.GetProfile(); p != nil { profile = p } - }) + return nil + })) if err != nil { - feedback.Warning(tr("Error initializing instance: %v", err)) + feedback.Warning(i18n.Tr("Error initializing instance: %v", err)) } return profile diff --git a/internal/cli/lib/args.go b/internal/cli/lib/args.go index 75639b8bc84..63d0f7b1696 100644 --- a/internal/cli/lib/args.go +++ b/internal/cli/lib/args.go @@ -17,10 +17,10 @@ package lib import ( "context" - "fmt" + "errors" "strings" - "github.com/arduino/arduino-cli/commands/lib" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" ) @@ -46,12 +46,12 @@ func ParseLibraryReferenceArg(arg string) (*LibraryReferenceArg, error) { // TODO: check library Name constraints // TODO: check library Version constraints if tokens[0] == "" { - return nil, fmt.Errorf(tr("invalid empty library name")) + return nil, errors.New(i18n.Tr("invalid empty library name")) } ret.Name = tokens[0] if len(tokens) > 1 { if tokens[1] == "" { - return nil, fmt.Errorf(tr("invalid empty library version: %s"), arg) + return nil, errors.New(i18n.Tr("invalid empty library version: %s", arg)) } ret.Version = tokens[1] } @@ -74,9 +74,9 @@ func ParseLibraryReferenceArgs(args []string) ([]*LibraryReferenceArg, error) { // ParseLibraryReferenceArgAndAdjustCase parse a command line argument that reference a // library and possibly adjust the case of the name to match a library in the index -func ParseLibraryReferenceArgAndAdjustCase(instance *rpc.Instance, arg string) (*LibraryReferenceArg, error) { +func ParseLibraryReferenceArgAndAdjustCase(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, arg string) (*LibraryReferenceArg, error) { libRef, _ := ParseLibraryReferenceArg(arg) - res, err := lib.LibrarySearch(context.Background(), &rpc.LibrarySearchRequest{ + res, err := srv.LibrarySearch(ctx, &rpc.LibrarySearchRequest{ Instance: instance, SearchArgs: libRef.Name, }) @@ -98,10 +98,10 @@ func ParseLibraryReferenceArgAndAdjustCase(instance *rpc.Instance, arg string) ( // ParseLibraryReferenceArgsAndAdjustCase is a convenient wrapper that operates on a slice of // strings and calls ParseLibraryReferenceArgAndAdjustCase for each of them. It returns at the first invalid argument. -func ParseLibraryReferenceArgsAndAdjustCase(instance *rpc.Instance, args []string) ([]*LibraryReferenceArg, error) { +func ParseLibraryReferenceArgsAndAdjustCase(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, args []string) ([]*LibraryReferenceArg, error) { ret := []*LibraryReferenceArg{} for _, arg := range args { - if reference, err := ParseLibraryReferenceArgAndAdjustCase(instance, arg); err == nil { + if reference, err := ParseLibraryReferenceArgAndAdjustCase(ctx, srv, instance, arg); err == nil { ret = append(ret, reference) } else { return nil, err diff --git a/internal/cli/lib/check_deps.go b/internal/cli/lib/check_deps.go index b286a2c85a5..154edd146b4 100644 --- a/internal/cli/lib/check_deps.go +++ b/internal/cli/lib/check_deps.go @@ -21,57 +21,64 @@ import ( "os" "sort" - "github.com/arduino/arduino-cli/commands/lib" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/fatih/color" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDepsCommand() *cobra.Command { +func initDepsCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { + var noOverwrite bool depsCommand := &cobra.Command{ - Use: fmt.Sprintf("deps %s[@%s]...", tr("LIBRARY"), tr("VERSION_NUMBER")), - Short: tr("Check dependencies status for the specified library."), - Long: tr("Check dependencies status for the specified library."), + Use: fmt.Sprintf("deps %s[@%s]...", i18n.Tr("LIBRARY"), i18n.Tr("VERSION_NUMBER")), + Short: i18n.Tr("Check dependencies status for the specified library."), + Long: i18n.Tr("Check dependencies status for the specified library."), Example: "" + - " " + os.Args[0] + " lib deps AudioZero # " + tr("for the latest version.") + "\n" + - " " + os.Args[0] + " lib deps AudioZero@1.0.0 # " + tr("for the specific version."), + " " + os.Args[0] + " lib deps AudioZero # " + i18n.Tr("for the latest version.") + "\n" + + " " + os.Args[0] + " lib deps AudioZero@1.0.0 # " + i18n.Tr("for the specific version."), Args: cobra.ExactArgs(1), - Run: runDepsCommand, + Run: func(cmd *cobra.Command, args []string) { + runDepsCommand(cmd.Context(), srv, args, noOverwrite) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstalledLibraries(), cobra.ShellCompDirectiveDefault + return arguments.GetInstalledLibraries(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } + depsCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, i18n.Tr("Do not try to update library dependencies if already installed.")) return depsCommand } -func runDepsCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runDepsCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, noOverwrite bool) { + instance := instance.CreateAndInit(ctx, srv) + logrus.Info("Executing `arduino-cli lib deps`") - libRef, err := ParseLibraryReferenceArgAndAdjustCase(instance, args[0]) + libRef, err := ParseLibraryReferenceArgAndAdjustCase(ctx, srv, instance, args[0]) if err != nil { - feedback.Fatal(tr("Arguments error: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Arguments error: %v", err), feedback.ErrBadArgument) } - deps, err := lib.LibraryResolveDependencies(context.Background(), &rpc.LibraryResolveDependenciesRequest{ - Instance: instance, - Name: libRef.Name, - Version: libRef.Version, + deps, err := srv.LibraryResolveDependencies(ctx, &rpc.LibraryResolveDependenciesRequest{ + Instance: instance, + Name: libRef.Name, + Version: libRef.Version, + DoNotUpdateInstalledLibraries: noOverwrite, }) if err != nil { - feedback.Fatal(tr("Error resolving dependencies for %[1]s: %[2]s", libRef, err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error resolving dependencies for %[1]s: %[2]s", libRef, err), feedback.ErrGeneric) } - feedback.PrintResult(&checkDepResult{deps: deps}) + feedback.PrintResult(&checkDepResult{deps: result.NewLibraryResolveDependenciesResponse(deps)}) } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type checkDepResult struct { - deps *rpc.LibraryResolveDependenciesResponse + deps *result.LibraryResolveDependenciesResponse } func (dr checkDepResult) Data() interface{} { @@ -79,6 +86,9 @@ func (dr checkDepResult) Data() interface{} { } func (dr checkDepResult) String() string { + if dr.deps == nil || dr.deps.Dependencies == nil { + return "" + } res := "" deps := dr.deps.Dependencies @@ -91,26 +101,30 @@ func (dr checkDepResult) String() string { }) for _, dep := range deps { + if dep == nil { + continue + } res += outputDep(dep) } return res } -func outputDep(dep *rpc.LibraryDependencyStatus) string { +func outputDep(dep *result.LibraryDependencyStatus) string { res := "" green := color.New(color.FgGreen) red := color.New(color.FgRed) yellow := color.New(color.FgYellow) - if dep.GetVersionInstalled() == "" { - res += tr("%s must be installed.", - red.Sprintf("✕ %s %s", dep.GetName(), dep.GetVersionRequired())) - } else if dep.GetVersionInstalled() == dep.GetVersionRequired() { - res += tr("%s is already installed.", - green.Sprintf("✓ %s %s", dep.GetName(), dep.GetVersionRequired())) - } else { - res += tr("%[1]s is required but %[2]s is currently installed.", - yellow.Sprintf("✕ %s %s", dep.GetName(), dep.GetVersionRequired()), - yellow.Sprintf("%s", dep.GetVersionInstalled())) + switch dep.VersionInstalled { + case "": + res += i18n.Tr("%s must be installed.", + red.Sprintf("✕ %s %s", dep.Name, dep.VersionRequired)) + case dep.VersionRequired: + res += i18n.Tr("%s is already installed.", + green.Sprintf("✓ %s %s", dep.Name, dep.VersionRequired)) + default: + res += i18n.Tr("%[1]s is required but %[2]s is currently installed.", + yellow.Sprintf("✕ %s %s", dep.Name, dep.VersionRequired), + yellow.Sprintf("%s", dep.VersionInstalled)) } res += "\n" return res diff --git a/internal/cli/lib/download.go b/internal/cli/lib/download.go index 3616584a91d..511d38291e8 100644 --- a/internal/cli/lib/download.go +++ b/internal/cli/lib/download.go @@ -20,38 +20,42 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/lib" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initDownloadCommand() *cobra.Command { +func initDownloadCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { downloadCommand := &cobra.Command{ - Use: fmt.Sprintf("download [%s]...", tr("LIBRARY_NAME")), - Short: tr("Downloads one or more libraries without installing them."), - Long: tr("Downloads one or more libraries without installing them."), + Use: fmt.Sprintf("download [%s]...", i18n.Tr("LIBRARY_NAME")), + Short: i18n.Tr("Downloads one or more libraries without installing them."), + Long: i18n.Tr("Downloads one or more libraries without installing them."), Example: "" + - " " + os.Args[0] + " lib download AudioZero # " + tr("for the latest version.") + "\n" + - " " + os.Args[0] + " lib download AudioZero@1.0.0 # " + tr("for a specific version."), + " " + os.Args[0] + " lib download AudioZero # " + i18n.Tr("for the latest version.") + "\n" + + " " + os.Args[0] + " lib download AudioZero@1.0.0 # " + i18n.Tr("for a specific version."), Args: cobra.MinimumNArgs(1), - Run: runDownloadCommand, + Run: func(cmd *cobra.Command, args []string) { + runDownloadCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstallableLibs(), cobra.ShellCompDirectiveDefault + return arguments.GetInstallableLibs(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } return downloadCommand } -func runDownloadCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runDownloadCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli lib download`") - refs, err := ParseLibraryReferenceArgsAndAdjustCase(instance, args) + instance := instance.CreateAndInit(ctx, srv) + + refs, err := ParseLibraryReferenceArgsAndAdjustCase(ctx, srv, instance, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for _, library := range refs { @@ -60,9 +64,9 @@ func runDownloadCommand(cmd *cobra.Command, args []string) { Name: library.Name, Version: library.Version, } - _, err := lib.LibraryDownload(context.Background(), libraryDownloadRequest, feedback.ProgressBar()) - if err != nil { - feedback.Fatal(tr("Error downloading %[1]s: %[2]v", library, err), feedback.ErrNetwork) + stream := commands.LibraryDownloadStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + if err := srv.LibraryDownload(libraryDownloadRequest, stream); err != nil { + feedback.Fatal(i18n.Tr("Error downloading %[1]s: %[2]v", library, err), feedback.ErrNetwork) } } } diff --git a/internal/cli/lib/examples.go b/internal/cli/lib/examples.go index a6564ec6378..da0ee4c418e 100644 --- a/internal/cli/lib/examples.go +++ b/internal/cli/lib/examples.go @@ -22,10 +22,11 @@ import ( "sort" "strings" - "github.com/arduino/arduino-cli/commands/lib" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/fatih/color" @@ -37,46 +38,48 @@ var ( fqbn arguments.Fqbn ) -func initExamplesCommand() *cobra.Command { +func initExamplesCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { examplesCommand := &cobra.Command{ - Use: fmt.Sprintf("examples [%s]", tr("LIBRARY_NAME")), - Short: tr("Shows the list of the examples for libraries."), - Long: tr("Shows the list of the examples for libraries. A name may be given as argument to search a specific library."), + Use: fmt.Sprintf("examples [%s]", i18n.Tr("LIBRARY_NAME")), + Short: i18n.Tr("Shows the list of the examples for libraries."), + Long: i18n.Tr("Shows the list of the examples for libraries. A name may be given as argument to search a specific library."), Example: " " + os.Args[0] + " lib examples Wire", Args: cobra.MaximumNArgs(1), - Run: runExamplesCommand, + Run: func(cmd *cobra.Command, args []string) { + runExamplesCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstalledLibraries(), cobra.ShellCompDirectiveDefault + return arguments.GetInstalledLibraries(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } - fqbn.AddToCommand(examplesCommand) + fqbn.AddToCommand(examplesCommand, srv) return examplesCommand } -func runExamplesCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runExamplesCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli lib examples`") + instance := instance.CreateAndInit(ctx, srv) name := "" if len(args) > 0 { name = args[0] } - res, err := lib.LibraryList(context.Background(), &rpc.LibraryListRequest{ + res, err := srv.LibraryList(ctx, &rpc.LibraryListRequest{ Instance: instance, All: true, Name: name, Fqbn: fqbn.String(), }) if err != nil { - feedback.Fatal(tr("Error getting libraries info: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error getting libraries info: %v", err), feedback.ErrGeneric) } found := []*libraryExamples{} for _, lib := range res.GetInstalledLibraries() { found = append(found, &libraryExamples{ - Library: lib.Library, - Examples: lib.Library.Examples, + Library: result.NewLibrary(lib.GetLibrary()), + Examples: lib.GetLibrary().GetExamples(), }) } @@ -88,21 +91,21 @@ func runExamplesCommand(cmd *cobra.Command, args []string) { // feedback.Result implementation type libraryExamples struct { - Library *rpc.Library `json:"library"` - Examples []string `json:"examples"` + Library *result.Library `json:"library"` + Examples []string `json:"examples"` } type libraryExamplesResult struct { - Examples []*libraryExamples + Examples []*libraryExamples `json:"examples"` } func (ir libraryExamplesResult) Data() interface{} { - return ir.Examples + return ir } func (ir libraryExamplesResult) String() string { - if ir.Examples == nil || len(ir.Examples) == 0 { - return tr("No libraries found.") + if len(ir.Examples) == 0 { + return i18n.Tr("No libraries found.") } sort.Slice(ir.Examples, func(i, j int) bool { @@ -113,11 +116,11 @@ func (ir libraryExamplesResult) String() string { for _, lib := range ir.Examples { name := lib.Library.Name if lib.Library.ContainerPlatform != "" { - name += " (" + lib.Library.GetContainerPlatform() + ")" - } else if lib.Library.Location != rpc.LibraryLocation_LIBRARY_LOCATION_USER { - name += " (" + lib.Library.GetLocation().String() + ")" + name += " (" + lib.Library.ContainerPlatform + ")" + } else if lib.Library.Location != result.LibraryLocationUser { + name += " (" + string(lib.Library.Location) + ")" } - r := tr("Examples for library %s", color.GreenString("%s", name)) + "\n" + r := i18n.Tr("Examples for library %s", color.GreenString("%s", name)) + "\n" sort.Slice(lib.Examples, func(i, j int) bool { return strings.ToLower(lib.Examples[i]) < strings.ToLower(lib.Examples[j]) }) diff --git a/internal/cli/lib/install.go b/internal/cli/lib/install.go index 549f4d7c328..9440a7bdf1e 100644 --- a/internal/cli/lib/install.go +++ b/internal/cli/lib/install.go @@ -21,81 +21,83 @@ import ( "os" "strings" - "github.com/arduino/arduino-cli/commands/lib" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/version" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/version" "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" semver "go.bug.st/relaxed-semver" ) -func initInstallCommand() *cobra.Command { +func initInstallCommand(srv rpc.ArduinoCoreServiceServer, settings *rpc.Configuration) *cobra.Command { var noDeps bool var noOverwrite bool var gitURL bool var zipPath bool var useBuiltinLibrariesDir bool + enableUnsafeInstall := settings.GetLibrary().GetEnableUnsafeInstall() installCommand := &cobra.Command{ - Use: fmt.Sprintf("install %s[@%s]...", tr("LIBRARY"), tr("VERSION_NUMBER")), - Short: tr("Installs one or more specified libraries into the system."), - Long: tr("Installs one or more specified libraries into the system."), + Use: fmt.Sprintf("install %s[@%s]...", i18n.Tr("LIBRARY"), i18n.Tr("VERSION_NUMBER")), + Short: i18n.Tr("Installs one or more specified libraries into the system."), + Long: i18n.Tr("Installs one or more specified libraries into the system."), Example: "" + - " " + os.Args[0] + " lib install AudioZero # " + tr("for the latest version.") + "\n" + - " " + os.Args[0] + " lib install AudioZero@1.0.0 # " + tr("for the specific version.") + "\n" + + " " + os.Args[0] + " lib install AudioZero # " + i18n.Tr("for the latest version.") + "\n" + + " " + os.Args[0] + " lib install AudioZero@1.0.0 # " + i18n.Tr("for the specific version.") + "\n" + " " + os.Args[0] + " lib install --git-url https://github.com/arduino-libraries/WiFi101.git https://github.com/arduino-libraries/ArduinoBLE.git\n" + - " " + os.Args[0] + " lib install --git-url https://github.com/arduino-libraries/WiFi101.git#0.16.0 # " + tr("for the specific version.") + "\n" + + " " + os.Args[0] + " lib install --git-url https://github.com/arduino-libraries/WiFi101.git#0.16.0 # " + i18n.Tr("for the specific version.") + "\n" + " " + os.Args[0] + " lib install --zip-path /path/to/WiFi101.zip /path/to/ArduinoBLE.zip\n", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - runInstallCommand(args, noDeps, noOverwrite, gitURL, zipPath, useBuiltinLibrariesDir) + runInstallCommand(cmd.Context(), srv, args, noDeps, noOverwrite, gitURL, zipPath, useBuiltinLibrariesDir, enableUnsafeInstall) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetInstallableLibs(), cobra.ShellCompDirectiveDefault + return arguments.GetInstallableLibs(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } - installCommand.Flags().BoolVar(&noDeps, "no-deps", false, tr("Do not install dependencies.")) - installCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, tr("Do not overwrite already installed libraries.")) - installCommand.Flags().BoolVar(&gitURL, "git-url", false, tr("Enter git url for libraries hosted on repositories")) - installCommand.Flags().BoolVar(&zipPath, "zip-path", false, tr("Enter a path to zip file")) - installCommand.Flags().BoolVar(&useBuiltinLibrariesDir, "install-in-builtin-dir", false, tr("Install libraries in the IDE-Builtin directory")) + installCommand.Flags().BoolVar(&noDeps, "no-deps", false, i18n.Tr("Do not install dependencies.")) + installCommand.Flags().BoolVar(&noOverwrite, "no-overwrite", false, i18n.Tr("Do not overwrite already installed libraries.")) + installCommand.Flags().BoolVar(&gitURL, "git-url", false, i18n.Tr("Enter git url for libraries hosted on repositories")) + installCommand.Flags().BoolVar(&zipPath, "zip-path", false, i18n.Tr("Enter a path to zip file")) + installCommand.Flags().BoolVar(&useBuiltinLibrariesDir, "install-in-builtin-dir", false, i18n.Tr("Install libraries in the IDE-Builtin directory")) return installCommand } -func runInstallCommand(args []string, noDeps bool, noOverwrite bool, gitURL bool, zipPath bool, useBuiltinLibrariesDir bool) { - instance := instance.CreateAndInit() +func runInstallCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, noDeps bool, noOverwrite bool, gitURL bool, zipPath bool, useBuiltinLibrariesDir bool, enableUnsafeInstall bool) { + instance := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli lib install`") if zipPath || gitURL { - if !configuration.Settings.GetBool("library.enable_unsafe_install") { + if !enableUnsafeInstall { documentationURL := "https://arduino.github.io/arduino-cli/latest/configuration/#configuration-keys" _, err := semver.Parse(version.VersionInfo.VersionString) if err == nil { split := strings.Split(version.VersionInfo.VersionString, ".") documentationURL = fmt.Sprintf("https://arduino.github.io/arduino-cli/%s.%s/configuration/#configuration-keys", split[0], split[1]) } - feedback.Fatal(tr("--git-url and --zip-path are disabled by default, for more information see: %v", documentationURL), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("--git-url and --zip-path are disabled by default, for more information see: %v", documentationURL), feedback.ErrGeneric) } - feedback.Print(tr("--git-url and --zip-path flags allow installing untrusted files, use it at your own risk.")) + feedback.Print(i18n.Tr("--git-url and --zip-path flags allow installing untrusted files, use it at your own risk.")) if useBuiltinLibrariesDir { - feedback.Fatal(tr("--git-url or --zip-path can't be used with --install-in-builtin-dir"), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("--git-url or --zip-path can't be used with --install-in-builtin-dir"), feedback.ErrGeneric) } } if zipPath { for _, path := range args { - err := lib.ZipLibraryInstall(context.Background(), &rpc.ZipLibraryInstallRequest{ + req := &rpc.ZipLibraryInstallRequest{ Instance: instance, Path: path, Overwrite: !noOverwrite, - }, feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error installing Zip Library: %v", err), feedback.ErrGeneric) + } + stream := commands.ZipLibraryInstallStreamResponseToCallbackFunction(ctx, feedback.TaskProgress()) + if err := srv.ZipLibraryInstall(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error installing Zip Library: %v", err), feedback.ErrGeneric) } } return @@ -106,25 +108,26 @@ func runInstallCommand(args []string, noDeps bool, noOverwrite bool, gitURL bool if url == "." { wd, err := paths.Getwd() if err != nil { - feedback.Fatal(tr("Couldn't get current working directory: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Couldn't get current working directory: %v", err), feedback.ErrGeneric) } url = wd.String() } - err := lib.GitLibraryInstall(context.Background(), &rpc.GitLibraryInstallRequest{ + req := &rpc.GitLibraryInstallRequest{ Instance: instance, Url: url, Overwrite: !noOverwrite, - }, feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error installing Git Library: %v", err), feedback.ErrGeneric) + } + stream := commands.GitLibraryInstallStreamResponseToCallbackFunction(ctx, feedback.TaskProgress()) + if err := srv.GitLibraryInstall(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error installing Git Library: %v", err), feedback.ErrGeneric) } } return } - libRefs, err := ParseLibraryReferenceArgsAndAdjustCase(instance, args) + libRefs, err := ParseLibraryReferenceArgsAndAdjustCase(ctx, srv, instance, args) if err != nil { - feedback.Fatal(tr("Arguments error: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Arguments error: %v", err), feedback.ErrBadArgument) } for _, libRef := range libRefs { @@ -140,9 +143,9 @@ func runInstallCommand(args []string, noDeps bool, noOverwrite bool, gitURL bool NoOverwrite: noOverwrite, InstallLocation: installLocation, } - err := lib.LibraryInstall(context.Background(), libraryInstallRequest, feedback.ProgressBar(), feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error installing %s: %v", libRef.Name, err), feedback.ErrGeneric) + stream := commands.LibraryInstallStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + if err := srv.LibraryInstall(libraryInstallRequest, stream); err != nil { + feedback.Fatal(i18n.Tr("Error installing %s: %v", libRef.Name, err), feedback.ErrGeneric) } } } diff --git a/internal/cli/lib/lib.go b/internal/cli/lib/lib.go index c6cdbb59b58..45081bda391 100644 --- a/internal/cli/lib/lib.go +++ b/internal/cli/lib/lib.go @@ -18,31 +18,30 @@ package lib import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `lib` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer, defaultSettings *rpc.Configuration) *cobra.Command { libCommand := &cobra.Command{ Use: "lib", - Short: tr("Arduino commands about libraries."), - Long: tr("Arduino commands about libraries."), + Short: i18n.Tr("Arduino commands about libraries."), + Long: i18n.Tr("Arduino commands about libraries."), Example: "" + " " + os.Args[0] + " lib install AudioZero\n" + " " + os.Args[0] + " lib update-index", } - libCommand.AddCommand(initDownloadCommand()) - libCommand.AddCommand(initInstallCommand()) - libCommand.AddCommand(initListCommand()) - libCommand.AddCommand(initExamplesCommand()) - libCommand.AddCommand(initSearchCommand()) - libCommand.AddCommand(initUninstallCommand()) - libCommand.AddCommand(initUpgradeCommand()) - libCommand.AddCommand(initUpdateIndexCommand()) - libCommand.AddCommand(initDepsCommand()) + libCommand.AddCommand(initDownloadCommand(srv)) + libCommand.AddCommand(initInstallCommand(srv, defaultSettings)) + libCommand.AddCommand(initListCommand(srv)) + libCommand.AddCommand(initExamplesCommand(srv)) + libCommand.AddCommand(initSearchCommand(srv)) + libCommand.AddCommand(initUninstallCommand(srv)) + libCommand.AddCommand(initUpgradeCommand(srv)) + libCommand.AddCommand(initUpdateIndexCommand(srv)) + libCommand.AddCommand(initDepsCommand(srv)) return libCommand } diff --git a/internal/cli/lib/list.go b/internal/cli/lib/list.go index ea644367db5..d316e8b3756 100644 --- a/internal/cli/lib/list.go +++ b/internal/cli/lib/list.go @@ -22,22 +22,23 @@ import ( "sort" "strings" - "github.com/arduino/arduino-cli/commands/lib" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initListCommand() *cobra.Command { +func initListCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var all bool var updatable bool listCommand := &cobra.Command{ - Use: fmt.Sprintf("list [%s]", tr("LIBNAME")), - Short: tr("Shows a list of installed libraries."), - Long: tr(`Shows a list of installed libraries. + Use: fmt.Sprintf("list [%s]", i18n.Tr("LIBNAME")), + Short: i18n.Tr("Shows a list of installed libraries."), + Long: i18n.Tr(`Shows a list of installed libraries. If the LIBNAME parameter is specified the listing is limited to that specific library. By default the libraries provided as built-in by platforms/core are @@ -45,40 +46,41 @@ not listed, they can be listed by adding the --all flag.`), Example: " " + os.Args[0] + " lib list", Args: cobra.MaximumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() + ctx := cmd.Context() + instance := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli lib list`") - List(instance, args, all, updatable) + List(ctx, srv, instance, args, all, updatable) }, } - listCommand.Flags().BoolVar(&all, "all", false, tr("Include built-in libraries (from platforms and IDE) in listing.")) - fqbn.AddToCommand(listCommand) - listCommand.Flags().BoolVar(&updatable, "updatable", false, tr("List updatable libraries.")) + listCommand.Flags().BoolVar(&all, "all", false, i18n.Tr("Include built-in libraries (from platforms and IDE) in listing.")) + fqbn.AddToCommand(listCommand, srv) + listCommand.Flags().BoolVar(&updatable, "updatable", false, i18n.Tr("List updatable libraries.")) return listCommand } // List gets and prints a list of installed libraries. -func List(instance *rpc.Instance, args []string, all bool, updatable bool) { - installedLibs := GetList(instance, args, all, updatable) +func List(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, args []string, all bool, updatable bool) { + installedLibs := GetList(ctx, srv, instance, args, all, updatable) + + installedLibsResult := make([]*result.InstalledLibrary, len(installedLibs)) + for i, v := range installedLibs { + installedLibsResult[i] = result.NewInstalledLibrary(v) + } feedback.PrintResult(installedResult{ onlyUpdates: updatable, - installedLibs: installedLibs, + InstalledLibs: installedLibsResult, }) logrus.Info("Done") } // GetList returns a list of installed libraries. -func GetList( - instance *rpc.Instance, - args []string, - all bool, - updatable bool, -) []*rpc.InstalledLibrary { +func GetList(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, args []string, all bool, updatable bool) []*rpc.InstalledLibrary { name := "" if len(args) > 0 { name = args[0] } - res, err := lib.LibraryList(context.Background(), &rpc.LibraryListRequest{ + res, err := srv.LibraryList(ctx, &rpc.LibraryListRequest{ Instance: instance, All: all, Updatable: updatable, @@ -86,7 +88,7 @@ func GetList( Fqbn: fqbn.String(), }) if err != nil { - feedback.Fatal(tr("Error listing libraries: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error listing libraries: %v", err), feedback.ErrGeneric) } libs := []*rpc.InstalledLibrary{} @@ -94,7 +96,7 @@ func GetList( libs = res.GetInstalledLibraries() } else { for _, lib := range res.GetInstalledLibraries() { - if lib.Library.CompatibleWith[fqbn.String()] { + if lib.GetLibrary().GetCompatibleWith()[fqbn.String()] { libs = append(libs, lib) } } @@ -112,35 +114,35 @@ func GetList( // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type installedResult struct { + InstalledLibs []*result.InstalledLibrary `json:"installed_libraries"` onlyUpdates bool - installedLibs []*rpc.InstalledLibrary } func (ir installedResult) Data() interface{} { - return ir.installedLibs + return ir } func (ir installedResult) String() string { - if len(ir.installedLibs) == 0 { + if len(ir.InstalledLibs) == 0 { if ir.onlyUpdates { - return tr("No libraries update is available.") + return i18n.Tr("No libraries update is available.") } - return tr("No libraries installed.") + return i18n.Tr("No libraries installed.") } - sort.Slice(ir.installedLibs, func(i, j int) bool { - return strings.ToLower(ir.installedLibs[i].Library.Name) < strings.ToLower(ir.installedLibs[j].Library.Name) || - strings.ToLower(ir.installedLibs[i].Library.ContainerPlatform) < strings.ToLower(ir.installedLibs[j].Library.ContainerPlatform) + sort.Slice(ir.InstalledLibs, func(i, j int) bool { + return strings.ToLower(ir.InstalledLibs[i].Library.Name) < strings.ToLower(ir.InstalledLibs[j].Library.Name) || + strings.ToLower(ir.InstalledLibs[i].Library.ContainerPlatform) < strings.ToLower(ir.InstalledLibs[j].Library.ContainerPlatform) }) t := table.New() - t.SetHeader(tr("Name"), tr("Installed"), tr("Available"), tr("Location"), tr("Description")) + t.SetHeader(i18n.Tr("Name"), i18n.Tr("Installed"), i18n.Tr("Available"), i18n.Tr("Location"), i18n.Tr("Description")) t.SetColumnWidthMode(1, table.Average) t.SetColumnWidthMode(2, table.Average) t.SetColumnWidthMode(4, table.Average) lastName := "" - for _, libMeta := range ir.installedLibs { - lib := libMeta.GetLibrary() + for _, libMeta := range ir.InstalledLibs { + lib := libMeta.Library name := lib.Name if name == lastName { name = ` "` @@ -148,15 +150,15 @@ func (ir installedResult) String() string { lastName = name } - location := lib.GetLocation().String() + location := string(lib.Location) if lib.ContainerPlatform != "" { - location = lib.GetContainerPlatform() + location = lib.ContainerPlatform } available := "" sentence := "" - if libMeta.GetRelease() != nil { - available = libMeta.GetRelease().GetVersion() + if libMeta.Release != nil { + available = libMeta.Release.Version sentence = lib.Sentence } diff --git a/internal/cli/lib/search.go b/internal/cli/lib/search.go index c44ced3778b..7103c5d9472 100644 --- a/internal/cli/lib/search.go +++ b/internal/cli/lib/search.go @@ -23,64 +23,111 @@ import ( "time" "github.com/arduino/arduino-cli/commands" - "github.com/arduino/arduino-cli/commands/lib" - "github.com/arduino/arduino-cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initSearchCommand() *cobra.Command { +func initSearchCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var namesOnly bool var omitReleasesDetails bool searchCommand := &cobra.Command{ - Use: fmt.Sprintf("search [%s]", tr("LIBRARY_NAME")), - Short: tr("Searches for one or more libraries data."), - Long: tr("Search for one or more libraries data (case insensitive search)."), - Example: " " + os.Args[0] + " lib search audio", - Args: cobra.ArbitraryArgs, + Use: fmt.Sprintf("search [%s ...]", i18n.Tr("SEARCH_TERM")), + Short: i18n.Tr("Searches for one or more libraries matching a query."), + Long: i18n.Tr(`Search for libraries matching zero or more search terms. + +All searches are performed in a case-insensitive fashion. Queries containing +multiple search terms will return only libraries that match all of the terms. + +Search terms that do not match the QV syntax described below are basic search +terms, and will match libraries that include the term anywhere in any of the +following fields: + - Author + - Name + - Paragraph + - Provides + - Sentence + +A special syntax, called qualifier-value (QV), indicates that a search term +should be compared against only one field of each library index entry. This +syntax uses the name of an index field (case-insensitive), an equals sign (=) +or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'. + +QV search terms that use a colon separator will match all libraries with the +value anywhere in the named field, and QV search terms that use an equals +separator will match only libraries with exactly the provided value in the +named field. + +QV search terms can include embedded spaces using double-quote (") characters +around the value or the entire term, e.g. 'category="Data Processing"' and +'"category=Data Processing"' are equivalent. A QV term can include a literal +double-quote character by preceding it with a backslash (\) character. + +NOTE: QV search terms using double-quote or backslash characters that are +passed as command-line arguments may require quoting or escaping to prevent +the shell from interpreting those characters. + +In addition to the fields listed above, QV terms can use these qualifiers: + - Architectures + - Category + - Dependencies + - License + - Maintainer + - Types + - Version + - Website + `), + Example: " " + os.Args[0] + " lib search audio # " + i18n.Tr("basic search for \"audio\"") + "\n" + + " " + os.Args[0] + " lib search name:buzzer # " + i18n.Tr("libraries with \"buzzer\" in the Name field") + "\n" + + " " + os.Args[0] + " lib search name=pcf8523 # " + i18n.Tr("libraries with a Name exactly matching \"pcf8523\"") + "\n" + + " " + os.Args[0] + " lib search \"author:\\\"Daniel Garcia\\\"\" # " + i18n.Tr("libraries authored by Daniel Garcia") + "\n" + + " " + os.Args[0] + " lib search author=Adafruit name:gfx # " + i18n.Tr("libraries authored only by Adafruit with \"gfx\" in their Name") + "\n" + + " " + os.Args[0] + " lib search esp32 display maintainer=espressif # " + i18n.Tr("basic search for \"esp32\" and \"display\" limited to official Maintainer") + "\n" + + " " + os.Args[0] + " lib search dependencies:IRremote # " + i18n.Tr("libraries that depend on at least \"IRremote\"") + "\n" + + " " + os.Args[0] + " lib search dependencies=IRremote # " + i18n.Tr("libraries that depend only on \"IRremote\"") + "\n", + Args: cobra.ArbitraryArgs, Run: func(cmd *cobra.Command, args []string) { - runSearchCommand(args, namesOnly, omitReleasesDetails) + runSearchCommand(cmd.Context(), srv, args, namesOnly, omitReleasesDetails) }, } - searchCommand.Flags().BoolVar(&namesOnly, "names", false, tr("Show library names only.")) - searchCommand.Flags().BoolVar(&omitReleasesDetails, "omit-releases-details", false, tr("Omit library details far all versions except the latest (produce a more compact JSON output).")) + searchCommand.Flags().BoolVar(&namesOnly, "names", false, i18n.Tr("Show library names only.")) + searchCommand.Flags().BoolVar(&omitReleasesDetails, "omit-releases-details", false, i18n.Tr("Omit library details far all versions except the latest (produce a more compact JSON output).")) return searchCommand } // indexUpdateInterval specifies the time threshold over which indexes are updated const indexUpdateInterval = 60 * time.Minute -func runSearchCommand(args []string, namesOnly bool, omitReleasesDetails bool) { - inst := instance.CreateAndInit() +func runSearchCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, namesOnly bool, omitReleasesDetails bool) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli lib search`") - if indexNeedsUpdating(indexUpdateInterval) { - if err := commands.UpdateLibrariesIndex( - context.Background(), - &rpc.UpdateLibrariesIndexRequest{Instance: inst}, - feedback.ProgressBar(), - ); err != nil { - feedback.Fatal(tr("Error updating library index: %v", err), feedback.ErrGeneric) - } - instance.Init(inst) + stream, res := commands.UpdateLibrariesIndexStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + req := &rpc.UpdateLibrariesIndexRequest{Instance: inst, UpdateIfOlderThanSecs: int64(indexUpdateInterval.Seconds())} + if err := srv.UpdateLibrariesIndex(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error updating library index: %v", err), feedback.ErrGeneric) + } + if res().GetLibrariesIndex().GetStatus() == rpc.IndexUpdateReport_STATUS_UPDATED { + instance.Init(ctx, srv, inst) } - searchResp, err := lib.LibrarySearch(context.Background(), &rpc.LibrarySearchRequest{ + // Perform library search + searchResp, err := srv.LibrarySearch(ctx, &rpc.LibrarySearchRequest{ Instance: inst, SearchArgs: strings.Join(args, " "), OmitReleasesDetails: omitReleasesDetails, }) if err != nil { - feedback.Fatal(tr("Error searching for Libraries: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error searching for Libraries: %v", err), feedback.ErrGeneric) } - feedback.PrintResult(result{ - results: searchResp, + feedback.PrintResult(librarySearchResult{ + results: result.NewLibrarySearchResponse(searchResp), namesOnly: namesOnly, }) @@ -89,12 +136,12 @@ func runSearchCommand(args []string, namesOnly bool, omitReleasesDetails bool) { // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation -type result struct { - results *rpc.LibrarySearchResponse +type librarySearchResult struct { + results *result.LibrarySearchResponse namesOnly bool } -func (res result) Data() interface{} { +func (res librarySearchResult) Data() interface{} { if res.namesOnly { type LibName struct { Name string `json:"name"` @@ -105,89 +152,69 @@ func (res result) Data() interface{} { } names := []LibName{} - results := res.results.GetLibraries() - for _, lib := range results { + for _, lib := range res.results.Libraries { names = append(names, LibName{lib.Name}) } - return NamesOnly{ - names, - } + return NamesOnly{names} } return res.results } -func (res result) String() string { - results := res.results.GetLibraries() +func (res librarySearchResult) String() string { + results := res.results.Libraries if len(results) == 0 { - return tr("No libraries matching your search.") + return i18n.Tr("No libraries matching your search.") } var out strings.Builder - if res.results.GetStatus() == rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_FAILED { - out.WriteString(tr("No libraries matching your search.\nDid you mean...\n")) + if res.results.Status == result.LibrarySearchStatusFailed { + out.WriteString(i18n.Tr("No libraries matching your search.\nDid you mean...\n")) } for _, lib := range results { - if res.results.GetStatus() == rpc.LibrarySearchStatus_LIBRARY_SEARCH_STATUS_SUCCESS { - out.WriteString(tr(`Name: "%s"`, lib.Name) + "\n") + if res.results.Status == result.LibrarySearchStatusSuccess { + out.WriteString(i18n.Tr(`Name: "%s"`, lib.Name) + "\n") if res.namesOnly { continue } } else { - out.WriteString(fmt.Sprintf("%s\n", lib.Name)) + out.WriteString(lib.Name + "\n") continue } - latest := lib.GetLatest() + latest := lib.Latest deps := []string{} - for _, dep := range latest.GetDependencies() { - if dep.GetVersionConstraint() == "" { - deps = append(deps, dep.GetName()) + for _, dep := range latest.Dependencies { + if dep.VersionConstraint == "" { + deps = append(deps, dep.Name) } else { - deps = append(deps, dep.GetName()+" ("+dep.GetVersionConstraint()+")") + deps = append(deps, dep.Name+" ("+dep.VersionConstraint+")") } } - out.WriteString(fmt.Sprintf(" "+tr("Author: %s")+"\n", latest.Author)) - out.WriteString(fmt.Sprintf(" "+tr("Maintainer: %s")+"\n", latest.Maintainer)) - out.WriteString(fmt.Sprintf(" "+tr("Sentence: %s")+"\n", latest.Sentence)) - out.WriteString(fmt.Sprintf(" "+tr("Paragraph: %s")+"\n", latest.Paragraph)) - out.WriteString(fmt.Sprintf(" "+tr("Website: %s")+"\n", latest.Website)) + out.WriteString(" " + i18n.Tr("Author: %s", latest.Author) + "\n") + out.WriteString(" " + i18n.Tr("Maintainer: %s", latest.Maintainer) + "\n") + out.WriteString(" " + i18n.Tr("Sentence: %s", latest.Sentence) + "\n") + out.WriteString(" " + i18n.Tr("Paragraph: %s", latest.Paragraph) + "\n") + out.WriteString(" " + i18n.Tr("Website: %s", latest.Website) + "\n") if latest.License != "" { - out.WriteString(fmt.Sprintf(" "+tr("License: %s")+"\n", latest.License)) + out.WriteString(" " + i18n.Tr("License: %s", latest.License) + "\n") } - out.WriteString(fmt.Sprintf(" "+tr("Category: %s")+"\n", latest.Category)) - out.WriteString(fmt.Sprintf(" "+tr("Architecture: %s")+"\n", strings.Join(latest.Architectures, ", "))) - out.WriteString(fmt.Sprintf(" "+tr("Types: %s")+"\n", strings.Join(latest.Types, ", "))) - out.WriteString(fmt.Sprintf(" "+tr("Versions: %s")+"\n", strings.ReplaceAll(fmt.Sprint(lib.GetAvailableVersions()), " ", ", "))) + out.WriteString(" " + i18n.Tr("Category: %s", latest.Category) + "\n") + out.WriteString(" " + i18n.Tr("Architecture: %s", strings.Join(latest.Architectures, ", ")) + "\n") + out.WriteString(" " + i18n.Tr("Types: %s", strings.Join(latest.Types, ", ")) + "\n") + out.WriteString(" " + i18n.Tr("Versions: %s", strings.ReplaceAll(fmt.Sprint(lib.AvailableVersions), " ", ", ")) + "\n") if len(latest.ProvidesIncludes) > 0 { - out.WriteString(fmt.Sprintf(" "+tr("Provides includes: %s")+"\n", strings.Join(latest.ProvidesIncludes, ", "))) + out.WriteString(" " + i18n.Tr("Provides includes: %s", strings.Join(latest.ProvidesIncludes, ", ")) + "\n") } if len(latest.Dependencies) > 0 { - out.WriteString(fmt.Sprintf(" "+tr("Dependencies: %s")+"\n", strings.Join(deps, ", "))) + out.WriteString(" " + i18n.Tr("Dependencies: %s", strings.Join(deps, ", ")) + "\n") } } return out.String() } - -// indexNeedsUpdating returns whether library_index.json needs updating -func indexNeedsUpdating(timeout time.Duration) bool { - // Library index path is constant (relative to the data directory). - // It does not depend on board manager URLs or any other configuration. - dataDir := configuration.Settings.GetString("directories.Data") - indexPath := paths.New(dataDir).Join("library_index.json") - // Verify the index file exists and we can read its fstat attrs. - if indexPath.NotExist() { - return true - } - info, err := indexPath.Stat() - if err != nil { - return true - } - return time.Since(info.ModTime()) > timeout -} diff --git a/internal/cli/lib/uninstall.go b/internal/cli/lib/uninstall.go index 897b0203320..35855ad47fa 100644 --- a/internal/cli/lib/uninstall.go +++ b/internal/cli/lib/uninstall.go @@ -20,47 +20,51 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/lib" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUninstallCommand() *cobra.Command { +func initUninstallCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { uninstallCommand := &cobra.Command{ - Use: fmt.Sprintf("uninstall %s...", tr("LIBRARY_NAME")), - Short: tr("Uninstalls one or more libraries."), - Long: tr("Uninstalls one or more libraries."), + Use: fmt.Sprintf("uninstall %s...", i18n.Tr("LIBRARY_NAME")), + Short: i18n.Tr("Uninstalls one or more libraries."), + Long: i18n.Tr("Uninstalls one or more libraries."), Example: " " + os.Args[0] + " lib uninstall AudioZero", Args: cobra.MinimumNArgs(1), - Run: runUninstallCommand, + Run: func(cmd *cobra.Command, args []string) { + runUninstallCommand(cmd.Context(), srv, args) + }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return arguments.GetUninstallableLibraries(), cobra.ShellCompDirectiveDefault + return arguments.GetUninstallableLibraries(cmd.Context(), srv), cobra.ShellCompDirectiveDefault }, } return uninstallCommand } -func runUninstallCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runUninstallCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli lib uninstall`") + instance := instance.CreateAndInit(ctx, srv) - refs, err := ParseLibraryReferenceArgsAndAdjustCase(instance, args) + refs, err := ParseLibraryReferenceArgsAndAdjustCase(ctx, srv, instance, args) if err != nil { - feedback.Fatal(tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Invalid argument passed: %v", err), feedback.ErrBadArgument) } for _, library := range refs { - err := lib.LibraryUninstall(context.Background(), &rpc.LibraryUninstallRequest{ + req := &rpc.LibraryUninstallRequest{ Instance: instance, Name: library.Name, Version: library.Version, - }, feedback.TaskProgress()) - if err != nil { - feedback.Fatal(tr("Error uninstalling %[1]s: %[2]v", library, err), feedback.ErrGeneric) + } + stream := commands.LibraryUninstallStreamResponseToCallbackFunction(ctx, feedback.TaskProgress()) + if err := srv.LibraryUninstall(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error uninstalling %[1]s: %[2]v", library, err), feedback.ErrGeneric) } } diff --git a/internal/cli/lib/update_index.go b/internal/cli/lib/update_index.go index 9c989254bea..8bdb42e2af9 100644 --- a/internal/cli/lib/update_index.go +++ b/internal/cli/lib/update_index.go @@ -21,36 +21,54 @@ import ( "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUpdateIndexCommand() *cobra.Command { +func initUpdateIndexCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { updateIndexCommand := &cobra.Command{ Use: "update-index", - Short: tr("Updates the libraries index."), - Long: tr("Updates the libraries index to the latest version."), + Short: i18n.Tr("Updates the libraries index."), + Long: i18n.Tr("Updates the libraries index to the latest version."), Example: " " + os.Args[0] + " lib update-index", Args: cobra.NoArgs, - Run: runUpdateIndexCommand, + Run: func(cmd *cobra.Command, args []string) { + runUpdateIndexCommand(cmd.Context(), srv) + }, } return updateIndexCommand } -func runUpdateIndexCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runUpdateIndexCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { + inst := instance.CreateAndInit(ctx, srv) + logrus.Info("Executing `arduino-cli lib update-index`") - UpdateIndex(inst) + resp := UpdateIndex(ctx, srv, inst) + feedback.PrintResult(&libUpdateIndexResult{result.NewUpdateLibrariesIndexResponse_ResultResult(resp)}) } // UpdateIndex updates the index of libraries. -func UpdateIndex(inst *rpc.Instance) { - err := commands.UpdateLibrariesIndex(context.Background(), &rpc.UpdateLibrariesIndexRequest{ - Instance: inst, - }, feedback.ProgressBar()) - if err != nil { - feedback.Fatal(tr("Error updating library index: %v", err), feedback.ErrGeneric) +func UpdateIndex(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance) *rpc.UpdateLibrariesIndexResponse_Result { + req := &rpc.UpdateLibrariesIndexRequest{Instance: inst} + stream, resp := commands.UpdateLibrariesIndexStreamResponseToCallbackFunction(ctx, feedback.ProgressBar()) + if err := srv.UpdateLibrariesIndex(req, stream); err != nil { + feedback.Fatal(i18n.Tr("Error updating library index: %v", err), feedback.ErrGeneric) } + return resp() +} + +type libUpdateIndexResult struct { + *result.UpdateLibrariesIndexResponse_ResultResult +} + +func (l *libUpdateIndexResult) String() string { + return "" +} + +func (l *libUpdateIndexResult) Data() interface{} { + return l } diff --git a/internal/cli/lib/upgrade.go b/internal/cli/lib/upgrade.go index 5375e5d6795..008eea8fdb9 100644 --- a/internal/cli/lib/upgrade.go +++ b/internal/cli/lib/upgrade.go @@ -20,55 +20,59 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/commands/lib" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initUpgradeCommand() *cobra.Command { +func initUpgradeCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { upgradeCommand := &cobra.Command{ Use: "upgrade", - Short: tr("Upgrades installed libraries."), - Long: tr("This command upgrades an installed library to the latest available version. Multiple libraries can be passed separated by a space. If no arguments are provided, the command will upgrade all the installed libraries where an update is available."), + Short: i18n.Tr("Upgrades installed libraries."), + Long: i18n.Tr("This command upgrades an installed library to the latest available version. Multiple libraries can be passed separated by a space. If no arguments are provided, the command will upgrade all the installed libraries where an update is available."), Example: " " + os.Args[0] + " lib upgrade \n" + " " + os.Args[0] + " lib upgrade Audio\n" + " " + os.Args[0] + " lib upgrade Audio ArduinoJson", Args: cobra.ArbitraryArgs, - Run: runUpgradeCommand, + Run: func(cmd *cobra.Command, args []string) { + runUpgradeCommand(cmd.Context(), srv, args) + }, } return upgradeCommand } -func runUpgradeCommand(cmd *cobra.Command, args []string) { - instance := instance.CreateAndInit() +func runUpgradeCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string) { logrus.Info("Executing `arduino-cli lib upgrade`") - Upgrade(instance, args) + instance := instance.CreateAndInit(ctx, srv) + Upgrade(ctx, srv, instance, args) } // Upgrade upgrades the specified libraries -func Upgrade(instance *rpc.Instance, libraries []string) { +func Upgrade(ctx context.Context, srv rpc.ArduinoCoreServiceServer, instance *rpc.Instance, libraries []string) { var upgradeErr error if len(libraries) == 0 { req := &rpc.LibraryUpgradeAllRequest{Instance: instance} - upgradeErr = lib.LibraryUpgradeAll(req, feedback.ProgressBar(), feedback.TaskProgress()) + stream := commands.LibraryUpgradeAllStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + upgradeErr = srv.LibraryUpgradeAll(req, stream) } else { for _, libName := range libraries { req := &rpc.LibraryUpgradeRequest{ Instance: instance, Name: libName, } - upgradeErr = lib.LibraryUpgrade(context.Background(), req, feedback.ProgressBar(), feedback.TaskProgress()) - if upgradeErr != nil { + stream := commands.LibraryUpgradeStreamResponseToCallbackFunction(ctx, feedback.ProgressBar(), feedback.TaskProgress()) + if upgradeErr = srv.LibraryUpgrade(req, stream); upgradeErr != nil { break } } } if upgradeErr != nil { - feedback.Fatal(fmt.Sprintf("%s: %v", tr("Error upgrading libraries"), upgradeErr), feedback.ErrGeneric) + feedback.Fatal(fmt.Sprintf("%s: %v", i18n.Tr("Error upgrading libraries"), upgradeErr), feedback.ErrGeneric) } logrus.Info("Done") diff --git a/internal/cli/monitor/monitor.go b/internal/cli/monitor/monitor.go index b15cd5bb436..0254e174553 100644 --- a/internal/cli/monitor/monitor.go +++ b/internal/cli/monitor/monitor.go @@ -17,147 +17,197 @@ package monitor import ( "bytes" + "cmp" "context" "errors" - "fmt" "io" "os" + "slices" "sort" "strings" "time" - "github.com/arduino/arduino-cli/commands/monitor" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" + "github.com/arduino/go-properties-orderedmap" "github.com/fatih/color" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "go.bug.st/cleanup" ) -var tr = i18n.Tr - // NewCommand created a new `monitor` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var ( - raw bool - portArgs arguments.Port - describe bool - configs []string - quiet bool - timestamp bool - fqbn arguments.Fqbn + portArgs arguments.Port + fqbnArg arguments.Fqbn + profileArg arguments.Profile + raw bool + describe bool + configs []string + quiet bool + timestamp bool ) monitorCommand := &cobra.Command{ Use: "monitor", - Short: tr("Open a communication port with a board."), - Long: tr("Open a communication port with a board."), + Short: i18n.Tr("Open a communication port with a board."), + Long: i18n.Tr("Open a communication port with a board."), Example: "" + " " + os.Args[0] + " monitor -p /dev/ttyACM0\n" + + " " + os.Args[0] + " monitor -p /dev/ttyACM0 -b arduino:avr:uno\n" + + " " + os.Args[0] + " monitor -p /dev/ttyACM0 --config 115200\n" + " " + os.Args[0] + " monitor -p /dev/ttyACM0 --describe", Run: func(cmd *cobra.Command, args []string) { - runMonitorCmd(&portArgs, &fqbn, configs, describe, timestamp, quiet, raw) + sketchPath := "" + if len(args) > 0 { + sketchPath = args[0] + } + runMonitorCmd(cmd.Context(), srv, &portArgs, &fqbnArg, &profileArg, sketchPath, configs, describe, timestamp, quiet, raw) }, } - portArgs.AddToCommand(monitorCommand) - monitorCommand.Flags().BoolVar(&raw, "raw", false, tr("Set terminal in raw mode (unbuffered).")) - monitorCommand.Flags().BoolVar(&describe, "describe", false, tr("Show all the settings of the communication port.")) - monitorCommand.Flags().StringSliceVarP(&configs, "config", "c", []string{}, tr("Configure communication port settings. The format is <ID>=<value>[,<ID>=<value>]...")) - monitorCommand.Flags().BoolVarP(&quiet, "quiet", "q", false, tr("Run in silent mode, show only monitor input and output.")) - monitorCommand.Flags().BoolVar(×tamp, "timestamp", false, tr("Timestamp each incoming line.")) - fqbn.AddToCommand(monitorCommand) - monitorCommand.MarkFlagRequired("port") + portArgs.AddToCommand(monitorCommand, srv) + profileArg.AddToCommand(monitorCommand, srv) + monitorCommand.Flags().BoolVar(&raw, "raw", false, i18n.Tr("Set terminal in raw mode (unbuffered).")) + monitorCommand.Flags().BoolVar(&describe, "describe", false, i18n.Tr("Show all the settings of the communication port.")) + monitorCommand.Flags().StringSliceVarP(&configs, "config", "c", []string{}, i18n.Tr("Configure communication port settings. The format is <ID>=<value>[,<ID>=<value>]...")) + monitorCommand.Flags().BoolVarP(&quiet, "quiet", "q", false, i18n.Tr("Run in silent mode, show only monitor input and output.")) + monitorCommand.Flags().BoolVar(×tamp, "timestamp", false, i18n.Tr("Timestamp each incoming line.")) + fqbnArg.AddToCommand(monitorCommand, srv) return monitorCommand } -func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []string, describe, timestamp, quiet, raw bool) { - instance := instance.CreateAndInit() +func runMonitorCmd( + ctx context.Context, srv rpc.ArduinoCoreServiceServer, + portArgs *arguments.Port, fqbnArg *arguments.Fqbn, profileArg *arguments.Profile, sketchPathArg string, + configs []string, describe, timestamp, quiet, raw bool, +) { logrus.Info("Executing `arduino-cli monitor`") - if !configuration.HasConsole { + if !feedback.HasConsole() { quiet = true } - // TODO: Should use sketch default_port/protocol? - portAddress, portProtocol, err := portArgs.GetPortAddressAndProtocol(instance, "", "") + // Flags takes maximum precedence over sketch.yaml + // If {--port --fqbn --profile} are set we ignore the profile. + // If both {--port --profile} are set we read the fqbn in the following order: profile -> default_fqbn -> discovery + // If only --port is set we read the fqbn in the following order: default_fqbn -> discovery + // If only --fqbn is set we read the port in the following order: default_port + sketchPath := arguments.InitSketchPath(sketchPathArg) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + if err != nil && !portArgs.IsPortFlagSet() { + feedback.Fatal( + i18n.Tr("Error getting default port from `sketch.yaml`. Check if you're in the correct sketch folder or provide the --port flag: %s", err), + feedback.ErrGeneric, + ) + } + sketch := resp.GetSketch() + + var inst *rpc.Instance + var profile *rpc.SketchProfile + if profileArg.Get() == "" { + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, sketch.GetDefaultProfile().GetName(), sketchPath) + } else { + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, profileArg.Get(), sketchPath) + } + if inst == nil { + inst = instance.CreateAndInit(ctx, srv) + } + + // Priority on how to retrieve the fqbn + // 1. from flag + // 2. from profile + // 3. from default_fqbn specified in the sketch.yaml + // 4. try to detect from the port + var fqbn string + switch { + case fqbnArg.String() != "": + fqbn = fqbnArg.String() + case profile.GetFqbn() != "": + fqbn = profile.GetFqbn() + case sketch.GetDefaultFqbn() != "": + fqbn = sketch.GetDefaultFqbn() + default: + fqbn, _, _ = portArgs.DetectFQBN(ctx, inst, srv) + } + + var defaultPort, defaultProtocol string + if sketch != nil { + defaultPort, defaultProtocol = sketch.GetDefaultPort(), sketch.GetDefaultProtocol() + } + portAddress, portProtocol, err := portArgs.GetPortAddressAndProtocol(ctx, inst, srv, defaultPort, defaultProtocol, profile) if err != nil { feedback.FatalError(err, feedback.ErrGeneric) } - enumerateResp, err := monitor.EnumerateMonitorPortSettings(context.Background(), &rpc.EnumerateMonitorPortSettingsRequest{ - Instance: instance, + defaultSettings, err := srv.EnumerateMonitorPortSettings(ctx, &rpc.EnumerateMonitorPortSettingsRequest{ + Instance: inst, PortProtocol: portProtocol, - Fqbn: fqbn.String(), + Fqbn: fqbn, }) if err != nil { - feedback.Fatal(tr("Error getting port settings details: %s", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error getting port settings details: %s", err), feedback.ErrGeneric) } if describe { - feedback.PrintResult(&detailsResult{Settings: enumerateResp.Settings}) + settings := make([]*result.MonitorPortSettingDescriptor, len(defaultSettings.GetSettings())) + for i, v := range defaultSettings.GetSettings() { + settings[i] = result.NewMonitorPortSettingDescriptor(v) + } + feedback.PrintResult(&detailsResult{Settings: settings}) return } - configuration := &rpc.MonitorPortConfiguration{} - if len(configs) > 0 { - for _, config := range configs { - split := strings.SplitN(config, "=", 2) - k := "" - v := config - if len(split) == 2 { - k = split[0] - v = split[1] - } - - var setting *rpc.MonitorPortSettingDescriptor - for _, s := range enumerateResp.GetSettings() { - if k == "" { - if contains(s.EnumValues, v) { - setting = s - break - } - } else { - if strings.EqualFold(s.SettingId, k) { - if !contains(s.EnumValues, v) { - feedback.Fatal(tr("invalid port configuration value for %s: %s", k, v), feedback.ErrBadArgument) - } - setting = s - break + // This utility finds the settings descriptor from key/value or only from key. + // It fails fatal if the key or value are invalid. + searchSettingDescriptor := func(k, v string) *rpc.MonitorPortSettingDescriptor { + for _, s := range defaultSettings.GetSettings() { + if k == "" { + if contains(s.GetEnumValues(), v) { + return s + } + } else { + if strings.EqualFold(s.GetSettingId(), k) { + if !contains(s.GetEnumValues(), v) { + feedback.Fatal(i18n.Tr("invalid port configuration value for %s: %s", k, v), feedback.ErrBadArgument) } + return s } } - if setting == nil { - feedback.Fatal(tr("invalid port configuration: %s", config), feedback.ErrBadArgument) - } - configuration.Settings = append(configuration.Settings, &rpc.MonitorPortSetting{ - SettingId: setting.SettingId, - Value: v, - }) - if !quiet { - feedback.Print(tr("Monitor port settings:")) - feedback.Print(fmt.Sprintf("%s=%s", setting.SettingId, v)) - } } + feedback.Fatal(i18n.Tr("invalid port configuration: %s=%s", k, v), feedback.ErrBadArgument) + return nil } - portProxy, _, err := monitor.Monitor(context.Background(), &rpc.MonitorRequest{ - Instance: instance, - Port: &rpc.Port{Address: portAddress, Protocol: portProtocol}, - Fqbn: fqbn.String(), - PortConfiguration: configuration, - }) - if err != nil { - feedback.FatalError(err, feedback.ErrGeneric) + + // Build configuration by layering + layeredPortConfig := properties.NewMap() + setConfig := func(k, v string) { + settingDesc := searchSettingDescriptor(k, v) + layeredPortConfig.Set(settingDesc.GetSettingId(), v) } - defer portProxy.Close() - if !quiet { - feedback.Print(tr("Connected to %s! Press CTRL-C to exit.", portAddress)) + // Layer 1: apply configuration from sketch profile... + profileConfig := profile.GetPortConfig() + if profileConfig == nil { + // ...or from sketch default... + profileConfig = sketch.GetDefaultPortConfig() + } + for _, setting := range profileConfig.GetSettings() { + setConfig(setting.SettingId, setting.Value) } + // Layer 2: apply configuration from command line... + for _, config := range configs { + if split := strings.SplitN(config, "=", 2); len(split) == 2 { + setConfig(split[0], split[1]) + } else { + setConfig("", config) + } + } ttyIn, ttyOut, err := feedback.InteractiveStreams() if err != nil { feedback.FatalError(err, feedback.ErrGeneric) @@ -167,12 +217,14 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str ttyOut = newTimeStampWriter(ttyOut) } - ctx, cancel := cleanup.InterruptableContext(context.Background()) + ctx, cancel := cleanup.InterruptableContext(ctx) if raw { - feedback.SetRawModeStdin() - defer func() { - feedback.RestoreModeStdin() - }() + if feedback.IsInteractive() { + if err := feedback.SetRawModeStdin(); err != nil { + feedback.Warning(i18n.Tr("Error setting raw mode: %s", err.Error())) + } + defer feedback.RestoreModeStdin() + } // In RAW mode CTRL-C is not converted into an Interrupt by // the terminal, we must intercept ASCII 3 (CTRL-C) on our own... @@ -182,12 +234,57 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str } ttyIn = io.TeeReader(ttyIn, ctrlCDetector) } + var portConfiguration []*rpc.MonitorPortSetting + for k, v := range layeredPortConfig.AsMap() { + portConfiguration = append(portConfiguration, &rpc.MonitorPortSetting{ + SettingId: k, + Value: v, + }) + } + monitorServer, portProxy := commands.MonitorServerToReadWriteCloser(ctx, &rpc.MonitorPortOpenRequest{ + Instance: inst, + Port: &rpc.Port{Address: portAddress, Protocol: portProtocol}, + Fqbn: fqbn, + PortConfiguration: &rpc.MonitorPortConfiguration{ + Settings: portConfiguration, + }, + }) + go func() { + if !quiet { + if layeredPortConfig.Size() == 0 { + if fqbn != "" { + feedback.Print(i18n.Tr("Using default monitor configuration for board: %s", fqbn)) + } else if portProtocol == "serial" { + feedback.Print(i18n.Tr("Using generic monitor configuration.\nWARNING: Your board may require different settings to work!\n")) + } + } + feedback.Print(i18n.Tr("Monitor port settings:")) + slices.SortFunc(defaultSettings.GetSettings(), func(a, b *rpc.MonitorPortSettingDescriptor) int { + return cmp.Compare(a.GetSettingId(), b.GetSettingId()) + }) + for _, defaultSetting := range defaultSettings.GetSettings() { + k := defaultSetting.GetSettingId() + v, ok := layeredPortConfig.GetOk(k) + if !ok { + v = defaultSetting.GetValue() + } + feedback.Printf(" %s=%s", k, v) + } + feedback.Print("") + feedback.Print(i18n.Tr("Connecting to %s. Press CTRL-C to exit.", portAddress)) + } + if err := srv.Monitor(monitorServer); err != nil { + feedback.FatalError(err, feedback.ErrGeneric) + } + portProxy.Close() + cancel() + }() go func() { _, err := io.Copy(ttyOut, portProxy) if err != nil && !errors.Is(err, io.EOF) { if !quiet { - feedback.Print(tr("Port closed: %v", err)) + feedback.Print(i18n.Tr("Port closed: %v", err)) } } cancel() @@ -196,7 +293,7 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str _, err := io.Copy(portProxy, ttyIn) if err != nil && !errors.Is(err, io.EOF) { if !quiet { - feedback.Print(tr("Port closed: %v", err)) + feedback.Print(i18n.Tr("Port closed: %v", err)) } } cancel() @@ -219,7 +316,7 @@ func (cd *charDetectorWriter) Write(buf []byte) (int, error) { } type detailsResult struct { - Settings []*rpc.MonitorPortSettingDescriptor `json:"settings"` + Settings []*result.MonitorPortSettingDescriptor `json:"settings"` } func (r *detailsResult) Data() interface{} { @@ -227,9 +324,13 @@ func (r *detailsResult) Data() interface{} { } func (r *detailsResult) String() string { + if len(r.Settings) == 0 { + return "" + } t := table.New() + t.SetHeader(i18n.Tr("ID"), i18n.Tr("Setting"), i18n.Tr("Default"), i18n.Tr("Values")) + green := color.New(color.FgGreen) - t.SetHeader(tr("ID"), tr("Setting"), tr("Default"), tr("Values")) sort.Slice(r.Settings, func(i, j int) bool { return r.Settings[i].Label < r.Settings[j].Label }) diff --git a/internal/cli/outdated/outdated.go b/internal/cli/outdated/outdated.go index 8a56f21b36a..ce9b3c87510 100644 --- a/internal/cli/outdated/outdated.go +++ b/internal/cli/outdated/outdated.go @@ -16,56 +16,74 @@ package outdated import ( + "context" "fmt" "os" "sort" "strings" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/core" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" + "github.com/arduino/arduino-cli/internal/cli/feedback/table" "github.com/arduino/arduino-cli/internal/cli/instance" "github.com/arduino/arduino-cli/internal/cli/lib" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/table" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand creates a new `outdated` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { outdatedCommand := &cobra.Command{ Use: "outdated", - Short: tr("Lists cores and libraries that can be upgraded"), - Long: tr(`This commands shows a list of installed cores and/or libraries + Short: i18n.Tr("Lists cores and libraries that can be upgraded"), + Long: i18n.Tr(`This commands shows a list of installed cores and/or libraries that can be upgraded. If nothing needs to be updated the output is empty.`), Example: " " + os.Args[0] + " outdated\n", Args: cobra.NoArgs, - Run: runOutdatedCommand, + Run: func(cmd *cobra.Command, args []string) { + runOutdatedCommand(cmd.Context(), srv) + }, } return outdatedCommand } -func runOutdatedCommand(cmd *cobra.Command, args []string) { - inst := instance.CreateAndInit() +func runOutdatedCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli outdated`") - Outdated(inst) + inst := instance.CreateAndInit(ctx, srv) + Outdated(ctx, srv, inst) } // Outdated prints a list of outdated platforms and libraries -func Outdated(inst *rpc.Instance) { +func Outdated(ctx context.Context, srv rpc.ArduinoCoreServiceServer, inst *rpc.Instance) { feedback.PrintResult( - outdatedResult{core.GetList(inst, false, true), lib.GetList(inst, []string{}, false, true)}, + newOutdatedResult( + core.GetList(ctx, srv, inst, false, true), + lib.GetList(ctx, srv, inst, []string{}, false, true)), ) } // output from this command requires special formatting, let's create a dedicated // feedback.Result implementation type outdatedResult struct { - Platforms []*rpc.Platform `json:"platforms,omitempty"` - InstalledLibs []*rpc.InstalledLibrary `json:"libraries,omitempty"` + Platforms []*result.PlatformSummary `json:"platforms,omitempty"` + InstalledLibs []*result.InstalledLibrary `json:"libraries,omitempty"` +} + +func newOutdatedResult(inPlatforms []*rpc.PlatformSummary, inLibraries []*rpc.InstalledLibrary) *outdatedResult { + res := &outdatedResult{ + Platforms: make([]*result.PlatformSummary, len(inPlatforms)), + InstalledLibs: make([]*result.InstalledLibrary, len(inLibraries)), + } + for i, v := range inPlatforms { + res.Platforms[i] = result.NewPlatformSummary(v) + } + for i, v := range inLibraries { + res.InstalledLibs[i] = result.NewInstalledLibrary(v) + } + return res } func (ir outdatedResult) Data() interface{} { @@ -74,18 +92,18 @@ func (ir outdatedResult) Data() interface{} { func (ir outdatedResult) String() string { if len(ir.Platforms) == 0 && len(ir.InstalledLibs) == 0 { - return tr("No outdated platforms or libraries found.") + return i18n.Tr("No outdated platforms or libraries found.") } // A table useful both for platforms and libraries, where some of the fields will be blank. t := table.New() t.SetHeader( - tr("ID"), - tr("Name"), - tr("Installed"), - tr("Latest"), - tr("Location"), - tr("Description"), + i18n.Tr("ID"), + i18n.Tr("Name"), + i18n.Tr("Installed"), + i18n.Tr("Latest"), + i18n.Tr("Location"), + i18n.Tr("Description"), ) t.SetColumnWidthMode(2, table.Average) t.SetColumnWidthMode(3, table.Average) @@ -93,11 +111,14 @@ func (ir outdatedResult) String() string { // Based on internal/cli/core/list.go for _, p := range ir.Platforms { - name := p.Name + name := "" + if latest := p.GetLatestRelease(); latest != nil { + name = latest.Name + } if p.Deprecated { - name = fmt.Sprintf("[%s] %s", tr("DEPRECATED"), name) + name = fmt.Sprintf("[%s] %s", i18n.Tr("DEPRECATED"), name) } - t.AddRow(p.Id, name, p.Installed, p.Latest, "", "") + t.AddRow(p.Id, name, p.InstalledVersion, p.LatestVersion, "", "") } // Based on internal/cli/lib/list.go @@ -115,7 +136,7 @@ func (ir outdatedResult) String() string { }) lastName := "" for _, libMeta := range ir.InstalledLibs { - lib := libMeta.GetLibrary() + lib := libMeta.Library name := lib.Name if name == lastName { name = ` "` @@ -123,15 +144,15 @@ func (ir outdatedResult) String() string { lastName = name } - location := lib.GetLocation().String() + location := string(lib.Location) if lib.ContainerPlatform != "" { - location = lib.GetContainerPlatform() + location = lib.ContainerPlatform } available := "" sentence := "" - if libMeta.GetRelease() != nil { - available = libMeta.GetRelease().GetVersion() + if libMeta.Release != nil { + available = libMeta.Release.Version sentence = lib.Sentence } diff --git a/internal/cli/sketch/archive.go b/internal/cli/sketch/archive.go index e21221aa3e7..4c1063bbf5a 100644 --- a/internal/cli/sketch/archive.go +++ b/internal/cli/sketch/archive.go @@ -20,22 +20,22 @@ import ( "fmt" "os" - sk "github.com/arduino/arduino-cli/commands/sketch" + "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) // initArchiveCommand creates a new `archive` command -func initArchiveCommand() *cobra.Command { +func initArchiveCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var includeBuildDir, overwrite bool archiveCommand := &cobra.Command{ - Use: fmt.Sprintf("archive <%s> <%s>", tr("sketchPath"), tr("archivePath")), - Short: tr("Creates a zip file containing all sketch files."), - Long: tr("Creates a zip file containing all sketch files."), + Use: fmt.Sprintf("archive <%s> <%s>", i18n.Tr("sketchPath"), i18n.Tr("archivePath")), + Short: i18n.Tr("Creates a zip file containing all sketch files."), + Long: i18n.Tr("Creates a zip file containing all sketch files."), Example: "" + " " + os.Args[0] + " archive\n" + " " + os.Args[0] + " archive .\n" + @@ -43,41 +43,45 @@ func initArchiveCommand() *cobra.Command { " " + os.Args[0] + " archive /home/user/Arduino/MySketch\n" + " " + os.Args[0] + " archive /home/user/Arduino/MySketch /home/user/MySketchArchive.zip", Args: cobra.MaximumNArgs(2), - Run: func(cmd *cobra.Command, args []string) { runArchiveCommand(args, includeBuildDir, overwrite) }, + Run: func(cmd *cobra.Command, args []string) { + runArchiveCommand(cmd.Context(), srv, args, includeBuildDir, overwrite) + }, } - archiveCommand.Flags().BoolVar(&includeBuildDir, "include-build-dir", false, tr("Includes %s directory in the archive.", "build")) - archiveCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, tr("Overwrites an already existing archive")) + archiveCommand.Flags().BoolVar(&includeBuildDir, "include-build-dir", false, i18n.Tr("Includes %s directory in the archive.", "build")) + archiveCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, i18n.Tr("Overwrites an already existing archive")) return archiveCommand } -func runArchiveCommand(args []string, includeBuildDir bool, overwrite bool) { +func runArchiveCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, includeBuildDir bool, overwrite bool) { logrus.Info("Executing `arduino-cli sketch archive`") - - sketchPath := paths.New(".") - if len(args) >= 1 { - sketchPath = paths.New(args[0]) + sketchPathArg := "" + if len(args) > 0 { + sketchPathArg = args[0] } - if msg := sk.WarnDeprecatedFiles(sketchPath); msg != "" { - feedback.Warning(msg) + archivePathArg := "" + if len(args) > 1 { + archivePathArg = args[1] } - archivePath := "" - if len(args) == 2 { - archivePath = args[1] + sketchPath := arguments.InitSketchPath(sketchPathArg) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + if err != nil { + feedback.FatalError(err, feedback.ErrGeneric) } + sk := resp.GetSketch() + feedback.WarnAboutDeprecatedFiles(sk) - _, err := sk.ArchiveSketch(context.Background(), + if _, err := srv.ArchiveSketch(ctx, &rpc.ArchiveSketchRequest{ SketchPath: sketchPath.String(), - ArchivePath: archivePath, + ArchivePath: archivePathArg, IncludeBuildDir: includeBuildDir, Overwrite: overwrite, - }) - - if err != nil { - feedback.Fatal(tr("Error archiving: %v", err), feedback.ErrGeneric) + }, + ); err != nil { + feedback.Fatal(i18n.Tr("Error archiving: %v", err), feedback.ErrGeneric) } } diff --git a/internal/cli/sketch/new.go b/internal/cli/sketch/new.go index ff141417ad0..024d53e851c 100644 --- a/internal/cli/sketch/new.go +++ b/internal/cli/sketch/new.go @@ -20,33 +20,35 @@ import ( "os" "strings" - "github.com/arduino/arduino-cli/arduino/globals" - sk "github.com/arduino/arduino-cli/commands/sketch" + "github.com/arduino/arduino-cli/internal/arduino/globals" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -func initNewCommand() *cobra.Command { +func initNewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var overwrite bool newCommand := &cobra.Command{ Use: "new", - Short: tr("Create a new Sketch"), - Long: tr("Create a new Sketch"), + Short: i18n.Tr("Create a new Sketch"), + Long: i18n.Tr("Create a new Sketch"), Example: " " + os.Args[0] + " sketch new MultiBlinker", Args: cobra.ExactArgs(1), - Run: func(cmd *cobra.Command, args []string) { runNewCommand(args, overwrite) }, + Run: func(cmd *cobra.Command, args []string) { + runNewCommand(cmd.Context(), srv, args, overwrite) + }, } - newCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, tr("Overwrites an existing .ino sketch.")) + newCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, i18n.Tr("Overwrites an existing .ino sketch.")) return newCommand } -func runNewCommand(args []string, overwrite bool) { +func runNewCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, overwrite bool) { logrus.Info("Executing `arduino-cli sketch new`") // Trim to avoid issues if user creates a sketch adding the .ino extesion to the name inputSketchName := args[0] @@ -66,20 +68,32 @@ func runNewCommand(args []string, overwrite bool) { } else { sketchDirPath, err = paths.New(trimmedSketchName).Abs() if err != nil { - feedback.Fatal(tr("Error creating sketch: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error creating sketch: %v", err), feedback.ErrGeneric) } sketchDir = sketchDirPath.Parent().String() sketchName = sketchDirPath.Base() } - _, err = sk.NewSketch(context.Background(), &rpc.NewSketchRequest{ + _, err = srv.NewSketch(ctx, &rpc.NewSketchRequest{ SketchName: sketchName, SketchDir: sketchDir, Overwrite: overwrite, }) if err != nil { - feedback.Fatal(tr("Error creating sketch: %v", err), feedback.ErrGeneric) + feedback.Fatal(i18n.Tr("Error creating sketch: %v", err), feedback.ErrGeneric) } - feedback.Print(tr("Sketch created in: %s", sketchDirPath)) + feedback.PrintResult(sketchResult{SketchDirPath: sketchDirPath}) +} + +type sketchResult struct { + SketchDirPath *paths.Path `json:"sketch_path"` +} + +func (ir sketchResult) Data() interface{} { + return ir +} + +func (ir sketchResult) String() string { + return i18n.Tr("Sketch created in: %s", ir.SketchDirPath) } diff --git a/internal/cli/sketch/sketch.go b/internal/cli/sketch/sketch.go index fa172d3148e..65ae9a1838f 100644 --- a/internal/cli/sketch/sketch.go +++ b/internal/cli/sketch/sketch.go @@ -18,23 +18,22 @@ package sketch import ( "os" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand created a new `sketch` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { sketchCommand := &cobra.Command{ Use: "sketch", - Short: tr("Arduino CLI sketch commands."), - Long: tr("Arduino CLI sketch commands."), + Short: i18n.Tr("Arduino CLI sketch commands."), + Long: i18n.Tr("Arduino CLI sketch commands."), Example: " " + os.Args[0] + " sketch new MySketch", } - sketchCommand.AddCommand(initNewCommand()) - sketchCommand.AddCommand(initArchiveCommand()) + sketchCommand.AddCommand(initNewCommand(srv)) + sketchCommand.AddCommand(initArchiveCommand(srv)) return sketchCommand } diff --git a/internal/cli/update/update.go b/internal/cli/update/update.go index 693daae6244..950f347a7b4 100644 --- a/internal/cli/update/update.go +++ b/internal/cli/update/update.go @@ -16,43 +16,44 @@ package update import ( + "context" "os" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/core" "github.com/arduino/arduino-cli/internal/cli/instance" "github.com/arduino/arduino-cli/internal/cli/lib" "github.com/arduino/arduino-cli/internal/cli/outdated" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand creates a new `update` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var showOutdated bool updateCommand := &cobra.Command{ Use: "update", - Short: tr("Updates the index of cores and libraries"), - Long: tr("Updates the index of cores and libraries to the latest versions."), + Short: i18n.Tr("Updates the index of cores and libraries"), + Long: i18n.Tr("Updates the index of cores and libraries to the latest versions."), Example: " " + os.Args[0] + " update", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runUpdateCommand(showOutdated) + runUpdateCommand(cmd.Context(), srv, showOutdated) }, } - updateCommand.Flags().BoolVar(&showOutdated, "show-outdated", false, tr("Show outdated cores and libraries after index update")) + updateCommand.Flags().BoolVar(&showOutdated, "show-outdated", false, i18n.Tr("Show outdated cores and libraries after index update")) return updateCommand } -func runUpdateCommand(showOutdated bool) { - inst := instance.CreateAndInit() +func runUpdateCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, showOutdated bool) { logrus.Info("Executing `arduino-cli update`") - lib.UpdateIndex(inst) - core.UpdateIndex(inst) - instance.Init(inst) + inst := instance.CreateAndInit(ctx, srv) + + lib.UpdateIndex(ctx, srv, inst) + core.UpdateIndex(ctx, srv, inst) + instance.Init(ctx, srv, inst) if showOutdated { - outdated.Outdated(inst) + outdated.Outdated(ctx, srv, inst) } } diff --git a/internal/cli/updater/updater.go b/internal/cli/updater/updater.go index 77e73785de7..aed7c969c4e 100644 --- a/internal/cli/updater/updater.go +++ b/internal/cli/updater/updater.go @@ -17,120 +17,19 @@ package updater import ( "fmt" - "os" - "strings" - "time" - "github.com/arduino/arduino-cli/arduino/httpclient" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" - "github.com/arduino/arduino-cli/internal/inventory" - "github.com/arduino/arduino-cli/version" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/version" "github.com/fatih/color" - semver "go.bug.st/relaxed-semver" ) -var tr = i18n.Tr - -// CheckForUpdate returns the latest available version if greater than -// the one running and it makes sense to check for an update, nil in all other cases -func CheckForUpdate(currentVersion *semver.Version) *semver.Version { - if !shouldCheckForUpdate(currentVersion) { - return nil - } - - return ForceCheckForUpdate(currentVersion) -} - -// ForceCheckForUpdate always returns the latest available version if greater than -// the one running, nil in all other cases -func ForceCheckForUpdate(currentVersion *semver.Version) *semver.Version { - defer func() { - // Always save the last time we checked for updates at the end - inventory.Store.Set("updater.last_check_time", time.Now()) - inventory.WriteStore() - }() - - latestVersion, err := semver.Parse(getLatestRelease()) - if err != nil { - return nil - } - - if currentVersion.GreaterThanOrEqual(latestVersion) { - // Current version is already good enough - return nil - } - - return latestVersion -} - // NotifyNewVersionIsAvailable prints information about the new latestVersion func NotifyNewVersionIsAvailable(latestVersion string) { msg := fmt.Sprintf("\n\n%s %s → %s\n%s", - color.YellowString(tr("A new release of Arduino CLI is available:")), + color.YellowString(i18n.Tr("A new release of Arduino CLI is available:")), color.CyanString(version.VersionInfo.VersionString), color.CyanString(latestVersion), color.YellowString("https://arduino.github.io/arduino-cli/latest/installation/#latest-packages")) feedback.Warning(msg) } - -// shouldCheckForUpdate return true if it actually makes sense to check for new updates, -// false in all other cases. -func shouldCheckForUpdate(currentVersion *semver.Version) bool { - if strings.Contains(currentVersion.String(), "git-snapshot") || strings.Contains(currentVersion.String(), "nightly") { - // This is a dev build, no need to check for updates - return false - } - - if !configuration.Settings.GetBool("updater.enable_notification") { - // Don't check if the user disabled the notification - return false - } - - if inventory.Store.IsSet("updater.last_check_time") && time.Since(inventory.Store.GetTime("updater.last_check_time")).Hours() < 24 { - // Checked less than 24 hours ago, let's wait - return false - } - - // Don't check when running on CI or on non interactive consoles - return !isCI() && configuration.IsInteractive && configuration.HasConsole -} - -// based on https://github.com/watson/ci-info/blob/HEAD/index.js -func isCI() bool { - return os.Getenv("CI") != "" || // GitHub Actions, Travis CI, CircleCI, Cirrus CI, GitLab CI, AppVeyor, CodeShip, dsari - os.Getenv("BUILD_NUMBER") != "" || // Jenkins, TeamCity - os.Getenv("RUN_ID") != "" // TaskCluster, dsari -} - -// getLatestRelease queries the official Arduino download server for the latest release, -// if there are no errors or issues a version string is returned, in all other case an empty string. -func getLatestRelease() string { - client, err := httpclient.New() - if err != nil { - return "" - } - - // We just use this URL to check if there's a new release available and - // never show it to the user, so it's fine to use the Linux one for all OSs. - URL := "https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_64bit.tar.gz" - res, err := client.Head(URL) - if err != nil { - // Yes, we ignore it - return "" - } - - // Get redirected URL - location := res.Request.URL.String() - - // The location header points to the latest release of the CLI, it's supposed to be formatted like this: - // https://downloads.arduino.cc/arduino-cli/arduino-cli_0.18.3_Linux_64bit.tar.gz - // so we split it to get the version, if there are not enough splits something must have gone wrong. - split := strings.Split(location, "_") - if len(split) < 2 { - return "" - } - - return split[1] -} diff --git a/internal/cli/upgrade/upgrade.go b/internal/cli/upgrade/upgrade.go index 937abd845fa..8740add67d1 100644 --- a/internal/cli/upgrade/upgrade.go +++ b/internal/cli/upgrade/upgrade.go @@ -16,39 +16,39 @@ package upgrade import ( + "context" "os" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/core" "github.com/arduino/arduino-cli/internal/cli/instance" "github.com/arduino/arduino-cli/internal/cli/lib" + "github.com/arduino/arduino-cli/internal/i18n" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -var tr = i18n.Tr - // NewCommand creates a new `upgrade` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { var postInstallFlags arguments.PrePostScriptsFlags upgradeCommand := &cobra.Command{ Use: "upgrade", - Short: tr("Upgrades installed cores and libraries."), - Long: tr("Upgrades installed cores and libraries to latest version."), + Short: i18n.Tr("Upgrades installed cores and libraries."), + Long: i18n.Tr("Upgrades installed cores and libraries to latest version."), Example: " " + os.Args[0] + " upgrade", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - runUpgradeCommand(postInstallFlags.DetectSkipPostInstallValue(), postInstallFlags.DetectSkipPreUninstallValue()) + runUpgradeCommand(cmd.Context(), srv, postInstallFlags.DetectSkipPostInstallValue(), postInstallFlags.DetectSkipPreUninstallValue()) }, } postInstallFlags.AddToCommand(upgradeCommand) return upgradeCommand } -func runUpgradeCommand(skipPostInstall bool, skipPreUninstall bool) { - inst := instance.CreateAndInit() +func runUpgradeCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, skipPostInstall bool, skipPreUninstall bool) { + inst := instance.CreateAndInit(ctx, srv) logrus.Info("Executing `arduino-cli upgrade`") - lib.Upgrade(inst, []string{}) - core.Upgrade(inst, []string{}, skipPostInstall, skipPreUninstall) + lib.Upgrade(ctx, srv, inst, []string{}) + core.Upgrade(ctx, srv, inst, []string{}, skipPostInstall, skipPreUninstall) } diff --git a/internal/cli/upload/upload.go b/internal/cli/upload/upload.go index b17f323dc8c..951db75f84a 100644 --- a/internal/cli/upload/upload.go +++ b/internal/cli/upload/upload.go @@ -22,67 +22,69 @@ import ( "os" "strings" - "github.com/arduino/arduino-cli/arduino" - "github.com/arduino/arduino-cli/commands/core" - sk "github.com/arduino/arduino-cli/commands/sketch" - "github.com/arduino/arduino-cli/commands/upload" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/cli/arguments" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/cli/feedback/result" "github.com/arduino/arduino-cli/internal/cli/instance" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/version" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/version" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) var ( - fqbnArg arguments.Fqbn - portArgs arguments.Port - profileArg arguments.Profile - verbose bool - verify bool - importDir string - importFile string - programmer arguments.Programmer - dryRun bool - tr = i18n.Tr + fqbnArg arguments.Fqbn + portArgs arguments.Port + profileArg arguments.Profile + verbose bool + verify bool + importDir string + importFile string + programmer arguments.Programmer + dryRun bool + uploadProperties []string ) // NewCommand created a new `upload` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { uploadFields := map[string]string{} uploadCommand := &cobra.Command{ Use: "upload", - Short: tr("Upload Arduino sketches."), - Long: tr("Upload Arduino sketches. This does NOT compile the sketch prior to upload."), + Short: i18n.Tr("Upload Arduino sketches."), + Long: i18n.Tr("Upload Arduino sketches. This does NOT compile the sketch prior to upload."), Example: "" + " " + os.Args[0] + " upload /home/user/Arduino/MySketch -p /dev/ttyACM0 -b arduino:avr:uno\n" + " " + os.Args[0] + " upload -p 192.168.10.1 -b arduino:avr:uno --upload-field password=abc", Args: cobra.MaximumNArgs(1), PreRun: func(cmd *cobra.Command, args []string) { - arguments.CheckFlagsConflicts(cmd, "input-file", "input-dir") + arguments.CheckFlagsConflicts(cmd, "input-file", "input-dir", "build-path") }, Run: func(cmd *cobra.Command, args []string) { - runUploadCommand(args, uploadFields) + runUploadCommand(cmd.Context(), srv, args, uploadFields) }, } - fqbnArg.AddToCommand(uploadCommand) - portArgs.AddToCommand(uploadCommand) - profileArg.AddToCommand(uploadCommand) - uploadCommand.Flags().StringVarP(&importDir, "input-dir", "", "", tr("Directory containing binaries to upload.")) - uploadCommand.Flags().StringVarP(&importFile, "input-file", "i", "", tr("Binary file to upload.")) - uploadCommand.Flags().BoolVarP(&verify, "verify", "t", false, tr("Verify uploaded binary after the upload.")) - uploadCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, tr("Optional, turns on verbose mode.")) - programmer.AddToCommand(uploadCommand) - uploadCommand.Flags().BoolVar(&dryRun, "dry-run", false, tr("Do not perform the actual upload, just log out actions")) + fqbnArg.AddToCommand(uploadCommand, srv) + portArgs.AddToCommand(uploadCommand, srv) + profileArg.AddToCommand(uploadCommand, srv) + uploadCommand.Flags().StringVarP(&importDir, "build-path", "", "", i18n.Tr("Directory containing binaries to upload.")) + uploadCommand.Flags().StringVarP(&importDir, "input-dir", "", "", i18n.Tr("Directory containing binaries to upload.")) + uploadCommand.Flags().StringVarP(&importFile, "input-file", "i", "", i18n.Tr("Binary file to upload.")) + uploadCommand.Flags().StringArrayVar(&uploadProperties, "upload-property", []string{}, + i18n.Tr("Override an upload property with a custom value. Can be used multiple times for multiple properties.")) + uploadCommand.Flags().BoolVarP(&verify, "verify", "t", false, i18n.Tr("Verify uploaded binary after the upload.")) + uploadCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, i18n.Tr("Optional, turns on verbose mode.")) + programmer.AddToCommand(uploadCommand, srv) + uploadCommand.Flags().BoolVar(&dryRun, "dry-run", false, i18n.Tr("Do not perform the actual upload, just log out actions")) uploadCommand.Flags().MarkHidden("dry-run") - arguments.AddKeyValuePFlag(uploadCommand, &uploadFields, "upload-field", "F", nil, tr("Set a value for a field required to upload.")) + arguments.AddKeyValuePFlag(uploadCommand, &uploadFields, "upload-field", "F", nil, i18n.Tr("Set a value for a field required to upload.")) return uploadCommand } -func runUploadCommand(args []string, uploadFieldsArgs map[string]string) { +func runUploadCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, args []string, uploadFieldsArgs map[string]string) { logrus.Info("Executing `arduino-cli upload`") path := "" @@ -90,23 +92,22 @@ func runUploadCommand(args []string, uploadFieldsArgs map[string]string) { path = args[0] } sketchPath := arguments.InitSketchPath(path) - - if msg := sk.WarnDeprecatedFiles(sketchPath); importDir == "" && importFile == "" && msg != "" { - feedback.Warning(msg) - } - - sketch, err := sk.LoadSketch(context.Background(), &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) - if err != nil && importDir == "" && importFile == "" { - feedback.Fatal(tr("Error during Upload: %v", err), feedback.ErrGeneric) + resp, err := srv.LoadSketch(ctx, &rpc.LoadSketchRequest{SketchPath: sketchPath.String()}) + sketch := resp.GetSketch() + if importDir == "" && importFile == "" { + if err != nil { + feedback.Fatal(i18n.Tr("Error during Upload: %v", err), feedback.ErrGeneric) + } + feedback.WarnAboutDeprecatedFiles(sketch) } var inst *rpc.Instance - var profile *rpc.Profile + var profile *rpc.SketchProfile if profileArg.Get() == "" { - inst, profile = instance.CreateAndInitWithProfile(sketch.GetDefaultProfile().GetName(), sketchPath) + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, sketch.GetDefaultProfile().GetName(), sketchPath) } else { - inst, profile = instance.CreateAndInitWithProfile(profileArg.Get(), sketchPath) + inst, profile = instance.CreateAndInitWithProfile(ctx, srv, profileArg.Get(), sketchPath) } if fqbnArg.String() == "" { @@ -116,57 +117,56 @@ func runUploadCommand(args []string, uploadFieldsArgs map[string]string) { defaultFQBN := sketch.GetDefaultFqbn() defaultAddress := sketch.GetDefaultPort() defaultProtocol := sketch.GetDefaultProtocol() - fqbn, port := arguments.CalculateFQBNAndPort(&portArgs, &fqbnArg, inst, defaultFQBN, defaultAddress, defaultProtocol) + fqbn, port := arguments.CalculateFQBNAndPort(ctx, &portArgs, &fqbnArg, inst, srv, defaultFQBN, defaultAddress, defaultProtocol, profile) - userFieldRes, err := upload.SupportedUserFields(context.Background(), &rpc.SupportedUserFieldsRequest{ + userFieldRes, err := srv.SupportedUserFields(ctx, &rpc.SupportedUserFieldsRequest{ Instance: inst, Fqbn: fqbn, - Protocol: port.Protocol, + Protocol: port.GetProtocol(), }) if err != nil { - msg := tr("Error during Upload: %v", err) + msg := i18n.Tr("Error during Upload: %v", err) // Check the error type to give the user better feedback on how // to resolve it - var platformErr *arduino.PlatformNotFoundError + var platformErr *cmderrors.PlatformNotFoundError if errors.As(err, &platformErr) { split := strings.Split(platformErr.Platform, ":") if len(split) < 2 { - panic(tr("Platform ID is not correct")) + panic(i18n.Tr("Platform ID is not correct")) } msg += "\n" - if platform, err := core.PlatformSearch(&rpc.PlatformSearchRequest{ - Instance: inst, - SearchArgs: platformErr.Platform, - AllVersions: false, + if platform, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{ + Instance: inst, + SearchArgs: platformErr.Platform, }); err != nil { msg += err.Error() } else if len(platform.GetSearchOutput()) > 0 { - msg += tr("Try running %s", fmt.Sprintf("`%s core install %s`", version.VersionInfo.Application, platformErr.Platform)) + msg += i18n.Tr("Try running %s", fmt.Sprintf("`%s core install %s`", version.VersionInfo.Application, platformErr.Platform)) } else { - msg += tr("Platform %s is not found in any known index\nMaybe you need to add a 3rd party URL?", platformErr.Platform) + msg += i18n.Tr("Platform %s is not found in any known index\nMaybe you need to add a 3rd party URL?", platformErr.Platform) } } feedback.Fatal(msg, feedback.ErrGeneric) } fields := map[string]string{} - if len(userFieldRes.UserFields) > 0 { + if len(userFieldRes.GetUserFields()) > 0 { if len(uploadFieldsArgs) > 0 { // If the user has specified some fields via cmd-line, we don't ask for them - for _, field := range userFieldRes.UserFields { - if value, ok := uploadFieldsArgs[field.Name]; ok { - fields[field.Name] = value + for _, field := range userFieldRes.GetUserFields() { + if value, ok := uploadFieldsArgs[field.GetName()]; ok { + fields[field.GetName()] = value } else { - feedback.Fatal(tr("Missing required upload field: %s", field.Name), feedback.ErrBadArgument) + feedback.Fatal(i18n.Tr("Missing required upload field: %s", field.GetName()), feedback.ErrBadArgument) } } } else { // Otherwise prompt the user for them - feedback.Print(tr("Uploading to specified board using %s protocol requires the following info:", port.Protocol)) - if f, err := arguments.AskForUserFields(userFieldRes.UserFields); err != nil { - msg := fmt.Sprintf("%s: %s", tr("Error getting user input"), err) + feedback.Print(i18n.Tr("Uploading to specified board using %s protocol requires the following info:", port.GetProtocol())) + if f, err := arguments.AskForUserFields(userFieldRes.GetUserFields()); err != nil { + msg := fmt.Sprintf("%s: %s", i18n.Tr("Error getting user input"), err) feedback.Fatal(msg, feedback.ErrGeneric) } else { fields = f @@ -178,36 +178,53 @@ func runUploadCommand(args []string, uploadFieldsArgs map[string]string) { path = sketchPath.String() } + prog := profile.GetProgrammer() + if prog == "" || programmer.GetProgrammer() != "" { + prog = programmer.String(ctx, inst, srv, fqbn) + } + if prog == "" { + prog = sketch.GetDefaultProgrammer() + } + stdOut, stdErr, stdIOResult := feedback.OutputStreams() req := &rpc.UploadRequest{ - Instance: inst, - Fqbn: fqbn, - SketchPath: path, - Port: port, - Verbose: verbose, - Verify: verify, - ImportFile: importFile, - ImportDir: importDir, - Programmer: programmer.String(), - DryRun: dryRun, - UserFields: fields, + Instance: inst, + Fqbn: fqbn, + SketchPath: path, + Port: port, + Verbose: verbose, + Verify: verify, + ImportFile: importFile, + ImportDir: importDir, + Programmer: prog, + DryRun: dryRun, + UserFields: fields, + UploadProperties: uploadProperties, } - if res, err := upload.Upload(context.Background(), req, stdOut, stdErr); err != nil { - feedback.FatalError(err, feedback.ErrGeneric) + stream, streamResp := commands.UploadToServerStreams(ctx, stdOut, stdErr) + if err := srv.Upload(req, stream); err != nil { + errcode := feedback.ErrGeneric + if errors.Is(err, &cmderrors.ProgrammerRequiredForUploadError{}) { + errcode = feedback.ErrMissingProgrammer + } + if errors.Is(err, &cmderrors.MissingProgrammerError{}) { + errcode = feedback.ErrMissingProgrammer + } + feedback.FatalError(err, errcode) } else { io := stdIOResult() feedback.PrintResult(&uploadResult{ Stdout: io.Stdout, Stderr: io.Stderr, - UpdatedUploadPort: res.UpdatedUploadPort, + UpdatedUploadPort: result.NewPort(streamResp().GetUpdatedUploadPort()), }) } } type uploadResult struct { - Stdout string `json:"stdout"` - Stderr string `json:"stderr"` - UpdatedUploadPort *rpc.Port `json:"updated_upload_port,omitempty"` + Stdout string `json:"stdout"` + Stderr string `json:"stderr"` + UpdatedUploadPort *result.Port `json:"updated_upload_port,omitempty"` } func (r *uploadResult) Data() interface{} { @@ -218,5 +235,5 @@ func (r *uploadResult) String() string { if r.UpdatedUploadPort == nil { return "" } - return tr("New upload port: %[1]s (%[2]s)", r.UpdatedUploadPort.Address, r.UpdatedUploadPort.Protocol) + return i18n.Tr("New upload port: %[1]s (%[2]s)", r.UpdatedUploadPort.Address, r.UpdatedUploadPort.Protocol) } diff --git a/internal/cli/usage.go b/internal/cli/usage.go index 0858fd7fffd..31c335569bc 100644 --- a/internal/cli/usage.go +++ b/internal/cli/usage.go @@ -15,22 +15,18 @@ package cli -import ( - "github.com/arduino/arduino-cli/i18n" -) - -var tr = i18n.Tr +import "github.com/arduino/arduino-cli/internal/i18n" func getUsageTemplate() string { // Force i18n to generate translation strings - _ = tr("Usage:") - _ = tr("Aliases:") - _ = tr("Examples:") - _ = tr("Available Commands:") - _ = tr("Flags:") - _ = tr("Global Flags:") - _ = tr("Additional help topics:") - _ = tr("Use %s for more information about a command.") + _ = i18n.Tr("Usage:") + _ = i18n.Tr("Aliases:") + _ = i18n.Tr("Examples:") + _ = i18n.Tr("Available Commands:") + _ = i18n.Tr("Flags:") + _ = i18n.Tr("Global Flags:") + _ = i18n.Tr("Additional help topics:") + _ = i18n.Tr("Use %s for more information about a command.", "") return `{{tr "Usage:"}}{{if .Runnable}} {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} diff --git a/internal/cli/version/version.go b/internal/cli/version/version.go index e445d751fc8..78ed2dbcffe 100644 --- a/internal/cli/version/version.go +++ b/internal/cli/version/version.go @@ -16,35 +16,35 @@ package version import ( - "fmt" + "context" "os" "strings" - "github.com/arduino/arduino-cli/i18n" "github.com/arduino/arduino-cli/internal/cli/feedback" "github.com/arduino/arduino-cli/internal/cli/updater" - "github.com/arduino/arduino-cli/version" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/version" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - semver "go.bug.st/relaxed-semver" ) -var tr = i18n.Tr - // NewCommand created a new `version` command -func NewCommand() *cobra.Command { +func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command { versionCommand := &cobra.Command{ Use: "version", - Short: tr("Shows version number of Arduino CLI."), - Long: tr("Shows the version number of Arduino CLI which is installed on your system."), + Short: i18n.Tr("Shows version number of Arduino CLI."), + Long: i18n.Tr("Shows the version number of Arduino CLI which is installed on your system."), Example: " " + os.Args[0] + " version", Args: cobra.NoArgs, - Run: runVersionCommand, + Run: func(cmd *cobra.Command, args []string) { + runVersionCommand(cmd.Context(), srv) + }, } return versionCommand } -func runVersionCommand(cmd *cobra.Command, args []string) { +func runVersionCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer) { logrus.Info("Executing `arduino-cli version`") info := version.VersionInfo @@ -55,20 +55,21 @@ func runVersionCommand(cmd *cobra.Command, args []string) { return } - currentVersion, err := semver.Parse(info.VersionString) + latestVersion := "" + res, err := srv.CheckForArduinoCLIUpdates(ctx, &rpc.CheckForArduinoCLIUpdatesRequest{}) if err != nil { - feedback.Fatal(fmt.Sprintf("Error parsing current version: %s", err), feedback.ErrGeneric) + feedback.Warning("Failed to check for updates: " + err.Error()) + } else { + latestVersion = res.GetNewestVersion() } - latestVersion := updater.CheckForUpdate(currentVersion) - if feedback.GetFormat() != feedback.Text && latestVersion != nil { - // Set this only we managed to get the latest version - info.LatestVersion = latestVersion.String() + if feedback.GetFormat() != feedback.Text { + info.LatestVersion = latestVersion } feedback.PrintResult(info) - if feedback.GetFormat() == feedback.Text && latestVersion != nil { - updater.NotifyNewVersionIsAvailable(latestVersion.String()) + if feedback.GetFormat() == feedback.Text && latestVersion != "" { + updater.NotifyNewVersionIsAvailable(latestVersion) } } diff --git a/docsgen/main.go b/internal/docsgen/main.go similarity index 84% rename from docsgen/main.go rename to internal/docsgen/main.go index 5bb4a3fcc4b..fa175fff583 100644 --- a/docsgen/main.go +++ b/internal/docsgen/main.go @@ -18,7 +18,7 @@ package main import ( "os" - "github.com/arduino/arduino-cli/configuration" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli" "github.com/spf13/cobra/doc" ) @@ -31,11 +31,10 @@ func main() { os.MkdirAll(os.Args[1], 0755) // Create the output folder if it doesn't already exist - configuration.Settings = configuration.Init(configuration.FindConfigFileInArgs(os.Args)) - cli := cli.NewCommand() + srv := commands.NewArduinoCoreServer() + cli := cli.NewCommand(srv) cli.DisableAutoGenTag = true // Disable addition of auto-generated date stamp - err := doc.GenMarkdownTree(cli, os.Args[1]) - if err != nil { + if err := doc.GenMarkdownTree(cli, os.Args[1]); err != nil { panic(err) } } diff --git a/internal/go-configmap/cli.go b/internal/go-configmap/cli.go new file mode 100644 index 00000000000..2e829191d6c --- /dev/null +++ b/internal/go-configmap/cli.go @@ -0,0 +1,146 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import ( + "fmt" + "strconv" + "strings" +) + +func (c *Map) SetFromENV(key string, arg string) error { + // in case of schemaless configuration, we don't know the type of the setting + // we will save it as a string + if len(c.schema) == 0 { + c.Set(key, arg) + return nil + } + + // Find the correct type for the given setting + valueType, ok := c.schema[key] + if !ok { + return fmt.Errorf("key not found: %s", key) + } + + var value any + { + var conversionError error + switch valueType.String() { + case "uint": + value, conversionError = strconv.Atoi(arg) + case "bool": + value, conversionError = strconv.ParseBool(arg) + case "string": + value = arg + case "[]string": + value = strings.Split(arg, " ") + default: + return fmt.Errorf("unhandled type: %s", valueType) + } + if conversionError != nil { + return fmt.Errorf("error setting value: %v", conversionError) + } + } + + return c.Set(key, value) +} + +func (c *Map) SetFromCLIArgs(key string, args ...string) error { + if len(args) == 0 { + c.Delete(key) + return nil + } + + // in case of schemaless configuration, we don't know the type of the setting + // we will save it as a string or array of strings + if len(c.schema) == 0 { + switch len(args) { + case 1: + c.Set(key, args[0]) + default: + c.Set(key, args) + } + return nil + } + + // Find the correct type for the given setting + valueType, ok := c.schema[key] + if !ok { + return fmt.Errorf("key not found: %s", key) + } + + var value any + isArray := false + { + var conversionError error + switch valueType.String() { + case "uint": + value, conversionError = strconv.Atoi(args[0]) + case "bool": + value, conversionError = strconv.ParseBool(args[0]) + case "string": + value = args[0] + case "[]string": + value = args + isArray = true + default: + return fmt.Errorf("unhandled type: %s", valueType) + } + if conversionError != nil { + return fmt.Errorf("error setting value: %v", conversionError) + } + } + if !isArray && len(args) != 1 { + return fmt.Errorf("error setting value: key is not an array, but multiple values were provided") + } + + return c.Set(key, value) +} + +func (c *Map) InjectEnvVars(env []string, prefix string) []error { + if prefix != "" { + prefix = strings.ToUpper(prefix) + "_" + } + + errs := []error{} + + envKeyToConfigKey := map[string]string{} + for _, k := range c.AllKeys() { + normalizedKey := prefix + strings.ToUpper(k) + normalizedKey = strings.ReplaceAll(normalizedKey, ".", "_") + envKeyToConfigKey[normalizedKey] = k + } + + for _, e := range env { + // Extract key and value from env + envKey, envValue, ok := strings.Cut(e, "=") + if !ok { + continue + } + + // Check if the configuration has a matching key + key, ok := envKeyToConfigKey[strings.ToUpper(envKey)] + if !ok { + continue + } + + // Update the configuration value + if err := c.SetFromENV(key, envValue); err != nil { + errs = append(errs, err) + } + } + return errs +} diff --git a/internal/go-configmap/configuration.go b/internal/go-configmap/configuration.go new file mode 100644 index 00000000000..165cb66fa4e --- /dev/null +++ b/internal/go-configmap/configuration.go @@ -0,0 +1,221 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import ( + "fmt" + "reflect" + "strings" + + "fortio.org/safecast" +) + +type Map struct { + values map[string]any + schema map[string]reflect.Type +} + +func New() *Map { + return &Map{ + values: make(map[string]any), + schema: make(map[string]reflect.Type), + } +} + +func (c Map) Get(key string) any { + value, _ := c.GetOk(key) + return value +} + +func (c Map) GetOk(key string) (any, bool) { + keys := strings.Split(key, ".") + return c.get(keys) +} + +func (c Map) get(keys []string) (any, bool) { + if len(keys) == 0 { + return nil, false + } + value, ok := c.values[keys[0]] + if len(keys) == 1 { + return value, ok + } + + if subConf, ok := value.(*Map); ok { + return subConf.get(keys[1:]) + } + return nil, false +} + +func (c Map) Set(key string, value any) error { + if len(c.schema) > 0 { + t, ok := c.schema[key] + if !ok { + return fmt.Errorf("schema not defined for key '%s'", key) + } + newValue, err := tryConversion(value, t) + if err != nil { + return fmt.Errorf("invalid type for key '%s': %w", key, err) + } + value = newValue + } + keys := strings.Split(key, ".") + c.set(keys, value) + return nil +} + +func tryConversion(current any, desiredType reflect.Type) (any, error) { + currentType := reflect.TypeOf(current) + if currentType == desiredType { + return current, nil + } + + switch desiredType.Kind() { + case reflect.Uint: + // Exception for JSON decoder: json decoder will decode all numbers as float64 + if currentFloat, ok := current.(float64); ok { + return uint(currentFloat), nil + } + if currentInt, ok := current.(int); ok { + return safecast.Convert[uint](currentInt) + } + case reflect.Int: + // Exception for JSON decoder: json decoder will decode all numbers as float64 + if currentFloat, ok := current.(float64); ok { + return int(currentFloat), nil + } + case reflect.Array, reflect.Slice: + currentArray, ok := current.([]any) + if !ok && current != nil { + break + } + + resArray := reflect.MakeSlice(desiredType, len(currentArray), len(currentArray)) + for i, elem := range currentArray { + newElem, err := tryConversion(elem, desiredType.Elem()) + if err != nil { + return nil, err + } + resArray.Index(i).Set(reflect.ValueOf(newElem)) + } + return resArray.Interface(), nil + } + + currentTypeString := currentType.String() + if currentTypeString == "[]interface {}" { + currentTypeString = "array" + } + return nil, fmt.Errorf("invalid conversion, got %s but want %v", currentTypeString, desiredType) +} + +func (c Map) set(keys []string, value any) { + if len(keys) == 0 { + return + } + if len(keys) == 1 { + c.values[keys[0]] = value + return + } + + var subConf *Map + if subValue, ok := c.values[keys[0]]; !ok { + subConf = New() + c.values[keys[0]] = subConf + } else if conf, ok := subValue.(*Map); !ok { + subConf = New() + c.values[keys[0]] = subConf + } else { + subConf = conf + } + subConf.set(keys[1:], value) +} + +func (c Map) Delete(key string) { + keys := strings.Split(key, ".") + c.delete(keys) +} + +func (c Map) delete(keys []string) { + if len(keys) == 0 { + return + } + if len(keys) == 1 { + delete(c.values, keys[0]) + return + } + + if subValue, ok := c.values[keys[0]]; !ok { + return + } else if subConf, ok := subValue.(*Map); !ok { + return + } else { + subConf.delete(keys[1:]) + } +} + +func (c *Map) Merge(x *Map) error { + for xk, xv := range x.values { + if xSubConf, ok := xv.(*Map); ok { + if subConf, ok := c.values[xk].(*Map); ok { + if err := subConf.Merge(xSubConf); err != nil { + return err + } + continue + } + return fmt.Errorf("cannot merge sub-configuration into non sub-configuration: '%s'", xk) + } + + v, ok := c.values[xk] + if !ok { + return fmt.Errorf("target key do not exist: '%s'", xk) + } + if reflect.TypeOf(v) != reflect.TypeOf(xv) { + return fmt.Errorf("invalid types for key '%s': got %T but want %T", xk, v, xv) + } + c.values[xk] = xv + } + return nil +} + +func (c *Map) AllKeys() []string { + return c.allKeys("") +} + +func (c *Map) Schema() map[string]reflect.Type { + return c.schema +} + +func (c *Map) allKeys(prefix string) []string { + keys := []string{} + if len(c.schema) > 0 { + for k := range c.schema { + keys = append(keys, prefix+k) + } + } else { + for k, v := range c.values { + if subConf, ok := v.(*Map); ok { + keys = append(keys, subConf.allKeys(prefix+k+".")...) + } else { + keys = append(keys, prefix+k) + } + } + } + return keys +} + +func (c *Map) SetKeyTypeSchema(key string, t any) { + c.schema[key] = reflect.TypeOf(t) +} diff --git a/internal/go-configmap/configuration_test.go b/internal/go-configmap/configuration_test.go new file mode 100644 index 00000000000..c9c025cb3ce --- /dev/null +++ b/internal/go-configmap/configuration_test.go @@ -0,0 +1,218 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap_test + +import ( + "encoding/json" + "testing" + + "github.com/arduino/arduino-cli/internal/go-configmap" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v3" +) + +func TestConfiguration(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "baz", c.Get("fooz.bar")) + require.Equal(t, 42, c.Get("answer")) + + yml, err := yaml.Marshal(c) + require.NoError(t, err) + + d := configmap.New() + err = yaml.Unmarshal(yml, &d) + require.NoError(t, err) + + yml2, err := yaml.Marshal(d) + require.NoError(t, err) + require.Equal(t, string(yml), string(yml2)) + + d.Set("fooz.abc", "def") + d.Set("fooz.cde", "fgh") + require.Equal(t, "def", d.Get("fooz.abc")) + require.Equal(t, "fgh", d.Get("fooz.cde")) + d.Delete("fooz.abc") + require.Nil(t, d.Get("fooz.abc")) + require.Equal(t, "fgh", d.Get("fooz.cde")) + d.Delete("fooz") + require.Nil(t, d.Get("fooz.cde")) +} + +func TestYAMLCleanUpOfZeroValues(t *testing.T) { + inYml := []byte(` +foo: bar +directories: + builtins: {} +`) + c := configmap.New() + outYml1, err := yaml.Marshal(c) + require.NoError(t, err) + require.Equal(t, "{}\n", string(outYml1)) + + err = yaml.Unmarshal(inYml, &c) + require.NoError(t, err) + + outYml2, err := yaml.Marshal(c) + require.NoError(t, err) + require.Equal(t, "foo: bar\n", string(outYml2)) +} + +func TestApplyEnvVars(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + c.InjectEnvVars([]string{"APP_FOO=app-bar", "APP_FOOZ_BAR=app-baz"}, "APP") + require.Equal(t, "app-bar", c.Get("foo")) + require.Equal(t, "app-baz", c.Get("fooz.bar")) + require.Equal(t, 42, c.Get("answer")) +} + +func TestMerge(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + + d := configmap.New() + d.Set("answer", 24) + require.NoError(t, c.Merge(d)) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "baz", c.Get("fooz.bar")) + require.Equal(t, 24, c.Get("answer")) + + e := configmap.New() + e.Set("fooz.bar", "barz") + require.NoError(t, c.Merge(e)) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "barz", c.Get("fooz.bar")) + require.Equal(t, 24, c.Get("answer")) + + f := configmap.New() + f.Set("fooz.bar", 10) + require.EqualError(t, c.Merge(f), "invalid types for key 'bar': got string but want int") + + g := configmap.New() + g.Set("fooz.bart", "baz") + require.EqualError(t, c.Merge(g), "target key do not exist: 'bart'") +} + +func TestAllKeys(t *testing.T) { + { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + require.ElementsMatch(t, []string{"foo", "fooz.bar", "answer"}, c.AllKeys()) + } + { + inYml := []byte(` +foo: bar +dir: + a: yes + b: no + c: {} + d: + - 1 + - 2 +`) + c := configmap.New() + err := yaml.Unmarshal(inYml, &c) + require.NoError(t, err) + require.ElementsMatch(t, []string{"foo", "dir.a", "dir.b", "dir.d"}, c.AllKeys()) + } +} + +func TestSchema(t *testing.T) { + c := configmap.New() + c.SetKeyTypeSchema("string", "") + c.SetKeyTypeSchema("int", 15) + c.SetKeyTypeSchema("obj.string", "") + c.SetKeyTypeSchema("obj.int", 15) + c.SetKeyTypeSchema("uint", uint(15)) + c.SetKeyTypeSchema("obj.uint", uint(15)) + c.SetKeyTypeSchema("array", []string{}) + c.SetKeyTypeSchema("obj.array", []string{}) + + // Set array of string + require.NoError(t, c.Set("array", []string{"abc", "def"})) + require.NoError(t, c.Set("obj.array", []string{"abc", "def"})) + require.Equal(t, []string{"abc", "def"}, c.Get("array")) + require.Equal(t, []string{"abc", "def"}, c.Get("obj.array")) + // Set array of string with array of any + require.NoError(t, c.Set("array", []any{"abc", "def"})) + require.NoError(t, c.Set("obj.array", []any{"abc", "def"})) + require.Equal(t, []string{"abc", "def"}, c.Get("array")) + require.Equal(t, []string{"abc", "def"}, c.Get("obj.array")) + // Set array of string with array of int + require.EqualError(t, c.Set("array", []any{"abc", 123}), "invalid type for key 'array': invalid conversion, got int but want string") + require.EqualError(t, c.Set("obj.array", []any{"abc", 123}), "invalid type for key 'obj.array': invalid conversion, got int but want string") + + // Set string + require.NoError(t, c.Set("string", "abc")) + require.NoError(t, c.Set("obj.string", "abc")) + require.Equal(t, "abc", c.Get("string")) + require.Equal(t, "abc", c.Get("obj.string")) + // Set string with int + require.EqualError(t, c.Set("string", 123), "invalid type for key 'string': invalid conversion, got int but want string") + require.EqualError(t, c.Set("obj.string", 123), "invalid type for key 'obj.string': invalid conversion, got int but want string") + + // Set int + require.NoError(t, c.Set("int", 123)) + require.NoError(t, c.Set("obj.int", 123)) + require.Equal(t, 123, c.Get("int")) + require.Equal(t, 123, c.Get("obj.int")) + // Set int with string + require.EqualError(t, c.Set("int", "abc"), "invalid type for key 'int': invalid conversion, got string but want int") + require.EqualError(t, c.Set("obj.int", "abc"), "invalid type for key 'obj.int': invalid conversion, got string but want int") + + // Set uint + require.NoError(t, c.Set("uint", uint(234))) + require.NoError(t, c.Set("obj.uint", uint(234))) + require.Equal(t, uint(234), c.Get("uint")) + require.Equal(t, uint(234), c.Get("obj.uint")) + // Set uint using int + require.NoError(t, c.Set("uint", 345)) + require.NoError(t, c.Set("obj.uint", 345)) + require.Equal(t, uint(345), c.Get("uint")) + require.Equal(t, uint(345), c.Get("obj.uint")) + // Set uint using float + require.NoError(t, c.Set("uint", 456.0)) + require.NoError(t, c.Set("obj.uint", 456.0)) + require.Equal(t, uint(456), c.Get("uint")) + require.Equal(t, uint(456), c.Get("obj.uint")) + // Set uint using string + require.EqualError(t, c.Set("uint", "567"), "invalid type for key 'uint': invalid conversion, got string but want uint") + require.EqualError(t, c.Set("obj.uint", "567"), "invalid type for key 'obj.uint': invalid conversion, got string but want uint") + require.Equal(t, uint(456), c.Get("uint")) + require.Equal(t, uint(456), c.Get("obj.uint")) + + json1 := []byte(`{"string":"abcd","int":1234,"obj":{"string":"abcd","int":1234}}`) + require.NoError(t, json.Unmarshal(json1, &c)) + require.Equal(t, "abcd", c.Get("string")) + require.Equal(t, 1234, c.Get("int")) + require.Equal(t, "abcd", c.Get("obj.string")) + require.Equal(t, 1234, c.Get("obj.int")) + + json2 := []byte(`{"string":123,"int":123,"obj":{"string":"abc","int":123}}`) + require.EqualError(t, json.Unmarshal(json2, &c), "invalid type for key 'string': invalid conversion, got float64 but want string") + json3 := []byte(`{"string":"avc","int":123,"obj":{"string":123,"int":123}}`) + require.EqualError(t, json.Unmarshal(json3, &c), "invalid type for key 'obj.string': invalid conversion, got float64 but want string") +} diff --git a/internal/go-configmap/errors.go b/internal/go-configmap/errors.go new file mode 100644 index 00000000000..2ad42f3e129 --- /dev/null +++ b/internal/go-configmap/errors.go @@ -0,0 +1,54 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import "strings" + +// UnmarshalErrors is a collection of errors that occurred during unmarshalling. +// Do not return this type directly, but use its result() method instead. +type UnmarshalErrors struct { + wrapped []error +} + +func (e *UnmarshalErrors) append(err error) { + e.wrapped = append(e.wrapped, err) +} + +func (e *UnmarshalErrors) result() error { + if len(e.wrapped) == 0 { + return nil + } + return e +} + +func (e *UnmarshalErrors) Error() string { + if len(e.wrapped) == 1 { + return e.wrapped[0].Error() + } + errs := []string{"multiple errors:"} + for _, err := range e.wrapped { + errs = append(errs, "- "+err.Error()) + } + return strings.Join(errs, "\n") +} + +// WrappedErrors returns the list of errors that occurred during unmarshalling. +func (e *UnmarshalErrors) WrappedErrors() []error { + if e == nil { + return nil + } + return e.wrapped +} diff --git a/internal/go-configmap/json.go b/internal/go-configmap/json.go new file mode 100644 index 00000000000..7ab0deaad4f --- /dev/null +++ b/internal/go-configmap/json.go @@ -0,0 +1,52 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import "encoding/json" + +func (c Map) MarshalJSON() ([]byte, error) { + return json.Marshal(c.values) +} + +func (c *Map) UnmarshalJSON(data []byte) error { + in := map[string]any{} + if err := json.Unmarshal(data, &in); err != nil { + return err + } + + c.values = map[string]any{} + for k, v := range flattenMap(in) { + if err := c.Set(k, v); err != nil { + return err + } + } + return nil +} + +func flattenMap(in map[string]any) map[string]any { + out := map[string]any{} + for k, v := range in { + switch v := v.(type) { + case map[string]any: + for kk, vv := range flattenMap(v) { + out[k+"."+kk] = vv + } + default: + out[k] = v + } + } + return out +} diff --git a/executils/process_test.go b/internal/go-configmap/json_test.go similarity index 53% rename from executils/process_test.go rename to internal/go-configmap/json_test.go index 4e50f51993f..54566589baf 100644 --- a/executils/process_test.go +++ b/internal/go-configmap/json_test.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2021 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,30 +13,36 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package configmap_test import ( - "context" + "encoding/json" + "fmt" "testing" - "time" + "github.com/arduino/arduino-cli/internal/go-configmap" "github.com/stretchr/testify/require" ) -func TestProcessWithinContext(t *testing.T) { - // Build `delay` helper inside testdata/delay - builder, err := NewProcess(nil, "go", "build") +func TestJson(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "baz", c.Get("fooz.bar")) + require.Equal(t, 42, c.Get("answer")) + + j1, err := json.Marshal(c) + require.NoError(t, err) + fmt.Println(string(j1)) + + d := configmap.New() + err = json.Unmarshal(j1, d) require.NoError(t, err) - builder.SetDir("testdata/delay") - require.NoError(t, builder.Run()) + require.Equal(t, "baz", d.Get("fooz.bar")) - // Run delay and test if the process is terminated correctly due to context - process, err := NewProcess(nil, "testdata/delay/delay") + j2, err := json.Marshal(d) require.NoError(t, err) - start := time.Now() - ctx, cancel := context.WithTimeout(context.Background(), 250*time.Millisecond) - err = process.RunWithinContext(ctx) - require.Error(t, err) - require.Less(t, time.Since(start), 500*time.Millisecond) - cancel() + require.Equal(t, string(j1), string(j2)) } diff --git a/internal/go-configmap/types.go b/internal/go-configmap/types.go new file mode 100644 index 00000000000..d6a032b8dd6 --- /dev/null +++ b/internal/go-configmap/types.go @@ -0,0 +1,215 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap + +import ( + "errors" + "fmt" + "time" +) + +func (c Map) GetStringOk(key string) (string, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return "", false, nil + } + if s, ok := v.(string); ok { + return s, true, nil + } + return "", false, errors.New(key + " is not a string") +} + +func (c Map) GetString(key string) string { + v, ok, err := c.GetStringOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return "" +} + +func (c Map) SetString(key string, value string) { + c.Set(key, value) +} + +func (c Map) GetBoolOk(key string) (bool, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return false, false, nil + } + if b, ok := v.(bool); ok { + return b, true, nil + } + return false, false, errors.New(key + " is not a bool") +} + +func (c Map) GetBool(key string) bool { + v, ok, err := c.GetBoolOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return false +} + +func (c Map) SetBool(key string, value bool) { + c.Set(key, value) +} + +func (c Map) GetUintOk(key string) (uint, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return 0, false, nil + } + if i, ok := v.(uint); ok { + return i, true, nil + } + return 0, false, errors.New(key + " is not a uint") +} + +func (c Map) GetUint(key string) uint { + v, ok, err := c.GetUintOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return 0 +} + +func (c Map) SetUint(key string, value uint) { + c.Set(key, value) +} + +func (c Map) GetIntOk(key string) (int, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return 0, false, nil + } + if i, ok := v.(int); ok { + return i, true, nil + } + return 0, false, errors.New(key + " is not a uint") +} + +func (c Map) GetInt(key string) int { + v, ok, err := c.GetIntOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return 0 +} + +func (c Map) SetInt(key string, value int) { + c.Set(key, value) +} + +func (c Map) GetUint32Ok(key string) (uint32, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return 0, false, nil + } + if i, ok := v.(uint32); ok { + return i, true, nil + } + return 0, false, errors.New(key + " is not a uint32") +} + +func (c Map) GetUint32(key string) uint32 { + v, ok, err := c.GetUint32Ok(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return 0 +} + +func (c Map) SetUint32(key string, value uint32) { + c.Set(key, value) +} + +func (c Map) GetStringSliceOk(key string) ([]string, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return nil, false, nil + } + if genArray, ok := v.([]string); ok { + return genArray, true, nil + } + if genArray, ok := v.([]interface{}); ok { + // transform []interface{} to []string + var strArray []string + for i, gen := range genArray { + if str, ok := gen.(string); ok { + strArray = append(strArray, str) + } else { + return nil, false, fmt.Errorf("%s[%d] is not a string", key, i) + } + } + return strArray, true, nil + } + return nil, false, fmt.Errorf("%s is not an array of strings", key) +} + +func (c Map) GetStringSlice(key string) []string { + v, ok, err := c.GetStringSliceOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return nil +} + +func (c Map) GetDurationOk(key string) (time.Duration, bool, error) { + v, ok := c.GetOk(key) + if !ok { + return 0, false, nil + } + if s, ok := v.(string); !ok { + return 0, false, errors.New(key + " is not a Duration") + } else if d, err := time.ParseDuration(s); err != nil { + return 0, false, fmt.Errorf("%s is not a valid Duration: %w", key, err) + } else { + return d, true, nil + } +} + +func (c Map) GetDuration(key string) time.Duration { + v, ok, err := c.GetDurationOk(key) + if err != nil { + panic(err.Error()) + } + if ok { + return v + } + return 0 +} + +func (c Map) SetDuration(key string, value time.Duration) { + c.SetString(key, value.String()) +} diff --git a/arduino/libraries/librariesindex/reference.go b/internal/go-configmap/yaml.go similarity index 60% rename from arduino/libraries/librariesindex/reference.go rename to internal/go-configmap/yaml.go index a69663ee8f5..e58f8f31ecf 100644 --- a/arduino/libraries/librariesindex/reference.go +++ b/internal/go-configmap/yaml.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -13,21 +13,27 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package librariesindex +package configmap import ( - semver "go.bug.st/relaxed-semver" + "gopkg.in/yaml.v3" ) -// Reference uniquely identify a Library in the library index -type Reference struct { - Name string // The name of the parsed item. - Version *semver.Version // The Version of the parsed item. +func (c Map) MarshalYAML() (interface{}, error) { + return c.values, nil } -func (r *Reference) String() string { - if r.Version == nil { - return r.Name +func (c *Map) UnmarshalYAML(node *yaml.Node) error { + in := map[string]any{} + if err := node.Decode(&in); err != nil { + return err } - return r.Name + "@" + r.Version.String() + + errs := &UnmarshalErrors{} + for k, v := range flattenMap(in) { + if err := c.Set(k, v); err != nil { + errs.append(err) + } + } + return errs.result() } diff --git a/internal/go-configmap/yaml_test.go b/internal/go-configmap/yaml_test.go new file mode 100644 index 00000000000..9293f70662f --- /dev/null +++ b/internal/go-configmap/yaml_test.go @@ -0,0 +1,48 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package configmap_test + +import ( + "fmt" + "testing" + + "github.com/arduino/arduino-cli/internal/go-configmap" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v3" +) + +func TestYaml(t *testing.T) { + c := configmap.New() + c.Set("foo", "bar") + c.Set("fooz.bar", "baz") + c.Set("answer", 42) + require.Equal(t, "bar", c.Get("foo")) + require.Equal(t, "baz", c.Get("fooz.bar")) + require.Equal(t, 42, c.Get("answer")) + + y1, err := yaml.Marshal(c) + require.NoError(t, err) + fmt.Println(string(y1)) + + d := configmap.New() + err = yaml.Unmarshal(y1, d) + require.NoError(t, err) + require.Equal(t, "baz", d.Get("fooz.bar")) + + y2, err := yaml.Marshal(d) + require.NoError(t, err) + require.Equal(t, string(y1), string(y2)) +} diff --git a/executils/null.go b/internal/i18n/i18n.go similarity index 58% rename from executils/null.go rename to internal/i18n/i18n.go index e0bb37e75b1..f1941297b00 100644 --- a/executils/null.go +++ b/internal/i18n/i18n.go @@ -13,24 +13,30 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package executils +package i18n -import "io" +import "fmt" -// NullReader is an io.Reader that will always return EOF -var NullReader = &nullReader{} +type Locale interface { + Get(msg string, args ...interface{}) string +} + +type nullLocale struct{} -type nullReader struct{} +func (n nullLocale) Parse([]byte) {} -func (r *nullReader) Read(buff []byte) (int, error) { - return 0, io.EOF +func (n nullLocale) Get(msg string, args ...interface{}) string { + return fmt.Sprintf(msg, args...) } -// NullWriter is an io.Writer that discards any output -var NullWriter = &nullWriter{} +var locale Locale = &nullLocale{} -type nullWriter struct{} +func SetLocale(l Locale) { + locale = l +} -func (r *nullWriter) Write(buff []byte) (int, error) { - return len(buff), nil +// Tr returns msg translated to the selected locale +// the msg argument must be a literal string +func Tr(msg string, args ...interface{}) string { + return locale.Get(msg, args...) } diff --git a/i18n/i18n_test.go b/internal/i18n/i18n_test.go similarity index 96% rename from i18n/i18n_test.go rename to internal/i18n/i18n_test.go index 207673fb85b..a2ae4c4d7b0 100644 --- a/i18n/i18n_test.go +++ b/internal/i18n/i18n_test.go @@ -25,8 +25,9 @@ import ( ) func setPo(poFile string) { - po = new(gotext.Po) - po.Parse([]byte(poFile)) + dict := gotext.NewPo() + dict.Parse([]byte(poFile)) + SetLocale(dict) } func TestPoTranslation(t *testing.T) { @@ -39,7 +40,7 @@ func TestPoTranslation(t *testing.T) { } func TestNoLocaleSet(t *testing.T) { - po = new(gotext.Po) + locale = gotext.NewPo() require.Equal(t, "test-key", Tr("test-key")) } diff --git a/internal/integrationtest/arduino-cli.go b/internal/integrationtest/arduino-cli.go index 45620ee4c71..f035e792f55 100644 --- a/internal/integrationtest/arduino-cli.go +++ b/internal/integrationtest/arduino-cli.go @@ -23,14 +23,13 @@ import ( "fmt" "io" "os" + "runtime" "strings" "sync" "testing" "time" - "github.com/arduino/arduino-cli/executils" "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" "github.com/arduino/go-paths-helper" "github.com/fatih/color" "github.com/stretchr/testify/require" @@ -69,20 +68,19 @@ func CreateArduinoCLIWithEnvironment(t *testing.T) (*Environment, *ArduinoCLI) { // ArduinoCLI is an Arduino CLI client. type ArduinoCLI struct { - path *paths.Path - t *require.Assertions - proc *executils.Process - stdIn io.WriteCloser - cliEnvVars map[string]string - cliConfigPath *paths.Path - stagingDir *paths.Path - dataDir *paths.Path - sketchbookDir *paths.Path - workingDir *paths.Path - daemonAddr string - daemonConn *grpc.ClientConn - daemonClient commands.ArduinoCoreServiceClient - daemonSettingsClient settings.SettingsServiceClient + path *paths.Path + t *require.Assertions + proc *paths.Process + stdIn io.WriteCloser + cliEnvVars map[string]string + cliConfigPath *paths.Path + stagingDir *paths.Path + dataDir *paths.Path + sketchbookDir *paths.Path + workingDir *paths.Path + daemonAddr string + daemonConn *grpc.ClientConn + daemonClient commands.ArduinoCoreServiceClient } // ArduinoCLIConfig is the configuration of the ArduinoCLI client @@ -111,16 +109,31 @@ func NewArduinoCliWithinEnvironment(env *Environment, config *ArduinoCLIConfig) } cli.cliEnvVars = map[string]string{ - "LANG": "en", - "ARDUINO_DATA_DIR": cli.dataDir.String(), - "ARDUINO_DOWNLOADS_DIR": cli.stagingDir.String(), - "ARDUINO_SKETCHBOOK_DIR": cli.sketchbookDir.String(), + "LANG": "en", + "ARDUINO_DIRECTORIES_DATA": cli.dataDir.String(), + "ARDUINO_DIRECTORIES_DOWNLOADS": cli.stagingDir.String(), + "ARDUINO_DIRECTORIES_USER": cli.sketchbookDir.String(), "ARDUINO_BUILD_CACHE_COMPILATIONS_BEFORE_PURGE": "0", } env.RegisterCleanUpCallback(cli.CleanUp) return cli } +// CreateEnvForDaemon performs the minimum required operations to start the arduino-cli daemon. +// It returns a testsuite.Environment and an ArduinoCLI client to perform the integration tests. +// The Environment must be disposed by calling the CleanUp method via defer. +func CreateEnvForDaemon(t *testing.T) (*Environment, *ArduinoCLI) { + env := NewEnvironment(t) + + cli := NewArduinoCliWithinEnvironment(env, &ArduinoCLIConfig{ + ArduinoCLIPath: FindRepositoryRootPath(t).Join("arduino-cli"), + UseSharedStagingFolder: true, + }) + + _ = cli.StartDaemon(false) + return env, cli +} + // CleanUp closes the Arduino CLI client. func (cli *ArduinoCLI) CleanUp() { if cli.proc != nil { @@ -201,59 +214,211 @@ func (cli *ArduinoCLI) convertEnvForExecutils(env map[string]string) []string { return envVars } +// InstallMockedSerialDiscovery will replace the already installed serial-discovery +// with a mocked one. +func (cli *ArduinoCLI) InstallMockedSerialDiscovery(t *testing.T) { + fmt.Println(color.BlueString("<<< Install mocked serial-discovery")) + + // Build mocked serial-discovery + mockDir := FindRepositoryRootPath(t).Join("internal", "mock_serial_discovery") + gobuild, err := paths.NewProcess(nil, "go", "build") + require.NoError(t, err) + gobuild.SetDirFromPath(mockDir) + require.NoError(t, gobuild.Run(), "Building mocked serial-discovery") + ext := "" + if runtime.GOOS == "windows" { + ext = ".exe" + } + mockBin := mockDir.Join("mock_serial_discovery" + ext) + require.True(t, mockBin.Exist()) + fmt.Println(color.HiBlackString(" Build of mocked serial-discovery succeeded.")) + + // Install it replacing the current serial discovery + dataDir := cli.DataDir() + require.NotNil(t, dataDir, "data dir missing") + serialDiscoveries, err := dataDir.Join("packages", "builtin", "tools", "serial-discovery").ReadDirRecursiveFiltered( + nil, paths.AndFilter( + paths.FilterNames("serial-discovery"+ext), + paths.FilterOutDirectories(), + ), + ) + require.NoError(t, err, "scanning data dir for serial-discoveries") + require.NotEmpty(t, serialDiscoveries, "no serial-discoveries found in data dir") + for _, serialDiscovery := range serialDiscoveries { + require.NoError(t, mockBin.CopyTo(serialDiscovery), "installing mocked serial discovery to %s", serialDiscovery) + fmt.Println(color.HiBlackString(" Discovery installed in " + serialDiscovery.String())) + } +} + +// InstallMockedSerialMonitor will replace the already installed serial-monitor +// with a mocked one. +func (cli *ArduinoCLI) InstallMockedSerialMonitor(t *testing.T) { + fmt.Println(color.BlueString("<<< Install mocked serial-monitor")) + + // Build mocked serial-monitor + mockDir := FindRepositoryRootPath(t).Join("internal", "mock_serial_monitor") + gobuild, err := paths.NewProcess(nil, "go", "build") + require.NoError(t, err) + gobuild.SetDirFromPath(mockDir) + require.NoError(t, gobuild.Run(), "Building mocked serial-monitor") + ext := "" + if runtime.GOOS == "windows" { + ext = ".exe" + } + mockBin := mockDir.Join("mock_serial_monitor" + ext) + require.True(t, mockBin.Exist()) + fmt.Println(color.HiBlackString(" Build of mocked serial-monitor succeeded.")) + + // Install it replacing the current serial monitor + dataDir := cli.DataDir() + require.NotNil(t, dataDir, "data dir missing") + serialMonitors, err := dataDir.Join("packages", "builtin", "tools", "serial-monitor").ReadDirRecursiveFiltered( + nil, paths.AndFilter( + paths.FilterNames("serial-monitor"+ext), + paths.FilterOutDirectories(), + ), + ) + require.NoError(t, err, "scanning data dir for serial-monitor") + require.NotEmpty(t, serialMonitors, "no serial-monitor found in data dir") + for _, serialMonitor := range serialMonitors { + require.NoError(t, mockBin.CopyTo(serialMonitor), "installing mocked serial monitor to %s", serialMonitor) + fmt.Println(color.HiBlackString(" Monitor installed in " + serialMonitor.String())) + } +} + +// InstallMockedAvrdude will replace the already installed avrdude with a mocked one. +func (cli *ArduinoCLI) InstallMockedAvrdude(t *testing.T) { + fmt.Println(color.BlueString("<<< Install mocked avrdude")) + + // Build mocked serial-discovery + mockDir := FindRepositoryRootPath(t).Join("internal", "mock_avrdude") + gobuild, err := paths.NewProcess(nil, "go", "build") + require.NoError(t, err) + gobuild.SetDirFromPath(mockDir) + require.NoError(t, gobuild.Run(), "Building mocked avrdude") + ext := "" + if runtime.GOOS == "windows" { + ext = ".exe" + } + mockBin := mockDir.Join("mock_avrdude" + ext) + require.True(t, mockBin.Exist()) + fmt.Println(color.HiBlackString(" Build of mocked avrdude succeeded.")) + + // Install it replacing the current avrdudes + dataDir := cli.DataDir() + require.NotNil(t, dataDir, "data dir missing") + + avrdudes, err := dataDir.Join("packages", "arduino", "tools", "avrdude").ReadDirRecursiveFiltered( + nil, paths.AndFilter( + paths.FilterNames("avrdude"+ext), + paths.FilterOutDirectories(), + ), + ) + require.NoError(t, err, "scanning data dir for avrdude(s)") + require.NotEmpty(t, avrdudes, "no avrdude(s) found in data dir") + for _, avrdude := range avrdudes { + require.NoError(t, mockBin.CopyTo(avrdude), "installing mocked avrdude to %s", avrdude) + fmt.Println(color.HiBlackString(" Mocked avrdude installed in " + avrdude.String())) + } +} + // RunWithCustomEnv executes the given arduino-cli command with the given custom env and returns the output. func (cli *ArduinoCLI) RunWithCustomEnv(env map[string]string, args ...string) ([]byte, []byte, error) { + var stdoutBuf, stderrBuf bytes.Buffer + err := cli.run(&stdoutBuf, &stderrBuf, nil, env, args...) + + errBuf := stderrBuf.Bytes() + cli.t.NotContains(string(errBuf), "panic: runtime error:", "arduino-cli panicked") + + return stdoutBuf.Bytes(), errBuf, err +} + +// RunWithCustomInput executes the given arduino-cli command pushing the given input stream and returns the output. +func (cli *ArduinoCLI) RunWithCustomInput(in io.Reader, args ...string) ([]byte, []byte, error) { + var stdoutBuf, stderrBuf bytes.Buffer + err := cli.run(&stdoutBuf, &stderrBuf, in, cli.cliEnvVars, args...) + + errBuf := stderrBuf.Bytes() + cli.t.NotContains(string(errBuf), "panic: runtime error:", "arduino-cli panicked") + + return stdoutBuf.Bytes(), errBuf, err +} + +func (cli *ArduinoCLI) run(stdoutBuff, stderrBuff io.Writer, stdinBuff io.Reader, env map[string]string, args ...string) error { if cli.cliConfigPath != nil { args = append([]string{"--config-file", cli.cliConfigPath.String()}, args...) } - fmt.Println(color.HiBlackString(">>> Running: ") + color.HiYellowString("%s %s", cli.path, strings.Join(args, " "))) - cliProc, err := executils.NewProcessFromPath(cli.convertEnvForExecutils(env), cli.path, args...) + + // Accumulate all output to terminal and spit-out all at once at the end of the test + // This allows to correctly group test output when running t.Parallel() tests. + terminalOut := new(bytes.Buffer) + defer func() { + fmt.Print(terminalOut.String()) + }() + + // Github-actions workflow tags to fold log lines + if os.Getenv("GITHUB_ACTIONS") != "" { + fmt.Fprintf(terminalOut, "::group::Running %s\n", strings.Join(args, " ")) + defer fmt.Fprintln(terminalOut, "::endgroup::") + } + + fmt.Fprintln(terminalOut, color.HiBlackString(">>> Running: ")+color.HiYellowString("%s %s %s", cli.path, strings.Join(args, " "), env)) + cliProc, err := paths.NewProcessFromPath(cli.convertEnvForExecutils(env), cli.path, args...) cli.t.NoError(err) stdout, err := cliProc.StdoutPipe() cli.t.NoError(err) stderr, err := cliProc.StderrPipe() cli.t.NoError(err) - _, err = cliProc.StdinPipe() + stdin, err := cliProc.StdinPipe() cli.t.NoError(err) cliProc.SetDir(cli.WorkingDir().String()) cli.t.NoError(cliProc.Start()) - var stdoutBuf, stderrBuf bytes.Buffer var wg sync.WaitGroup wg.Add(2) go func() { defer wg.Done() - if _, err := io.Copy(&stdoutBuf, io.TeeReader(stdout, os.Stdout)); err != nil { - fmt.Println(color.HiBlackString("<<< stdout copy error:"), err) + if stdoutBuff == nil { + stdoutBuff = io.Discard + } + if _, err := io.Copy(stdoutBuff, io.TeeReader(stdout, terminalOut)); err != nil { + fmt.Fprintln(terminalOut, color.HiBlackString("<<< stdout copy error:"), err) } }() go func() { defer wg.Done() - if _, err := io.Copy(&stderrBuf, io.TeeReader(stderr, os.Stderr)); err != nil { - fmt.Println(color.HiBlackString("<<< stderr copy error:"), err) + if stderrBuff == nil { + stderrBuff = io.Discard + } + if _, err := io.Copy(stderrBuff, io.TeeReader(stderr, terminalOut)); err != nil { + fmt.Fprintln(terminalOut, color.HiBlackString("<<< stderr copy error:"), err) } }() + if stdinBuff != nil { + go func() { + if _, err := io.Copy(stdin, stdinBuff); err != nil { + fmt.Fprintln(terminalOut, color.HiBlackString("<<< stdin copy error:"), err) + } + }() + } wg.Wait() cliErr := cliProc.Wait() - fmt.Println(color.HiBlackString("<<< Run completed (err = %v)", cliErr)) + fmt.Fprintln(terminalOut, color.HiBlackString("<<< Run completed (err = %v)", cliErr)) - errBuf := stderrBuf.Bytes() - cli.t.NotContains(string(errBuf), "panic: runtime error:", "arduino-cli panicked") - - return stdoutBuf.Bytes(), errBuf, cliErr + return cliErr } // StartDaemon starts the Arduino CLI daemon. It returns the address of the daemon. func (cli *ArduinoCLI) StartDaemon(verbose bool) string { - args := []string{"daemon", "--format", "json"} + args := []string{"daemon", "--json"} if cli.cliConfigPath != nil { args = append([]string{"--config-file", cli.cliConfigPath.String()}, args...) } if verbose { args = append(args, "-v", "--log-level", "debug") } - cliProc, err := executils.NewProcessFromPath(cli.convertEnvForExecutils(cli.cliEnvVars), cli.path, args...) + cliProc, err := paths.NewProcessFromPath(cli.convertEnvForExecutils(cli.cliEnvVars), cli.path, args...) cli.t.NoError(err) stdout, err := cliProc.StdoutPipe() cli.t.NoError(err) @@ -279,11 +444,26 @@ func (cli *ArduinoCLI) StartDaemon(verbose bool) string { } go _copy(os.Stdout, stdout) go _copy(os.Stderr, stderr) - conn, err := grpc.Dial(cli.daemonAddr, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) - cli.t.NoError(err) - cli.daemonConn = conn - cli.daemonClient = commands.NewArduinoCoreServiceClient(conn) - cli.daemonSettingsClient = settings.NewSettingsServiceClient(conn) + + // Await the CLI daemon to be ready + var connErr error + for retries := 5; retries > 0; retries-- { + time.Sleep(time.Second) + + conn, err := grpc.NewClient( + cli.daemonAddr, + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithUserAgent("cli-test/0.0.0"), + ) + if err != nil { + connErr = err + continue + } + cli.daemonConn = conn + cli.daemonClient = commands.NewArduinoCoreServiceClient(conn) + break + } + cli.t.NoError(connErr) return cli.daemonAddr } @@ -309,18 +489,18 @@ func (cli *ArduinoCLI) Create() *ArduinoCLIInstance { logCallf(" -> %v\n", resp) return &ArduinoCLIInstance{ cli: cli, - instance: resp.Instance, + instance: resp.GetInstance(), } } // SetValue calls the "SetValue" gRPC method. func (cli *ArduinoCLI) SetValue(key, jsonData string) error { - req := &settings.SetValueRequest{ - Key: key, - JsonData: jsonData, + req := &commands.SettingsSetValueRequest{ + Key: key, + EncodedValue: jsonData, } logCallf(">>> SetValue(%+v)\n", req) - _, err := cli.daemonSettingsClient.SetValue(context.Background(), req) + _, err := cli.daemonClient.SettingsSetValue(context.Background(), req) return err } @@ -473,10 +653,71 @@ func (inst *ArduinoCLIInstance) PlatformUpgrade(ctx context.Context, packager, a return installCl, err } -// PlatformList calls the "PlatformList" gRPC method. -func (inst *ArduinoCLIInstance) PlatformList(ctx context.Context) (*commands.PlatformListResponse, error) { - req := &commands.PlatformListRequest{Instance: inst.instance} - logCallf(">>> PlatformList(%+v)\n", req) - resp, err := inst.cli.daemonClient.PlatformList(ctx, req) +// PlatformSearch calls the "PlatformSearch" gRPC method. +func (inst *ArduinoCLIInstance) PlatformSearch(ctx context.Context, args string, all bool) (*commands.PlatformSearchResponse, error) { + req := &commands.PlatformSearchRequest{ + Instance: inst.instance, + SearchArgs: args, + } + logCallf(">>> PlatformSearch(%+v)\n", req) + resp, err := inst.cli.daemonClient.PlatformSearch(ctx, req) + return resp, err +} + +// Monitor calls the "Monitor" gRPC method and sends the OpenRequest message. +func (inst *ArduinoCLIInstance) Monitor(ctx context.Context, port *commands.Port) (commands.ArduinoCoreService_MonitorClient, error) { + req := &commands.MonitorRequest{} + logCallf(">>> Monitor(%+v)\n", req) + monitorClient, err := inst.cli.daemonClient.Monitor(ctx) + if err != nil { + return nil, err + } + err = monitorClient.Send(&commands.MonitorRequest{ + Message: &commands.MonitorRequest_OpenRequest{ + OpenRequest: &commands.MonitorPortOpenRequest{ + Instance: inst.instance, + Port: port, + }, + }, + }) + return monitorClient, err +} + +// Upload calls the "Upload" gRPC method. +func (inst *ArduinoCLIInstance) Upload(ctx context.Context, fqbn, sketchPath, port, protocol string) (commands.ArduinoCoreService_UploadClient, error) { + uploadCl, err := inst.cli.daemonClient.Upload(ctx, &commands.UploadRequest{ + Instance: inst.instance, + Fqbn: fqbn, + SketchPath: sketchPath, + Verbose: true, + Port: &commands.Port{ + Address: port, + Protocol: protocol, + }, + }) + logCallf(">>> Upload(%v %v port/protocol=%s/%s)\n", fqbn, sketchPath, port, protocol) + return uploadCl, err +} + +// BoardIdentify calls the "BoardIdentify" gRPC method. +func (inst *ArduinoCLIInstance) BoardIdentify(ctx context.Context, props map[string]string, useCloudAPI bool) (*commands.BoardIdentifyResponse, error) { + req := &commands.BoardIdentifyRequest{ + Instance: inst.instance, + Properties: props, + UseCloudApiForUnknownBoardDetection: useCloudAPI, + } + logCallf(">>> BoardIdentify(%+v)\n", req) + resp, err := inst.cli.daemonClient.BoardIdentify(ctx, req) return resp, err } + +// NewSketch calls the "NewSketch" gRPC method. +func (inst *ArduinoCLIInstance) NewSketch(ctx context.Context, sketchName, sketchDir string, overwrite bool) (*commands.NewSketchResponse, error) { + req := &commands.NewSketchRequest{ + SketchName: sketchName, + SketchDir: sketchDir, + Overwrite: overwrite, + } + logCallf(">>> NewSketch(%+v)\n", req) + return inst.cli.daemonClient.NewSketch(ctx, req) +} diff --git a/internal/integrationtest/board/board_test.go b/internal/integrationtest/board/board_test.go index a74434c5d97..db5a7ff200b 100644 --- a/internal/integrationtest/board/board_test.go +++ b/internal/integrationtest/board/board_test.go @@ -16,8 +16,7 @@ package board_test import ( - "encoding/json" - "os" + "runtime" "strings" "testing" @@ -25,7 +24,6 @@ import ( "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" "github.com/stretchr/testify/require" - semver "go.bug.st/relaxed-semver" "go.bug.st/testifyjson/requirejson" ) @@ -38,7 +36,7 @@ func TestCorrectBoardListOrdering(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("core", "install", "arduino:avr") require.NoError(t, err) - jsonOut, _, err := cli.Run("board", "listall", "--format", "json") + jsonOut, _, err := cli.Run("board", "listall", "--json") require.NoError(t, err) requirejson.Query(t, jsonOut, "[.boards[] | .fqbn]", `[ "arduino:avr:yun", @@ -74,52 +72,85 @@ func TestCorrectBoardListOrdering(t *testing.T) { } func TestBoardList(t *testing.T) { - if os.Getenv("CI") != "" { - t.Skip("VMs have no serial ports") - } - env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() _, _, err := cli.Run("core", "update-index") require.NoError(t, err) - stdout, _, err := cli.Run("board", "list", "--format", "json") + + cli.InstallMockedSerialDiscovery(t) + + stdout, _, err := cli.Run("board", "list", "--json") require.NoError(t, err) // check is a valid json and contains a list of ports requirejson.Parse(t, stdout). - Query(`[ .[].port | select(.protocol == null or .protocol_label == null) ]`). + Query(`[ .detected_ports | .[].port | select(.protocol == null or .protocol_label == null) ]`). MustBeEmpty() } -func TestBoardListWithFqbnFilter(t *testing.T) { - if os.Getenv("CI") != "" { - t.Skip("VMs have no serial ports") - } +func TestBoardListMock(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + cli.InstallMockedSerialDiscovery(t) + + stdout, _, err := cli.Run("board", "list", "--json") + require.NoError(t, err) + + // check is a valid json and contains a list of ports + requirejson.Contains(t, stdout, `{ + "detected_ports": [ + { + "matching_boards": [ + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + } + ], + "port": { + "address": "/dev/ttyCIAO", + "label": "Mocked Serial port", + "protocol": "serial", + "protocol_label": "Serial", + "properties": { + "pid": "0x0041", + "serial": "123456", + "vid": "0x2341" + }, + "hardware_id": "123456" + } + } + ] + }`) +} + +func TestBoardListWithFqbnFilter(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() _, _, err := cli.Run("core", "update-index") require.NoError(t, err) - stdout, _, err := cli.Run("board", "list", "-b", "foo:bar:baz", "--format", "json") + + cli.InstallMockedSerialDiscovery(t) + + stdout, _, err := cli.Run("board", "list", "-b", "foo:bar:baz", "--json") require.NoError(t, err) - // this is a bit of a passpartout test, it actually filters the "bluetooth boards" locally - // but it would succeed even if the filtering wasn't working properly - // TODO: find a way to simulate connected boards or create a unit test which - // mocks or initializes multiple components - requirejson.Parse(t, stdout). - MustBeEmpty() + requirejson.Query(t, stdout, `.detected_ports | length`, `0`) } func TestBoardListWithFqbnFilterInvalid(t *testing.T) { - if os.Getenv("CI") != "" { - t.Skip("VMs have no serial ports") - } - env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() - _, stderr, err := cli.Run("board", "list", "-b", "yadayada", "--format", "json") + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + cli.InstallMockedSerialDiscovery(t) + + _, stderr, err := cli.Run("board", "list", "-b", "yadayada", "--json") require.Error(t, err) requirejson.Query(t, stderr, ".error", `"Invalid FQBN: not an FQBN: yadayada"`) } @@ -133,7 +164,7 @@ func TestBoardListall(t *testing.T) { _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") require.NoError(t, err) - stdout, _, err := cli.Run("board", "listall", "--format", "json") + stdout, _, err := cli.Run("board", "listall", "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".boards | length", "26") @@ -144,26 +175,36 @@ func TestBoardListall(t *testing.T) { "name": "Arduino Yún", "fqbn": "arduino:avr:yun", "platform": { - "id": "arduino:avr", - "installed": "1.8.3", - "name": "Arduino AVR Boards" + "metadata": { + "id": "arduino:avr" + }, + "release": { + "name": "Arduino AVR Boards", + "version": "1.8.3", + "installed": true + } } }, { "name": "Arduino Uno", "fqbn": "arduino:avr:uno", "platform": { - "id": "arduino:avr", - "installed": "1.8.3", - "name": "Arduino AVR Boards" + "metadata": { + "id": "arduino:avr" + }, + "release": { + "name": "Arduino AVR Boards", + "version": "1.8.3", + "installed": true + } } } ] }`) - // Check if the boards' "latest" value is not empty + // Check if the boards' "version" value is not empty requirejson.Parse(t, stdout). - Query(`[ .boards | .[] | .platform | select(.latest == "") ]`). + Query(`[ .boards | .[] | .platform | select(.version == "") ]`). MustBeEmpty() } @@ -183,7 +224,7 @@ func TestBoardListallWithManuallyInstalledPlatform(t *testing.T) { }) require.NoError(t, err) - stdout, _, err := cli.Run("board", "listall", "--format", "json") + stdout, _, err := cli.Run("board", "listall", "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".boards | length", "17") @@ -194,20 +235,28 @@ func TestBoardListallWithManuallyInstalledPlatform(t *testing.T) { "name": "Arduino MKR1000", "fqbn": "arduino-beta-development:samd:mkr1000", "platform": { - "id": "arduino-beta-development:samd", - "installed": "1.8.11", - "latest": "1.8.11", - "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards", + "metadata": { + "id": "arduino-beta-development:samd", + }, + "release": { + "installed": true, + "version": "1.8.11", + "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards" + }, } }, { "name": "Arduino NANO 33 IoT", "fqbn": "arduino-beta-development:samd:nano_33_iot", "platform": { - "id": "arduino-beta-development:samd", - "installed": "1.8.11", - "latest": "1.8.11", - "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards" + "metadata": { + "id": "arduino-beta-development:samd", + }, + "release": { + "installed": true, + "version": "1.8.11", + "name": "Arduino SAMD (32-bits ARM Cortex-M0+) Boards" + }, } } ] @@ -220,16 +269,16 @@ func TestBoardDetails(t *testing.T) { _, _, err := cli.Run("core", "update-index") require.NoError(t, err) - // Download samd core pinned to 1.8.6 - _, _, err = cli.Run("core", "install", "arduino:samd@1.8.6") + // Download samd core pinned to 1.8.13 + _, _, err = cli.Run("core", "install", "arduino:samd@1.8.13") require.NoError(t, err) // Test board listall with and without showing hidden elements - stdout, _, err := cli.Run("board", "listall", "MIPS", "--format", "json") + stdout, _, err := cli.Run("board", "listall", "MIPS", "--json") require.NoError(t, err) require.Equal(t, string(stdout), "{}\n") - stdout, _, err = cli.Run("board", "listall", "MIPS", "-a", "--format", "json") + stdout, _, err = cli.Run("board", "listall", "MIPS", "-a", "--json") require.NoError(t, err) requirejson.Contains(t, stdout, `{ "boards": [ @@ -239,74 +288,76 @@ func TestBoardDetails(t *testing.T) { ] }`) - stdout, _, err = cli.Run("board", "details", "-b", "arduino:samd:nano_33_iot", "--format", "json") + stdout, _, err = cli.Run("board", "details", "-b", "arduino:samd:nano_33_iot", "--json") require.NoError(t, err) requirejson.Contains(t, stdout, `{ - "fqbn": "arduino:samd:nano_33_iot", - "name": "Arduino NANO 33 IoT", - "version": "1.8.6", - "properties_id": "nano_33_iot", - "official": true, - "package": { - "maintainer": "Arduino", - "url": "https://downloads.arduino.cc/packages/package_index.tar.bz2", - "website_url": "http://www.arduino.cc/", - "email": "packages@arduino.cc", - "name": "arduino", - "help": { - "online": "http://www.arduino.cc/en/Reference/HomePage" - } - }, - "platform": { - "architecture": "samd", - "category": "Arduino", - "url": "http://downloads.arduino.cc/cores/samd-1.8.6.tar.bz2", - "archive_filename": "samd-1.8.6.tar.bz2", - "checksum": "SHA-256:68a4fffa6fe6aa7886aab2e69dff7d3f94c02935bbbeb42de37f692d7daf823b", - "size": 2980953, + "fqbn": "arduino:samd:nano_33_iot", + "name": "Arduino NANO 33 IoT", + "version": "1.8.13", + "properties_id": "nano_33_iot", + "official": true, + "package": { + "maintainer": "Arduino", + "url": "https://downloads.arduino.cc/packages/package_index.tar.bz2", + "website_url": "https://www.arduino.cc/", + "email": "packages@arduino.cc", + "name": "arduino", + "help": { + "online": "https://www.arduino.cc/en/Reference/HomePage" + } + }, + "platform": { + "architecture": "samd", + "category": "Arduino", + "url": "https://downloads.arduino.cc/cores/core-ArduinoCore-samd-1.8.13.tar.bz2", + "archive_filename": "core-ArduinoCore-samd-1.8.13.tar.bz2", + "checksum": "SHA-256:47d44c80a5fd4ea224eb64fd676169e896caa6856f338d78feb4a12d42b4ea67", + "size": 3074191, "name": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)" - }, - "identification_properties": [ + }, + "programmers": [ { - "properties": { - "vid": "0x2341", - "pid": "0x8057" - } + "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "id": "atmel_ice", + "name": "Atmel-ICE" }, { - "properties": { - "vid": "0x2341", - "pid": "0x0057" - } + "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "id": "edbg", + "name": "Atmel EDBG" + }, + { + "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "id": "jlink", + "name": "Segger J-Link" + }, + { + "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "id": "sam_ice", + "name": "Atmel SAM-ICE" } - ], - "programmers": [ - { - "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", - "id": "edbg", - "name": "Atmel EDBG" + ], + "identification_properties": [ + { + "properties": { + "pid": "0x8057", + "vid": "0x2341" + } }, { - "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", - "id": "atmel_ice", - "name": "Atmel-ICE" + "properties": { + "pid": "0x0057", + "vid": "0x2341" + } }, { - "platform": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", - "id": "sam_ice", - "name": "Atmel SAM-ICE" + "properties": { + "board": "nano_33_iot" + } } - ] - }`) - - // Download samd core pinned to 1.8.8 - _, _, err = cli.Run("core", "install", "arduino:samd@1.8.8") - require.NoError(t, err) - - stdout, _, err = cli.Run("board", "details", "-b", "arduino:samd:nano_33_iot", "--format", "json") - require.NoError(t, err) - requirejson.Contains(t, stdout, `{"debugging_supported": true}`) + ] + }`) } func TestBoardDetailsNoFlags(t *testing.T) { @@ -374,61 +425,65 @@ func TestBoardSearch(t *testing.T) { _, _, err := cli.Run("update") require.NoError(t, err) - stdout, _, err := cli.Run("board", "search", "--format", "json") + stdout, _, err := cli.Run("board", "search", "--json") require.NoError(t, err) // Verifies boards are returned requirejson.NotEmpty(t, stdout) // Verifies no board has FQBN set since no platform is installed - requirejson.Query(t, stdout, "[ .[] | select(.fqbn) ] | length", "0") - requirejson.Contains(t, stdout, `[ - {"name": "Arduino UNO"}, - {"name": "Arduino Yún"}, - {"name": "Arduino Zero"}, - {"name": "Arduino Nano 33 BLE"}, - {"name": "Arduino Portenta H7"} - ]`) + requirejson.Query(t, stdout, "[ .boards[] | select(.fqbn) ] | length", "0") + requirejson.Contains(t, stdout, `{ + "boards": [ + {"name": "Arduino UNO"}, + {"name": "Arduino Yún"}, + {"name": "Arduino Zero"}, + {"name": "Arduino Nano 33 BLE"}, + {"name": "Arduino Portenta H7"} + ]}`) // Search in non installed boards - stdout, _, err = cli.Run("board", "search", "--format", "json", "nano", "33") + stdout, _, err = cli.Run("board", "search", "--json", "nano", "33") require.NoError(t, err) // Verifies boards are returned requirejson.NotEmpty(t, stdout) // Verifies no board has FQBN set since no platform is installed - requirejson.Query(t, stdout, "[ .[] | select(.fqbn) ] | length", "0") - requirejson.Contains(t, stdout, `[ - {"name": "Arduino Nano 33 BLE"}, - {"name": "Arduino Nano 33 IoT"} - ]`) + requirejson.Query(t, stdout, "[ .boards[] | select(.fqbn) ] | length", "0") + requirejson.Contains(t, stdout, `{ + "boards": [ + {"name": "Arduino Nano 33 BLE"}, + {"name": "Arduino Nano 33 IoT"} + ]}`) // Install a platform from index _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") require.NoError(t, err) - stdout, _, err = cli.Run("board", "search", "--format", "json") + stdout, _, err = cli.Run("board", "search", "--json") require.NoError(t, err) requirejson.NotEmpty(t, stdout) // Verifies some FQBNs are now returned after installing a platform - requirejson.Query(t, stdout, "[ .[] | select(.fqbn) ] | length", "26") - requirejson.Contains(t, stdout, `[ - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" - }, - { - "name": "Arduino Uno", - "fqbn": "arduino:avr:uno" - } - ]`) + requirejson.Query(t, stdout, "[ .boards[] | select(.fqbn) ] | length", "26") + requirejson.Contains(t, stdout, `{ + "boards": [ + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + }, + { + "name": "Arduino Uno", + "fqbn": "arduino:avr:uno" + } + ]}`) - stdout, _, err = cli.Run("board", "search", "--format", "json", "arduino", "yun") + stdout, _, err = cli.Run("board", "search", "--json", "arduino", "yun") require.NoError(t, err) requirejson.NotEmpty(t, stdout) - requirejson.Contains(t, stdout, `[ - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" - } - ]`) + requirejson.Contains(t, stdout, `{ + "boards": [ + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + } + ]}`) // Manually installs a core in sketchbooks hardware folder gitUrl := "https://github.com/arduino/ArduinoCore-samd.git" @@ -439,51 +494,54 @@ func TestBoardSearch(t *testing.T) { }) require.NoError(t, err) - stdout, _, err = cli.Run("board", "search", "--format", "json") + stdout, _, err = cli.Run("board", "search", "--json") require.NoError(t, err) requirejson.NotEmpty(t, stdout) // Verifies some FQBNs are now returned after installing a platform - requirejson.Query(t, stdout, "[ .[] | select(.fqbn) ] | length", "43") - requirejson.Contains(t, stdout, `[ - { - "name": "Arduino Uno", - "fqbn": "arduino:avr:uno" - }, - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" - }, - { - "name": "Arduino MKR WiFi 1010", - "fqbn": "arduino-beta-development:samd:mkrwifi1010" - }, - { - "name": "Arduino MKR1000", - "fqbn": "arduino-beta-development:samd:mkr1000" - }, - { - "name": "Arduino MKRZERO", - "fqbn": "arduino-beta-development:samd:mkrzero" - }, - { - "name": "Arduino NANO 33 IoT", - "fqbn": "arduino-beta-development:samd:nano_33_iot" - }, - { - "fqbn": "arduino-beta-development:samd:arduino_zero_native" - } - ]`) + requirejson.Query(t, stdout, "[ .boards[] | select(.fqbn) ] | length", "43") + requirejson.Contains(t, stdout, `{ + "boards": + [ + { + "name": "Arduino Uno", + "fqbn": "arduino:avr:uno" + }, + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + }, + { + "name": "Arduino MKR WiFi 1010", + "fqbn": "arduino-beta-development:samd:mkrwifi1010" + }, + { + "name": "Arduino MKR1000", + "fqbn": "arduino-beta-development:samd:mkr1000" + }, + { + "name": "Arduino MKRZERO", + "fqbn": "arduino-beta-development:samd:mkrzero" + }, + { + "name": "Arduino NANO 33 IoT", + "fqbn": "arduino-beta-development:samd:nano_33_iot" + }, + { + "fqbn": "arduino-beta-development:samd:arduino_zero_native" + } + ]}`) - stdout, _, err = cli.Run("board", "search", "--format", "json", "mkr1000") + stdout, _, err = cli.Run("board", "search", "--json", "mkr1000") require.NoError(t, err) requirejson.NotEmpty(t, stdout) // Verifies some FQBNs are now returned after installing a platform - requirejson.Contains(t, stdout, `[ - { - "name": "Arduino MKR1000", - "fqbn": "arduino-beta-development:samd:mkr1000" - } - ]`) + requirejson.Contains(t, stdout, `{ + "boards": [ + { + "name": "Arduino MKR1000", + "fqbn": "arduino-beta-development:samd:mkr1000" + } + ]}`) } func TestBoardAttach(t *testing.T) { @@ -492,79 +550,64 @@ func TestBoardAttach(t *testing.T) { sketchName := "BoardAttach" sketchPath := cli.SketchbookDir().Join(sketchName) - sketchProjectFlie := sketchPath.Join("sketch.yaml") + sketchProjectFile := sketchPath.Join("sketch.yaml") // Create a test sketch _, _, err := cli.Run("sketch", "new", sketchPath.String()) require.NoError(t, err) { - stdout, _, err := cli.Run("board", "attach", "-b", "arduino:avr:uno", sketchPath.String(), "--format", "json") + stdout, _, err := cli.Run("board", "attach", "-b", "arduino:avr:uno", sketchPath.String(), "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".fqbn", `"arduino:avr:uno"`) - yamlData, err := sketchProjectFlie.ReadFile() + yamlData, err := sketchProjectFile.ReadFile() require.NoError(t, err) require.Contains(t, string(yamlData), "default_fqbn: arduino:avr:uno") require.NotContains(t, string(yamlData), "default_port:") require.NotContains(t, string(yamlData), "default_protocol:") } { - stdout, _, err := cli.Run("board", "attach", "-p", "/dev/ttyACM0", "-l", "serial", sketchPath.String(), "--format", "json") + stdout, _, err := cli.Run("board", "attach", "-p", "/dev/ttyACM0", "-l", "serial", sketchPath.String(), "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".fqbn", `"arduino:avr:uno"`) requirejson.Query(t, stdout, ".port.address", `"/dev/ttyACM0"`) requirejson.Query(t, stdout, ".port.protocol", `"serial"`) - yamlData, err := sketchProjectFlie.ReadFile() + yamlData, err := sketchProjectFile.ReadFile() require.NoError(t, err) require.Contains(t, string(yamlData), "default_fqbn: arduino:avr:uno") require.Contains(t, string(yamlData), "default_port: /dev/ttyACM0") require.Contains(t, string(yamlData), "default_protocol: serial") } { - stdout, _, err := cli.Run("board", "attach", "-p", "/dev/ttyACM0", sketchPath.String(), "--format", "json") + stdout, _, err := cli.Run("board", "attach", "-p", "/dev/ttyACM0", sketchPath.String(), "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".fqbn", `"arduino:avr:uno"`) requirejson.Query(t, stdout, ".port.address", `"/dev/ttyACM0"`) requirejson.Query(t, stdout, ".port.protocol", `null`) - yamlData, err := sketchProjectFlie.ReadFile() + yamlData, err := sketchProjectFile.ReadFile() require.NoError(t, err) require.Contains(t, string(yamlData), "default_fqbn: arduino:avr:uno") require.Contains(t, string(yamlData), "default_port: /dev/ttyACM0") require.NotContains(t, string(yamlData), "default_protocol:") } -} - -func TestBoardSearchWithOutdatedCore(t *testing.T) { - env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) - defer env.CleanUp() - - _, _, err := cli.Run("update") - require.NoError(t, err) - - // Install an old core version - _, _, err = cli.Run("core", "install", "arduino:samd@1.8.6") - require.NoError(t, err) + { + stdout, _, err := cli.Run("board", "attach", "-b", "arduino:samd:mkr1000", "-P", "atmel_ice", sketchPath.String(), "--json") + require.NoError(t, err) + requirejson.Query(t, stdout, ".fqbn", `"arduino:samd:mkr1000"`) + requirejson.Query(t, stdout, ".programmer", `"atmel_ice"`) + requirejson.Query(t, stdout, ".port.address", `"/dev/ttyACM0"`) + requirejson.Query(t, stdout, ".port.protocol", `null`) - stdout, _, err := cli.Run("board", "search", "arduino:samd:mkrwifi1010", "--format", "json") - require.NoError(t, err) - requirejson.Len(t, stdout, 1) - var data []map[string]interface{} - err = json.Unmarshal(stdout, &data) - require.NoError(t, err) - board := data[0] - require.Equal(t, board["name"], "Arduino MKR WiFi 1010") - require.Equal(t, board["fqbn"], "arduino:samd:mkrwifi1010") - samdCore := board["platform"].(map[string]interface{}) - require.Equal(t, samdCore["id"], "arduino:samd") - installedVersion, err := semver.Parse(samdCore["installed"].(string)) - require.NoError(t, err) - latestVersion, err := semver.Parse(samdCore["latest"].(string)) - require.NoError(t, err) - // Installed version must be older than latest - require.True(t, installedVersion.LessThan(latestVersion)) + yamlData, err := sketchProjectFile.ReadFile() + require.NoError(t, err) + require.Contains(t, string(yamlData), "default_fqbn: arduino:samd:mkr1000") + require.Contains(t, string(yamlData), "default_programmer: atmel_ice") + require.Contains(t, string(yamlData), "default_port: /dev/ttyACM0") + require.NotContains(t, string(yamlData), "default_protocol:") + } } func TestBoardListWithFailedBuiltinInstallation(t *testing.T) { @@ -578,10 +621,14 @@ func TestBoardListWithFailedBuiltinInstallation(t *testing.T) { _, _, err = cli.Run("board", "list") require.NoError(t, err) + ext := "" + if runtime.GOOS == "windows" { + ext = ".exe" + } // remove files from serial-discovery directory to simulate a failed installation serialDiscovery, err := cli.DataDir().Join("packages", "builtin", "tools", "serial-discovery").ReadDir() require.NoError(t, err) - require.NoError(t, serialDiscovery[0].Join("serial-discovery.exe").Remove()) + require.NoError(t, serialDiscovery[0].Join("serial-discovery"+ext).Remove()) // board list should install serial-discovery again stdout, stderr, err := cli.Run("board", "list") @@ -601,9 +648,10 @@ func TestCLIStartupWithCorruptedInventory(t *testing.T) { require.NoError(t, err) _, err = f.WriteString(`data: '[{"name":"WCH;32?'","fqbn":"esp32:esp32:esp32s3camlcd"}]'`) require.NoError(t, err) + require.NoError(t, f.Close()) // the CLI should not be able to load inventory and report it to the logs - _, stderr, err := cli.Run("core", "update-index", "-v") + stdout, _, err := cli.Run("core", "update-index", "-v") require.NoError(t, err) - require.Contains(t, string(stderr), "Error loading inventory store") + require.Contains(t, string(stdout), "Error loading inventory store") } diff --git a/internal/integrationtest/board/hardware_loading_test.go b/internal/integrationtest/board/hardware_loading_test.go index 54bf8cffa14..758ce6a40d2 100644 --- a/internal/integrationtest/board/hardware_loading_test.go +++ b/internal/integrationtest/board/hardware_loading_test.go @@ -43,32 +43,37 @@ func TestHardwareLoading(t *testing.T) { t.Run("Simple", func(t *testing.T) { { - out, _, err := cli.Run("core", "list", "--format", "json") + out, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.LengthMustEqualTo(1) - jsonOut.MustContain(`[ - { - "id": "arduino:avr", - "installed": "1.8.6", - "name": "Arduino AVR Boards", - "boards": [ - { - "name": "Arduino Uno", - "fqbn": "arduino:avr:uno" - }, - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" + jsonOut.MustContain(`{ + "platforms": [ + { + "id": "arduino:avr", + "installed_version": "1.8.6", + "releases": { + "1.8.6": { + "name": "Arduino AVR Boards", + "boards": [ + { + "name": "Arduino Uno", + "fqbn": "arduino:avr:uno" + }, + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + } + ] + } } - ] - } - ]`) + } + ]}`) } { // Also test local platform.txt properties override - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:uno", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:uno", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -90,12 +95,12 @@ func TestHardwareLoading(t *testing.T) { "id": "avrispmkii", "name": "AVRISP mkII" } - ] + ] }`) } { - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:yun", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:yun", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -110,7 +115,7 @@ func TestHardwareLoading(t *testing.T) { { // Check un-expansion of board_properties - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:robotMotor", "--show-properties=unexpanded", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:robotMotor", "--show-properties=unexpanded", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -126,7 +131,7 @@ func TestHardwareLoading(t *testing.T) { { // Also test local boards.txt properties override - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:diecimila", "--show-properties=unexpanded", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:diecimila", "--show-properties=unexpanded", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -147,64 +152,72 @@ func TestHardwareLoading(t *testing.T) { require.NoError(t, customHwDir.CopyDirTo(cli.SketchbookDir().Join("hardware"))) { - out, _, err := cli.Run("core", "list", "--format", "json") + out, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) - if runtime.GOOS == "windows" { - // a package is a symlink, and windows does not support them - jsonOut.LengthMustEqualTo(2) - } else { - jsonOut.LengthMustEqualTo(3) - } - jsonOut.MustContain(`[ - { - "id": "arduino:avr", - "installed": "1.8.6", - "name": "Arduino AVR Boards", - "boards": [ - { - "name": "Arduino Uno", - "fqbn": "arduino:avr:uno" - }, - { - "name": "Arduino Yún", - "fqbn": "arduino:avr:yun" - } - ] - } - ]`) - jsonOut.MustContain(`[ - { - "id": "my_avr_platform:avr", - "installed": "9.9.9", - "name": "My AVR Boards", - "boards": [ - { - "name": "Arduino Yún", - "fqbn": "my_avr_platform:avr:custom_yun" + jsonOut.Query(`.platforms | length`).LengthMustEqualTo(3) + jsonOut.MustContain(`{ + "platforms": [ + { + "id": "arduino:avr", + "installed_version": "1.8.6", + "releases": { + "1.8.6": { + "name": "Arduino AVR Boards", + "boards": [ + { + "name": "Arduino Uno", + "fqbn": "arduino:avr:uno" + }, + { + "name": "Arduino Yún", + "fqbn": "arduino:avr:yun" + } + ] + } } - ], - "manually_installed": true, - "missing_metadata": true - } - ]`) + } + ]}`) + jsonOut.MustContain(`{ + "platforms": [ + { + "id": "my_avr_platform:avr", + "installed_version": "9.9.9", + "releases": { + "9.9.9": { + "name": "My AVR Boards", + "boards": [ + { + "name": "Arduino Yún", + "fqbn": "my_avr_platform:avr:custom_yun" + } + ] + } + }, + "manually_installed": true + } + ]}`) // require.False(t, myAVRPlatformAvrArch.Properties.ContainsKey("preproc.includes.flags")) if runtime.GOOS != "windows" { - jsonOut.MustContain(`[ - { - "id": "my_symlinked_avr_platform:avr", - "manually_installed": true, - "missing_metadata": true - } - ]`) + jsonOut.MustContain(`{ + "platforms": [ + { + "id": "my_symlinked_avr_platform:avr", + "manually_installed": true, + "releases": { + "9.9.9": { + } + } + } + ]}`) } } { // Also test local platform.txt properties override - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:uno", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:uno", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ @@ -226,12 +239,12 @@ func TestHardwareLoading(t *testing.T) { "id": "avrispmkii", "name": "AVRISP mkII" } - ] + ] }`) } { - out, _, err := cli.Run("board", "details", "-b", "arduino:avr:yun", "--show-properties=unexpanded", "--format", "json") + out, _, err := cli.Run("board", "details", "-b", "arduino:avr:yun", "--show-properties=unexpanded", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.MustContain(`{ diff --git a/internal/integrationtest/compile_1/compile_test.go b/internal/integrationtest/compile_1/compile_test.go index 78ceb5ca63c..b380f563ccc 100644 --- a/internal/integrationtest/compile_1/compile_test.go +++ b/internal/integrationtest/compile_1/compile_test.go @@ -21,12 +21,13 @@ import ( "encoding/json" "fmt" "os" + "regexp" "sort" "strings" "testing" "time" - "github.com/arduino/arduino-cli/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" "github.com/arduino/arduino-cli/internal/integrationtest" "github.com/arduino/go-paths-helper" "github.com/go-git/go-git/v5" @@ -124,15 +125,17 @@ func compileWithSimpleSketch(t *testing.T, env *integrationtest.Environment, cli func compileWithCachePurgeNeeded(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) { // create directories that must be purged - baseDir := paths.TempDir().Join("arduino", "sketches") + out, _, err := cli.Run("config", "get", "build_cache.path") + require.NoError(t, err) + cacheDir := paths.New(strings.TrimSpace(string(out))).Join("sketches") // purge case: last used file too old - oldDir1 := baseDir.Join("test_old_sketch_1") + oldDir1 := cacheDir.Join("test_old_sketch_1") require.NoError(t, oldDir1.MkdirAll()) require.NoError(t, oldDir1.Join(".last-used").WriteFile([]byte{})) require.NoError(t, oldDir1.Join(".last-used").Chtimes(time.Now(), time.Unix(0, 0))) // no purge case: last used file not existing - missingFileDir := baseDir.Join("test_sketch_2") + missingFileDir := cacheDir.Join("test_sketch_2") require.NoError(t, missingFileDir.MkdirAll()) defer oldDir1.RemoveAll() @@ -163,7 +166,7 @@ func compileWithSimpleSketchCustomEnv(t *testing.T, env *integrationtest.Environ require.NoError(t, err) // Build sketch for arduino:avr:uno with json output - stdout, _, err = cli.RunWithCustomEnv(customEnv, "compile", "-b", fqbn, sketchPath.String(), "--format", "json") + stdout, _, err = cli.RunWithCustomEnv(customEnv, "compile", "-b", fqbn, sketchPath.String(), "--json") require.NoError(t, err) // check is a valid json and contains requested data var compileOutput map[string]interface{} @@ -171,12 +174,13 @@ func compileWithSimpleSketchCustomEnv(t *testing.T, env *integrationtest.Environ require.NoError(t, err) require.NotEmpty(t, compileOutput["compiler_out"]) require.Empty(t, compileOutput["compiler_err"]) + builderResult := compileOutput["builder_result"].(map[string]any) + buildDir := paths.New(builderResult["build_path"].(string)) // Verifies expected binaries have been built md5 := md5.Sum(([]byte(sketchPath.String()))) sketchPathMd5 := strings.ToUpper(hex.EncodeToString(md5[:])) require.NotEmpty(t, sketchPathMd5) - buildDir := paths.TempDir().Join("arduino", "sketches", sketchPathMd5) require.FileExists(t, buildDir.Join(sketchName+".ino.eep").String()) require.FileExists(t, buildDir.Join(sketchName+".ino.elf").String()) require.FileExists(t, buildDir.Join(sketchName+".ino.hex").String()) @@ -219,16 +223,36 @@ func compileWithSketchWithSymlinkSelfloop(t *testing.T, env *integrationtest.Env require.NoError(t, err) require.Contains(t, string(stdout), "Sketch created in: "+sketchPath.String()) - // create a symlink that loops on himself + // Create a symlink that loops on himself + // + // /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop + // ├── CompileIntegrationTestSymlinkSelfLoop.ino + // └── loop -> /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop/loop + // + // in this case the link is "broken", and it will be ignored by the compiler loopFilePath := sketchPath.Join("loop") err = os.Symlink(loopFilePath.String(), loopFilePath.String()) require.NoError(t, err) - // Build sketch for arduino:avr:uno + _, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String()) + require.NoError(t, err) + + // Add a symlink that loops on himself named as a .ino file + // + // /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop + // ├── CompileIntegrationTestSymlinkSelfLoop.ino + // ├── loop -> /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop/loop + // └── loop.ino -> /tmp/cli2843369229/Arduino/CompileIntegrationTestSymlinkSelfLoop/loop.ino + // + // in this case the new link is "broken" as before, but being part of the sketch will trigger an error. + loopInoFilePath := sketchPath.Join("loop.ino") + err = os.Symlink(loopFilePath.String(), loopInoFilePath.String()) + require.NoError(t, err) + _, stderr, err := cli.Run("compile", "-b", fqbn, sketchPath.String()) // The assertion is a bit relaxed in this case because win behaves differently from macOs and linux // returning a different error detailed message - require.Contains(t, string(stderr), "Can't open sketch:") + require.Contains(t, string(stderr), "Error during build:") require.Error(t, err) } { @@ -406,11 +430,16 @@ func compileWithOutputDirFlag(t *testing.T, env *integrationtest.Environment, cl _, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String(), "--output-dir", outputDir.String()) require.NoError(t, err) + // Get default build cache dir + out, _, err := cli.Run("config", "get", "build_cache.path") + require.NoError(t, err) + buildCache := paths.New(strings.TrimSpace(string(out))) + // Verifies expected binaries have been built md5 := md5.Sum(([]byte(sketchPath.String()))) sketchPathMd5 := strings.ToUpper(hex.EncodeToString(md5[:])) require.NotEmpty(t, sketchPathMd5) - buildDir := paths.TempDir().Join("arduino", "sketches", sketchPathMd5) + buildDir := buildCache.Join("sketches", sketchPathMd5) require.FileExists(t, buildDir.Join(sketchName+".ino.eep").String()) require.FileExists(t, buildDir.Join(sketchName+".ino.elf").String()) require.FileExists(t, buildDir.Join(sketchName+".ino.hex").String()) @@ -495,13 +524,15 @@ func compileWithExportBinariesConfig(t *testing.T, env *integrationtest.Environm defer cli.WorkingDir().Join("arduino-cli.yaml").Remove() // Test if arduino-cli config file written in the previous run has the `always_export_binaries` flag set. - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) requirejson.Contains(t, stdout, ` { - "sketch": { - "always_export_binaries": "true" - } + "config": { + "sketch": { + "always_export_binaries": true + } + } }`) // Test compilation with export binaries env var set @@ -819,19 +850,26 @@ func TestCompileWithArchivesAndLongPaths(t *testing.T) { require.NoError(t, err) // Install test library - _, _, err = cli.Run("lib", "install", "ArduinoIoTCloud", "--config-file", "arduino-cli.yaml") + // (We must use ArduinoIOTCloud@2.4.1 because it has a folder with a lot of files + // that will trigger the creation of an objs.a archive) + _, _, err = cli.Run("lib", "install", "ArduinoIoTCloud@2.4.1", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "ArduinoIoTCloud", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("lib", "examples", "ArduinoIoTCloud", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - var libOutput []map[string]interface{} - err = json.Unmarshal(stdout, &libOutput) - require.NoError(t, err) - sketchPath := paths.New(libOutput[0]["library"].(map[string]interface{})["install_dir"].(string)) + libOutput := strings.Trim(requirejson.Parse(t, stdout).Query(`.examples.[0].library.install_dir`).String(), `"`) + sketchPath := paths.New(libOutput) sketchPath = sketchPath.Join("examples", "ArduinoIoTCloud-Advanced") - _, _, err = cli.Run("compile", "-b", "esp8266:esp8266:huzzah", sketchPath.String(), "--config-file", "arduino-cli.yaml") - require.NoError(t, err) + t.Run("CheckCachingOfFolderArchives", func(t *testing.T) { + _, _, err = cli.Run("compile", "-b", "esp8266:esp8266:huzzah", sketchPath.String(), "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + + // Run compile again and check if the archive is re-used (cached) + out, _, err := cli.Run("compile", "-b", "esp8266:esp8266:huzzah", sketchPath.String(), "--config-file", "arduino-cli.yaml", "-v") + require.NoError(t, err) + require.True(t, regexp.MustCompile(`(?m)^Using previously compiled file:.*libraries.ArduinoIoTCloud.objs\.a$`).Match(out)) + }) } func TestCompileWithPrecompileLibrary(t *testing.T) { @@ -978,14 +1016,15 @@ func compileWithInvalidBuildOptionJson(t *testing.T, env *integrationtest.Enviro _, _, err := cli.Run("sketch", "new", sketchPath.String()) require.NoError(t, err) - // Get the build directory - md5 := md5.Sum(([]byte(sketchPath.String()))) - sketchPathMd5 := strings.ToUpper(hex.EncodeToString(md5[:])) - require.NotEmpty(t, sketchPathMd5) - buildDir := paths.TempDir().Join("arduino", "sketches", sketchPathMd5) - - _, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String(), "--verbose") + out, _, err := cli.Run("compile", "-b", fqbn, sketchPath.String(), "--json") require.NoError(t, err) + var builderOutput struct { + BuilderResult struct { + BuildPath string `json:"build_path"` + } `json:"builder_result"` + } + require.NoError(t, json.Unmarshal(out, &builderOutput)) + buildDir := paths.New(builderOutput.BuilderResult.BuildPath) // Breaks the build.options.json file buildOptionsJson := buildDir.Join("build.options.json") @@ -1159,7 +1198,7 @@ void loop() { ` expected = strings.ReplaceAll(expected, "%SKETCH_PATH%", cpp.QuoteString(sketchPath.Join("SketchSimple.ino").String())) - jsonOut, _, err := cli.Run("compile", "-b", fqbn, "--preprocess", sketchPath.String(), "--format", "json") + jsonOut, _, err := cli.Run("compile", "-b", fqbn, "--preprocess", sketchPath.String(), "--json") require.NoError(t, err) var ex struct { CompilerOut string `json:"compiler_out"` @@ -1282,3 +1321,46 @@ func buildWithCustomBuildPathAndOUtputDirFlag(t *testing.T, env *integrationtest require.NotEmpty(t, content) } } + +func TestCompileWithOutputDirFlagIgnoringFoldersCreatedByEsp32RainMakerLib(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + // Update index with esp32 core and install it + url := "https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json" + _, _, err = cli.Run("core", "update-index", "--additional-urls="+url) + require.NoError(t, err) + _, _, err = cli.Run("core", "install", "esp32:esp32@3.0.7", "--additional-urls="+url) + require.NoError(t, err) + + sketchName := "RainMakerSketch" + sketchPath := cli.SketchbookDir().Join(sketchName) + _, _, err = cli.Run("sketch", "new", sketchPath.String()) + require.NoError(t, err) + + // When importing the `RMaker` library, the esp32 core produces in output a folder, + // containing all the binaries exported. The name of the folder matches the sketch name. + // In out case: + // cache-dir/ + // |- RainMakerSketch.ino/ <--- This should be ignored + // |- RainMakerSketch.ino.uf2 + // |- RainMakerSketch.ino.bin + // |- ... + err = sketchPath.Join(sketchName + ".ino").WriteFile([]byte(` + #include "RMaker.h" + void setup() { } + void loop() { }`, + )) + require.NoError(t, err) + + buildPath := cli.DataDir().Join("test_dir", "build_dir") + outputDir := cli.SketchbookDir().Join("test_dir", "output_dir") + _, stderr, err := cli.Run("compile", "-b", "esp32:esp32:esp32", sketchPath.String(), "--build-path", buildPath.String(), "--output-dir", outputDir.String()) + require.NoError(t, err) + require.NotContains(t, stderr, []byte("Error during build: Error copying output file")) + require.DirExists(t, buildPath.Join(sketchName+".ino").String()) + require.NoDirExists(t, outputDir.Join(sketchName+".ino").String()) +} diff --git a/internal/integrationtest/compile_3/compile_commands_test.go b/internal/integrationtest/compile_3/compile_commands_test.go new file mode 100644 index 00000000000..1abdfc9a056 --- /dev/null +++ b/internal/integrationtest/compile_3/compile_commands_test.go @@ -0,0 +1,89 @@ +// This file is part of arduino-cli. +// +// Copyright 2022 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "encoding/json" + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" + "go.bug.st/testifyjson/requirejson" +) + +func TestCompileCommandsJSONGeneration(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2401 + + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Run update-index with our test index + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.5") + require.NoError(t, err) + + // Create a test sketch + out, _, err := cli.Run("sketch", "new", "Test", "--json") + require.NoError(t, err) + var s struct { + Path string `json:"sketch_path"` + } + require.NoError(t, json.Unmarshal(out, &s)) + sketchPath := paths.New(s.Path) + buildPath := sketchPath.Join("build") + + { + // Normal build + _, _, err = cli.Run( + "compile", + "-b", "arduino:avr:uno", + "--build-path", buildPath.String(), + sketchPath.String()) + require.NoError(t, err) + + compileCommandsPath := buildPath.Join("compile_commands.json") + require.True(t, compileCommandsPath.Exist()) + compileCommandJson, err := compileCommandsPath.ReadFile() + require.NoError(t, err) + compileCommands := requirejson.Parse(t, compileCommandJson) + // Check that the variant include path is present, one of the arguments must be + // something like: + // "-I/home/user/.arduino15/packages/arduino/hardware/avr/1.8.6/variants/standard" + compileCommands.Query(`[ .[0].arguments[] | contains("standard") ] | any`).MustEqual(`true`) + } + + { + // Build with skip-library-check + _, _, err = cli.Run( + "compile", + "-b", "arduino:avr:uno", + "--only-compilation-database", + "--skip-libraries-discovery", + "--build-path", buildPath.String(), + sketchPath.String()) + require.NoError(t, err) + + compileCommandsPath := buildPath.Join("compile_commands.json") + require.True(t, compileCommandsPath.Exist()) + compileCommandJson, err := compileCommandsPath.ReadFile() + require.NoError(t, err) + compileCommands := requirejson.Parse(t, compileCommandJson) + // Check that the variant include path is present, one of the arguments must be + // something like: + // "-I/home/user/.arduino15/packages/arduino/hardware/avr/1.8.6/variants/standard" + compileCommands.Query(`[ .[0].arguments[] | contains("standard") ] | any`).MustEqual(`true`) + } +} diff --git a/internal/integrationtest/compile_3/compile_env_var_test.go b/internal/integrationtest/compile_3/compile_env_var_test.go new file mode 100644 index 00000000000..ee786c2d881 --- /dev/null +++ b/internal/integrationtest/compile_3/compile_env_var_test.go @@ -0,0 +1,60 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestCompileEnvVarOnNewProcess(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2499 + + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Run update-index with our test index + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + // Prepare sketchbook and sketch + sketch, err := paths.New("testdata", "bare_minimum").Abs() + require.NoError(t, err) + + // Build "printenv" helper insider testdata/printenv + printenvDir, err := paths.New("testdata", "printenv").Abs() + require.NoError(t, err) + builder, err := paths.NewProcess(nil, "go", "build") + require.NoError(t, err) + builder.SetDir(printenvDir.String()) + require.NoError(t, builder.Run()) + printenv := printenvDir.Join("printenv") + + // Patch avr core to run printenv instead of size + plTxt, err := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6", "platform.txt").Append() + require.NoError(t, err) + _, err = plTxt.WriteString("recipe.size.pattern=" + printenv.String() + "\n") + require.NoError(t, err) + require.NoError(t, plTxt.Close()) + + // Run compile and get ENV + _, stderr, err := cli.Run("compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(stderr), "ENV> ARDUINO_USER_AGENT=") +} diff --git a/internal/integrationtest/compile_3/compile_show_properties_test.go b/internal/integrationtest/compile_3/compile_show_properties_test.go index 1c17ef63d47..c7b400167fc 100644 --- a/internal/integrationtest/compile_3/compile_show_properties_test.go +++ b/internal/integrationtest/compile_3/compile_show_properties_test.go @@ -20,13 +20,13 @@ import ( "testing" "github.com/arduino/arduino-cli/internal/integrationtest" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-properties-orderedmap" "github.com/stretchr/testify/require" ) type cliCompileResponse struct { - BuilderResult *commands.CompileResponse `json:"builder_result"` + BuilderResult *rpc.BuilderResult `json:"builder_result"` } func TestCompileShowProperties(t *testing.T) { @@ -51,9 +51,9 @@ func TestCompileShowProperties(t *testing.T) { require.True(t, props.ContainsKey("sketch_path")) require.NotContains(t, props.Get("archive_file_path"), "{build.path}") - // Test --show-properties --format JSON output is clean + // Test --show-properties --json JSON output is clean // properties are expanded - stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties", "--format", "json", bareMinimum.String()) + stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties", "--json", bareMinimum.String()) require.NoError(t, err) require.Empty(t, stderr) props, err = properties.LoadFromSlice( @@ -69,8 +69,8 @@ func TestCompileShowProperties(t *testing.T) { require.NoError(t, err, "Output must be a clean property list") require.NotEmpty(t, stderr) - // Test --show-properties --format JSON output is clean, with a wrong FQBN - stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:unoa", "-v", "--show-properties", "--format", "json", bareMinimum.String()) + // Test --show-properties --json JSON output is clean, with a wrong FQBN + stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:unoa", "-v", "--show-properties", "--json", bareMinimum.String()) require.Error(t, err) require.Empty(t, stderr) requireCompileResponseJson(t, stdout) @@ -87,7 +87,7 @@ func TestCompileShowProperties(t *testing.T) { // Test --show-properties=unexpanded output is clean // properties are not expanded - stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties=unexpanded", "--format", "json", bareMinimum.String()) + stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties=unexpanded", "--json", bareMinimum.String()) require.NoError(t, err) require.Empty(t, stderr) props, err = properties.LoadFromSlice( @@ -106,9 +106,9 @@ func TestCompileShowProperties(t *testing.T) { require.True(t, props.ContainsKey("archive_file_path")) require.NotContains(t, props.Get("archive_file_path"), "{build.path}") - // Test --show-properties=expanded --format JSON output is clean + // Test --show-properties=expanded --json JSON output is clean // properties are expanded - stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties=expanded", "--format", "json", bareMinimum.String()) + stdout, stderr, err = cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "--show-properties=expanded", "--json", bareMinimum.String()) require.NoError(t, err) require.Empty(t, stderr) props, err = properties.LoadFromSlice( diff --git a/internal/integrationtest/compile_3/compile_test.go b/internal/integrationtest/compile_3/compile_test.go index 2df3d59f40d..8e15b901c6d 100644 --- a/internal/integrationtest/compile_3/compile_test.go +++ b/internal/integrationtest/compile_3/compile_test.go @@ -107,32 +107,119 @@ func TestCompilerErrOutput(t *testing.T) { _, _, err := cli.Run("core", "install", "arduino:avr@1.8.5") require.NoError(t, err) - { + t.Run("Diagnostics", func(t *testing.T) { // prepare sketch sketch, err := paths.New("testdata", "blink_with_wrong_cpp").Abs() require.NoError(t, err) // Run compile and catch err stream - out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "--format", "json", sketch.String()) + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--json", sketch.String()) require.Error(t, err) - compilerErr := requirejson.Parse(t, out).Query(".compiler_err") - compilerErr.MustContain(`"error"`) - } + outJson := requirejson.Parse(t, out) + outJson.Query(`.compiler_err`).MustContain(`"error"`) + outJson.Query(`.builder_result.diagnostics`).MustContain(` + [ + { + "severity": "ERROR", + "line": 1, + "column": 14, + "context": [ { "message": "In function 'void wrong()':" } ] + } + ]`) + }) + + t.Run("PreprocessorDiagnostics", func(t *testing.T) { + // Test the preprocessor errors are present in the diagnostics + + // prepare sketch + sketch, err := paths.New("testdata", "blink_with_wrong_include").Abs() + require.NoError(t, err) + + // Run compile and catch err stream + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--json", sketch.String()) + require.Error(t, err) + outJson := requirejson.Parse(t, out) + outJson.Query(`.success`).MustContain(`false`) + outJson.Query(`.builder_result.diagnostics`).MustContain(` + [ + { + "severity": "ERROR", + "line": 1, + "column": 2, + "message": "invalid preprocessing directive #wrong\n #wrong\n ^~~~~", + } + ]`) + }) + + t.Run("PreprocessorDiagnosticsWithLibErrors", func(t *testing.T) { + // Test the preprocessor errors are present in the diagnostics. + // In case we have 2 libraries: + // 1. one is missing + // 2. the other one is missing only from the first GCC run + // The diagnostics should report only 1 missing library. + + // prepare sketch + sketch, err := paths.New("testdata", "using_Wire_with_missing_lib").Abs() + require.NoError(t, err) + + // Run compile and catch err stream + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--json", sketch.String()) + require.Error(t, err) + outJson := requirejson.Parse(t, out) + outJson.Query(`.success`).MustContain(`false`) + outJson.Query(`.builder_result.diagnostics | length`).MustEqual("1") + outJson.Query(`.builder_result.diagnostics`).MustContain(` + [ + { + "severity": "FATAL", + "message": "MissingWire.h: No such file or directory\n #include \u003cMissingWire.h\u003e\n ^~~~~~~~~~~~~~~", + "line": 2, + "column": 10, + } + ]`) + }) + + t.Run("LibraryDiscoverFalseErrors", func(t *testing.T) { + // Check that library discover do not generate false errors + // https://github.com/arduino/arduino-cli/issues/2263 - // Check that library discover do not generate false errors - // https://github.com/arduino/arduino-cli/issues/2263 - { // prepare sketch sketch, err := paths.New("testdata", "using_Wire").Abs() require.NoError(t, err) // Run compile and catch err stream - out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--format", "json", sketch.String()) + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--json", sketch.String()) require.NoError(t, err) jsonOut := requirejson.Parse(t, out) jsonOut.Query(".compiler_out").MustNotContain(`"fatal error"`) jsonOut.Query(".compiler_err").MustNotContain(`"fatal error"`) - } + jsonOut.MustNotContain(`{ "diagnostics" : [] }`) + }) + + t.Run("PreprocessorErrorsOnStderr", func(t *testing.T) { + // Test the preprocessor errors are present in the diagnostics + // when they are printed on stderr + + // prepare sketch + sketch, err := paths.New("testdata", "blink_with_error_directive").Abs() + require.NoError(t, err) + + // Run compile and catch err stream + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--json", sketch.String()) + require.Error(t, err) + jsonOut := requirejson.Parse(t, out) + jsonOut.Query(".compiler_out").MustNotContain(`"error:"`) + jsonOut.Query(".compiler_err").MustContain(`"error:"`) + jsonOut.Query(`.builder_result.diagnostics`).MustContain(` + [ + { + "severity": "ERROR", + "message": "#error void setup(){} void loop(){}\n #error void setup(){} void loop(){}\n ^~~~~", + "line": 1, + "column": 2 + } + ]`) + }) } func TestCompileRelativeLibraryPath(t *testing.T) { diff --git a/internal/integrationtest/compile_3/compile_verbosity_test.go b/internal/integrationtest/compile_3/compile_verbosity_test.go new file mode 100644 index 00000000000..db87afa7562 --- /dev/null +++ b/internal/integrationtest/compile_3/compile_verbosity_test.go @@ -0,0 +1,103 @@ +// This file is part of arduino-cli. +// +// Copyright 2022 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestCompileVerbosity(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + _, _, err = cli.Run("core", "install", "arduino:avr") + require.NoError(t, err) + + goodSketch, err := paths.New("testdata", "bare_minimum").Abs() + require.NoError(t, err) + badSketch, err := paths.New("testdata", "blink_with_error_directive").Abs() + require.NoError(t, err) + + hasSketchSize := func(t *testing.T, out []byte) { + require.Contains(t, string(out), "Sketch uses") + } + noSketchSize := func(t *testing.T, out []byte) { + require.NotContains(t, string(out), "Sketch uses") + } + hasRecapTable := func(t *testing.T, out []byte) { + require.Contains(t, string(out), "Used platform") + } + noRecapTable := func(t *testing.T, out []byte) { + require.NotContains(t, string(out), "Used platform") + } + + t.Run("DefaultVerbosity/SuccessfulBuild", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "--fqbn", "arduino:avr:uno", goodSketch.String()) + require.NoError(t, err) + hasSketchSize(t, stdout) + noRecapTable(t, stdout) + require.Empty(t, stderr) + }) + + t.Run("DefaultVerbosity/BuildWithErrors", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "--fqbn", "arduino:avr:uno", badSketch.String()) + require.Error(t, err) + hasRecapTable(t, stdout) + require.NotEmpty(t, stderr) + }) + + t.Run("VerboseVerbosity/SuccessfulBuild", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", goodSketch.String()) + require.NoError(t, err) + hasSketchSize(t, stdout) + hasRecapTable(t, stdout) + require.Empty(t, stderr) + }) + + t.Run("VerboseVerbosity/BuildWithErrors", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", badSketch.String()) + require.Error(t, err) + hasRecapTable(t, stdout) + require.NotEmpty(t, stderr) + }) + + t.Run("QuietVerbosity/SuccessfulBuild", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "--fqbn", "arduino:avr:uno", "-q", goodSketch.String()) + require.NoError(t, err) + noSketchSize(t, stdout) + noRecapTable(t, stdout) + require.Empty(t, stdout) // Empty output + require.Empty(t, stderr) + }) + + t.Run("QuietVerbosity/BuildWithErrors", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "--fqbn", "arduino:avr:uno", "-q", badSketch.String()) + require.Error(t, err) + noRecapTable(t, stdout) + require.NotEmpty(t, stderr) + }) + + t.Run("ConflictingVerbosityOptions", func(t *testing.T) { + _, _, err := cli.Run("compile", "--fqbn", "arduino:avr:uno", "-v", "-q", goodSketch.String()) + require.Error(t, err) + }) +} diff --git a/internal/integrationtest/compile_3/lib_selection_test.go b/internal/integrationtest/compile_3/lib_selection_test.go index a999384d583..93c58acd529 100644 --- a/internal/integrationtest/compile_3/lib_selection_test.go +++ b/internal/integrationtest/compile_3/lib_selection_test.go @@ -45,7 +45,7 @@ func TestCompileLibrarySelection(t *testing.T) { // Perform two compile: // - the first should use LibraryA - stdout, _, err := cli.RunWithCustomEnv(vars, "compile", "-b", "arduino:avr:mega", "--format", "json", sketch.String()) + stdout, _, err := cli.RunWithCustomEnv(vars, "compile", "-b", "arduino:avr:mega", "--json", sketch.String()) require.NoError(t, err) requirejson.Contains(t, stdout, `{ "builder_result" : { @@ -56,7 +56,7 @@ func TestCompileLibrarySelection(t *testing.T) { }`) // - the second should use AnotherLibrary (because it was forced by --library) - stdout, _, err = cli.RunWithCustomEnv(vars, "compile", "-b", "arduino:avr:mega", "--library", anotherLib.String(), "--format", "json", sketch.String()) + stdout, _, err = cli.RunWithCustomEnv(vars, "compile", "-b", "arduino:avr:mega", "--library", anotherLib.String(), "--json", sketch.String()) require.NoError(t, err) requirejson.Contains(t, stdout, `{ "builder_result" : { diff --git a/internal/integrationtest/compile_3/testdata/blink_with_error_directive/blink_with_error_directive.ino b/internal/integrationtest/compile_3/testdata/blink_with_error_directive/blink_with_error_directive.ino new file mode 100644 index 00000000000..02bc8b99521 --- /dev/null +++ b/internal/integrationtest/compile_3/testdata/blink_with_error_directive/blink_with_error_directive.ino @@ -0,0 +1 @@ +#error void setup(){} void loop(){} diff --git a/internal/integrationtest/compile_3/testdata/blink_with_wrong_include/blink_with_wrong_include.ino b/internal/integrationtest/compile_3/testdata/blink_with_wrong_include/blink_with_wrong_include.ino new file mode 100644 index 00000000000..35887d391c9 --- /dev/null +++ b/internal/integrationtest/compile_3/testdata/blink_with_wrong_include/blink_with_wrong_include.ino @@ -0,0 +1,3 @@ +#wrong +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_3/testdata/printenv/.gitignore b/internal/integrationtest/compile_3/testdata/printenv/.gitignore new file mode 100644 index 00000000000..8094186ae54 --- /dev/null +++ b/internal/integrationtest/compile_3/testdata/printenv/.gitignore @@ -0,0 +1 @@ +printenv diff --git a/executils/testdata/delay/main.go b/internal/integrationtest/compile_3/testdata/printenv/main.go similarity index 83% rename from executils/testdata/delay/main.go rename to internal/integrationtest/compile_3/testdata/printenv/main.go index 883bb698f4e..fc132a150eb 100644 --- a/executils/testdata/delay/main.go +++ b/internal/integrationtest/compile_3/testdata/printenv/main.go @@ -1,6 +1,6 @@ // This file is part of arduino-cli. // -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) // // This software is released under the GNU General Public License version 3, // which covers the main part of arduino-cli. @@ -17,10 +17,11 @@ package main import ( "fmt" - "time" + "os" ) func main() { - time.Sleep(3 * time.Second) - fmt.Println("Elapsed!") + for _, env := range os.Environ() { + fmt.Fprintln(os.Stderr, "ENV>", env) + } } diff --git a/internal/integrationtest/compile_3/testdata/using_Wire_with_missing_lib/using_Wire_with_missing_lib.ino b/internal/integrationtest/compile_3/testdata/using_Wire_with_missing_lib/using_Wire_with_missing_lib.ino new file mode 100644 index 00000000000..a461189885d --- /dev/null +++ b/internal/integrationtest/compile_3/testdata/using_Wire_with_missing_lib/using_Wire_with_missing_lib.ino @@ -0,0 +1,5 @@ +#include <Wire.h> +#include <MissingWire.h> + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/broken_symlink_test.go b/internal/integrationtest/compile_4/broken_symlink_test.go new file mode 100644 index 00000000000..42d948269c6 --- /dev/null +++ b/internal/integrationtest/compile_4/broken_symlink_test.go @@ -0,0 +1,54 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestCompileWithBrokenSymLinks(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + t.Cleanup(env.CleanUp) + + // Install Arduino AVR Boards + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + t.Run("NonSketchFileBroken", func(t *testing.T) { + sketch, err := paths.New("testdata", "ValidSketchWithBrokenSymlink").Abs() + require.NoError(t, err) + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + }) + + t.Run("SketchFileBroken", func(t *testing.T) { + sketch, err := paths.New("testdata", "ValidSketchWithBrokenSketchFileSymlink").Abs() + require.NoError(t, err) + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", sketch.String()) + require.Error(t, err) + }) + + t.Run("NonInoSketchFileBroken", func(t *testing.T) { + sketch, err := paths.New("testdata", "ValidSketchWithNonInoBrokenSketchFileSymlink").Abs() + require.NoError(t, err) + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", sketch.String()) + require.Error(t, err) + }) +} diff --git a/internal/integrationtest/compile_4/compile_test.go b/internal/integrationtest/compile_4/compile_test.go index a61d68563a5..f0916138246 100644 --- a/internal/integrationtest/compile_4/compile_test.go +++ b/internal/integrationtest/compile_4/compile_test.go @@ -20,13 +20,14 @@ import ( "cmp" "encoding/json" "os/exec" + "regexp" "slices" "strings" "testing" "text/template" "time" - "github.com/arduino/arduino-cli/arduino/builder/cpp" + "github.com/arduino/arduino-cli/internal/arduino/builder/cpp" "github.com/arduino/arduino-cli/internal/integrationtest" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" @@ -844,7 +845,7 @@ func tryBuild(t *testing.T, env *integrationtest.Environment, cli *integrationte args := []string{ "compile", "-b", fqbn, - "--format", "json", + "--json", options.Sketch.String()} if !options.NoTestLibraries { libsPath, err := paths.New("testdata", "libraries").Abs() @@ -904,56 +905,82 @@ func comparePreprocessGoldenFile(t *testing.T, sketchDir *paths.Path, preprocess require.Equal(t, buf.String(), strings.ReplaceAll(preprocessedSketch, "\r\n", "\n")) } -func TestCoreCaching(t *testing.T) { +func TestBuildCaching(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() - sketchPath, err := paths.New("..", "testdata", "bare_minimum").Abs() - require.NoError(t, err) - // Install Arduino AVR Boards - _, _, err = cli.Run("core", "install", "arduino:avr@1.8.6") + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") require.NoError(t, err) - // Create temporary cache dir - buildCachePath, err := paths.MkTempDir("", "test_build_cache") - require.NoError(t, err) - defer buildCachePath.RemoveAll() + t.Run("CoreCaching", func(t *testing.T) { + sketchPath, err := paths.New("..", "testdata", "bare_minimum").Abs() + require.NoError(t, err) - // Build first time - _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) - require.NoError(t, err) + // Create temporary cache dir + buildCachePath, err := paths.MkTempDir("", "test_build_cache") + require.NoError(t, err) + defer buildCachePath.RemoveAll() - // Find cached core and save timestamp - pathList, err := buildCachePath.ReadDirRecursiveFiltered(nil, paths.FilterPrefixes("core.a")) - require.NoError(t, err) - require.Len(t, pathList, 1) - cachedCoreFile := pathList[0] - lastUsedPath := cachedCoreFile.Parent().Join(".last-used") - require.True(t, lastUsedPath.Exist()) - coreStatBefore, err := cachedCoreFile.Stat() - require.NoError(t, err) + // Build first time + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) + require.NoError(t, err) - // Run build again and check timestamp is unchanged - _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) - require.NoError(t, err) - coreStatAfterRebuild, err := cachedCoreFile.Stat() - require.NoError(t, err) - require.Equal(t, coreStatBefore.ModTime(), coreStatAfterRebuild.ModTime()) + // Find cached core and save timestamp + pathList, err := buildCachePath.ReadDirRecursiveFiltered(nil, paths.FilterPrefixes("core.a")) + require.NoError(t, err) + require.Len(t, pathList, 2) + cachedCoreFile := pathList[0] + require.True(t, cachedCoreFile.Parent().Join(".last-used").Exist()) + coreStatBefore, err := cachedCoreFile.Stat() + require.NoError(t, err) - // Touch a file of the core and check if the builder invalidate the cache - time.Sleep(time.Second) - now := time.Now().Local() - coreFolder := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6") - err = coreFolder.Join("cores", "arduino", "Arduino.h").Chtimes(now, now) - require.NoError(t, err) + sketchCoreFile := pathList[1] + require.True(t, sketchCoreFile.Parent().Parent().Join(".last-used").Exist()) + sketchStatBefore, err := sketchCoreFile.Stat() + require.NoError(t, err) - // Run build again, to verify that the builder rebuilds core.a - _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) - require.NoError(t, err) - coreStatAfterTouch, err := cachedCoreFile.Stat() - require.NoError(t, err) - require.NotEqual(t, coreStatBefore.ModTime(), coreStatAfterTouch.ModTime()) + // Run build again and check timestamp is unchanged + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) + require.NoError(t, err) + coreStatAfterRebuild, err := cachedCoreFile.Stat() + require.NoError(t, err) + require.Equal(t, coreStatBefore.ModTime(), coreStatAfterRebuild.ModTime()) + sketchStatAfterRebuild, err := sketchCoreFile.Stat() + require.NoError(t, err) + require.Equal(t, sketchStatBefore.ModTime(), sketchStatAfterRebuild.ModTime()) + + // Touch a file of the core and check if the builder invalidate the cache + time.Sleep(time.Second) + now := time.Now().Local() + coreFolder := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6") + err = coreFolder.Join("cores", "arduino", "Arduino.h").Chtimes(now, now) + require.NoError(t, err) + + // Run build again, to verify that the builder rebuilds core.a + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-cache-path", buildCachePath.String(), sketchPath.String()) + require.NoError(t, err) + coreStatAfterTouch, err := cachedCoreFile.Stat() + require.NoError(t, err) + require.NotEqual(t, coreStatBefore.ModTime(), coreStatAfterTouch.ModTime()) + }) + + t.Run("LibraryCacheWithDifferentDirname", func(t *testing.T) { + _, _, err = cli.Run("lib", "install", "Robot IR Remote") + require.NoError(t, err) + + // Run first compile + sketchPath, err := paths.New("testdata", "SketchUsingRobotIRRemote").Abs() + require.NoError(t, err) + _, _, err = cli.Run("compile", "-b", "arduino:avr:robotControl", "-v", sketchPath.String()) + require.NoError(t, err) + + // Run second compile and check that previous build is re-used + out, _, err := cli.Run("compile", "-b", "arduino:avr:robotControl", "-v", sketchPath.String()) + require.NoError(t, err) + check := regexp.MustCompile(`(?m)^Using previously compiled file:.*IRremoteTools\.cpp\.o$`) + require.True(t, check.Match(out)) + }) } func TestMergeSketchWithBootloader(t *testing.T) { @@ -1010,7 +1037,6 @@ func TestBuildOptionsFile(t *testing.T) { requirejson.Query(t, buildOptionsBytes, "keys", `[ "additionalFiles", - "builtInToolsFolders", "compiler.optimization_flags", "customBuildProperties", "fqbn", diff --git a/internal/integrationtest/compile_4/core_caching_test.go b/internal/integrationtest/compile_4/core_caching_test.go new file mode 100644 index 00000000000..9fcef13f2e8 --- /dev/null +++ b/internal/integrationtest/compile_4/core_caching_test.go @@ -0,0 +1,129 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "strings" + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestBuildCacheCoreWithExtraDirs(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + t.Cleanup(env.CleanUp) + + // Install Arduino AVR Boards + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + // Get default cache path + out, _, err := cli.Run("config", "get", "build_cache.path") + require.NoError(t, err) + defaultCache := paths.New(strings.TrimSpace(string(out))) + + // Main core cache + cache1, err := paths.MkTempDir("", "core_cache") + require.NoError(t, err) + t.Cleanup(func() { cache1.RemoveAll() }) + cache2, err := paths.MkTempDir("", "extra_core_cache") + require.NoError(t, err) + t.Cleanup(func() { cache2.RemoveAll() }) + + sketch, err := paths.New("testdata", "BareMinimum").Abs() + require.NoError(t, err) + + { + // Clean cache + require.NoError(t, defaultCache.RemoveAll()) + + // Compile sketch with empty cache + out, _, err := cli.Run("compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+defaultCache.String()) + + // Check that the core cache is re-used + out, _, err = cli.Run("compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+defaultCache.String()) + } + + { + env := cli.GetDefaultEnv() + env["ARDUINO_BUILD_CACHE_PATH"] = cache1.String() + + // Compile sketch with empty cache user-defined core cache + out, _, err := cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+cache1.String()) + + // Check that the core cache is re-used with user-defined core cache + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+cache1.String()) + + // Clean run should rebuild and save in user-defined core cache + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", "--clean", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+cache1.String()) + } + + { + env := cli.GetDefaultEnv() + env["ARDUINO_BUILD_CACHE_EXTRA_PATHS"] = cache1.String() + + // Both extra and default cache are full, should use the default one + out, _, err := cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+defaultCache.String()) + + // Clean run, should rebuild and save in default cache + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", "--clean", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+defaultCache.String()) + + // Clean default cache + require.NoError(t, defaultCache.RemoveAll()) + + // Now, extra is full and default is empty, should use extra + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+cache1.String()) + } + + { + env := cli.GetDefaultEnv() + env["ARDUINO_BUILD_CACHE_EXTRA_PATHS"] = cache1.String() // Populated + env["ARDUINO_BUILD_CACHE_PATH"] = cache2.String() // Empty + + // Extra cache is full, should use the cache1 (extra) + out, _, err := cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+cache1.String()) + + // Clean run, should rebuild and save in cache2 (user defined default cache) + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", "--clean", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Archiving built core (caching) in: "+cache2.String()) + + // Both caches are full, should use the cache2 (user defined default) + out, _, err = cli.RunWithCustomEnv(env, "compile", "-v", "-b", "arduino:avr:uno", sketch.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Using precompiled core: "+cache2.String()) + } +} diff --git a/internal/integrationtest/compile_4/dump_profile_test.go b/internal/integrationtest/compile_4/dump_profile_test.go new file mode 100644 index 00000000000..61b76a7788a --- /dev/null +++ b/internal/integrationtest/compile_4/dump_profile_test.go @@ -0,0 +1,71 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_test + +import ( + "strings" + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestDumpProfileClean(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + t.Cleanup(env.CleanUp) + + // Install Arduino AVR Boards + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + validSketchPath, err := paths.New("testdata", "ValidSketch").Abs() + require.NoError(t, err) + invalidSketchPath, err := paths.New("testdata", "InvalidSketch").Abs() + require.NoError(t, err) + + validProfile := `profiles: + uno: + fqbn: arduino:avr:uno + platforms: + - platform: arduino:avr (1.8.6)` + t.Run("NoVerbose", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "-b", "arduino:avr:uno", validSketchPath.String(), "--dump-profile") + require.NoError(t, err) + require.Empty(t, stderr) + profile := strings.TrimSpace(string(stdout)) + require.Equal(t, validProfile, profile) + }) + t.Run("Verbose", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "-b", "arduino:avr:uno", validSketchPath.String(), "--dump-profile", "--verbose") + require.NoError(t, err) + require.Empty(t, stderr) + profile := strings.TrimSpace(string(stdout)) + require.Equal(t, validProfile, profile) + }) + t.Run("ErrorNoVerbose", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "-b", "arduino:avr:uno", invalidSketchPath.String(), "--dump-profile") + require.Error(t, err) + require.NotEmpty(t, stderr) + require.NotContains(t, string(stdout), validProfile) + }) + t.Run("ErrorVerbose", func(t *testing.T) { + stdout, stderr, err := cli.Run("compile", "-b", "arduino:avr:uno", invalidSketchPath.String(), "--dump-profile", "--verbose") + require.Error(t, err) + require.NotEmpty(t, stderr) + require.NotContains(t, string(stdout), validProfile) + }) +} diff --git a/internal/integrationtest/compile_4/lib_caching_test.go b/internal/integrationtest/compile_4/lib_caching_test.go new file mode 100644 index 00000000000..1a497da7747 --- /dev/null +++ b/internal/integrationtest/compile_4/lib_caching_test.go @@ -0,0 +1,60 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestBuildCacheLibWithNonASCIIChars(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2671 + + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + t.Cleanup(env.CleanUp) + + tmpUserDir, err := paths.MkTempDir("", "Håkan") + require.NoError(t, err) + t.Cleanup(func() { tmpUserDir.RemoveAll() }) + customEnv := cli.GetDefaultEnv() + customEnv["ARDUINO_DIRECTORIES_USER"] = tmpUserDir.String() + + // Install Arduino AVR Boards and Servo lib + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + _, _, err = cli.RunWithCustomEnv(customEnv, "lib", "install", "Servo") + require.NoError(t, err) + + // Make a temp sketch + sketchDir := tmpUserDir.Join("ServoSketch") + sketchFile := sketchDir.Join("ServoSketch.ino") + require.NoError(t, sketchDir.Mkdir()) + require.NoError(t, sketchFile.WriteFile( + []byte("#include <Servo.h>\nvoid setup() {}\nvoid loop() {}\n"), + )) + + // Compile sketch + _, _, err = cli.RunWithCustomEnv(customEnv, "compile", "-b", "arduino:avr:uno", sketchFile.String()) + require.NoError(t, err) + + // Compile sketch again + out, _, err := cli.RunWithCustomEnv(customEnv, "compile", "-b", "arduino:avr:uno", "-v", sketchFile.String()) + require.NoError(t, err) + require.Contains(t, string(out), "Compiling library \"Servo\"\nUsing previously compiled file") +} diff --git a/internal/integrationtest/compile_4/testdata/BareMinimum/BareMinimum.ino b/internal/integrationtest/compile_4/testdata/BareMinimum/BareMinimum.ino new file mode 100644 index 00000000000..660bdbccfdb --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/BareMinimum/BareMinimum.ino @@ -0,0 +1,2 @@ +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/testdata/InvalidSketch/InvalidSketch.ino b/internal/integrationtest/compile_4/testdata/InvalidSketch/InvalidSketch.ino new file mode 100644 index 00000000000..2eba4fa09fd --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/InvalidSketch/InvalidSketch.ino @@ -0,0 +1,3 @@ +void setup() {} +void loop() {} +aaaaaa diff --git a/mysketchbook/newsketch/newsketch.ino b/internal/integrationtest/compile_4/testdata/SketchUsingRobotIRRemote/SketchUsingRobotIRRemote.ino similarity index 56% rename from mysketchbook/newsketch/newsketch.ino rename to internal/integrationtest/compile_4/testdata/SketchUsingRobotIRRemote/SketchUsingRobotIRRemote.ino index 74f966a4e2f..4eedf4e2675 100644 --- a/mysketchbook/newsketch/newsketch.ino +++ b/internal/integrationtest/compile_4/testdata/SketchUsingRobotIRRemote/SketchUsingRobotIRRemote.ino @@ -1,3 +1,4 @@ +#include <RobotIRremote.h> void setup() { } diff --git a/internal/integrationtest/compile_4/testdata/ValidSketch/ValidSketch.ino b/internal/integrationtest/compile_4/testdata/ValidSketch/ValidSketch.ino new file mode 100644 index 00000000000..660bdbccfdb --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketch/ValidSketch.ino @@ -0,0 +1,2 @@ +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/ValidSketchWithBrokenSketchFileSymlink.ino b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/ValidSketchWithBrokenSketchFileSymlink.ino new file mode 100644 index 00000000000..660bdbccfdb --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/ValidSketchWithBrokenSketchFileSymlink.ino @@ -0,0 +1,2 @@ +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/other_file.ino b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/other_file.ino new file mode 120000 index 00000000000..86a410dd1d3 --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSketchFileSymlink/other_file.ino @@ -0,0 +1 @@ +broken \ No newline at end of file diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/ValidSketchWithBrokenSymlink.ino b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/ValidSketchWithBrokenSymlink.ino new file mode 100644 index 00000000000..660bdbccfdb --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/ValidSketchWithBrokenSymlink.ino @@ -0,0 +1,2 @@ +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/other_file b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/other_file new file mode 120000 index 00000000000..86a410dd1d3 --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithBrokenSymlink/other_file @@ -0,0 +1 @@ +broken \ No newline at end of file diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/ValidSketchWithNonInoBrokenSketchFileSymlink.ino b/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/ValidSketchWithNonInoBrokenSketchFileSymlink.ino new file mode 100644 index 00000000000..660bdbccfdb --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/ValidSketchWithNonInoBrokenSketchFileSymlink.ino @@ -0,0 +1,2 @@ +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/other_file.c b/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/other_file.c new file mode 120000 index 00000000000..86a410dd1d3 --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/ValidSketchWithNonInoBrokenSketchFileSymlink/other_file.c @@ -0,0 +1 @@ +broken \ No newline at end of file diff --git a/internal/integrationtest/completion/completion_test.go b/internal/integrationtest/completion/completion_test.go index 75da997a357..678f2f0139e 100644 --- a/internal/integrationtest/completion/completion_test.go +++ b/internal/integrationtest/completion/completion_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" ) @@ -229,3 +230,30 @@ func TestCoreCompletion(t *testing.T) { stdout, _, _ = cli.Run("__complete", "upload", "-P", "") require.Contains(t, string(stdout), "atmel_ice") } + +func TestProfileCompletion(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Create test sketches + sketchWithProfilesPath, err := paths.New("testdata", "SketchWithProfiles").Abs() + require.NoError(t, err) + require.True(t, sketchWithProfilesPath.IsDir()) + + stdout, _, _ := cli.Run("__complete", "compile", sketchWithProfilesPath.String(), "--profile", "") + require.Contains(t, string(stdout), "profile1") + stdout, _, _ = cli.Run("__complete", "monitor", sketchWithProfilesPath.String(), "--profile", "") + require.Contains(t, string(stdout), "profile1") + stdout, _, _ = cli.Run("__complete", "upload", sketchWithProfilesPath.String(), "--profile", "") + require.Contains(t, string(stdout), "profile1") + + // The cli is running in the sketch folder, so need the explicitly specify the path in the cli + cli.SetWorkingDir(sketchWithProfilesPath) + stdout, _, _ = cli.Run("__complete", "compile", "--profile", "") + require.Contains(t, string(stdout), "profile1") + stdout, _, _ = cli.Run("__complete", "monitor", "--profile", "") + require.Contains(t, string(stdout), "profile1") + stdout, _, _ = cli.Run("__complete", "upload", "--profile", "") + require.Contains(t, string(stdout), "profile1") + +} diff --git a/internal/integrationtest/completion/testdata/SketchWithProfiles/SketchWithProfiles.ino b/internal/integrationtest/completion/testdata/SketchWithProfiles/SketchWithProfiles.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/completion/testdata/SketchWithProfiles/SketchWithProfiles.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/completion/testdata/SketchWithProfiles/sketch.yaml b/internal/integrationtest/completion/testdata/SketchWithProfiles/sketch.yaml new file mode 100644 index 00000000000..7143ea94b9a --- /dev/null +++ b/internal/integrationtest/completion/testdata/SketchWithProfiles/sketch.yaml @@ -0,0 +1,5 @@ +default_port: /dev/ttyDEF +default_fqbn: arduino:avr:yun +profiles: + profile1: + fqbn: "arduino:avr:uno" diff --git a/internal/integrationtest/config/config_test.go b/internal/integrationtest/config/config_test.go index e21d6db55dc..d7b4104a095 100644 --- a/internal/integrationtest/config/config_test.go +++ b/internal/integrationtest/config/config_test.go @@ -16,9 +16,12 @@ package config_test import ( + "path/filepath" + "strings" "testing" "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" "go.bug.st/testifyjson/requirejson" "gopkg.in/yaml.v3" @@ -48,15 +51,6 @@ func TestInitWithExistingCustomConfig(t *testing.T) { err = yaml.Unmarshal(configFile, config) require.NoError(t, err) require.Equal(t, config["board_manager"]["additional_urls"].([]interface{})[0].(string), "https://example.com") - require.Equal(t, config["daemon"]["port"].(string), "50051") - require.Equal(t, config["directories"]["data"].(string), cli.DataDir().String()) - require.Equal(t, config["directories"]["downloads"].(string), cli.DownloadDir().String()) - require.Equal(t, config["directories"]["user"].(string), cli.SketchbookDir().String()) - require.Empty(t, config["logging"]["file"]) - require.Equal(t, config["logging"]["format"].(string), "text") - require.Equal(t, config["logging"]["level"].(string), "info") - require.Equal(t, config["metrics"]["addr"].(string), ":9090") - require.True(t, config["metrics"]["enabled"].(bool)) configFilePath := cli.WorkingDir().Join("config", "test", "config.yaml") require.NoFileExists(t, configFilePath.String()) @@ -69,15 +63,6 @@ func TestInitWithExistingCustomConfig(t *testing.T) { err = yaml.Unmarshal(configFile, config) require.NoError(t, err) require.Empty(t, config["board_manager"]["additional_urls"]) - require.Equal(t, config["daemon"]["port"].(string), "50051") - require.Equal(t, config["directories"]["data"].(string), cli.DataDir().String()) - require.Equal(t, config["directories"]["downloads"].(string), cli.DownloadDir().String()) - require.Equal(t, config["directories"]["user"].(string), cli.SketchbookDir().String()) - require.Empty(t, config["logging"]["file"]) - require.Equal(t, config["logging"]["format"].(string), "text") - require.Equal(t, config["logging"]["level"].(string), "info") - require.Equal(t, config["metrics"]["addr"].(string), ":9090") - require.True(t, config["metrics"]["enabled"].(bool)) } func TestInitOverwriteExistingCustomFile(t *testing.T) { @@ -94,15 +79,6 @@ func TestInitOverwriteExistingCustomFile(t *testing.T) { err = yaml.Unmarshal(configFile, config) require.NoError(t, err) require.Equal(t, config["board_manager"]["additional_urls"].([]interface{})[0].(string), "https://example.com") - require.Equal(t, config["daemon"]["port"].(string), "50051") - require.Equal(t, config["directories"]["data"].(string), cli.DataDir().String()) - require.Equal(t, config["directories"]["downloads"].(string), cli.DownloadDir().String()) - require.Equal(t, config["directories"]["user"].(string), cli.SketchbookDir().String()) - require.Empty(t, config["logging"]["file"]) - require.Equal(t, config["logging"]["format"].(string), "text") - require.Equal(t, config["logging"]["level"].(string), "info") - require.Equal(t, config["metrics"]["addr"].(string), ":9090") - require.True(t, config["metrics"]["enabled"].(bool)) stdout, _, err = cli.Run("config", "init", "--overwrite") require.NoError(t, err) @@ -113,15 +89,6 @@ func TestInitOverwriteExistingCustomFile(t *testing.T) { err = yaml.Unmarshal(configFile, config) require.NoError(t, err) require.Empty(t, config["board_manager"]["additional_urls"]) - require.Equal(t, config["daemon"]["port"].(string), "50051") - require.Equal(t, config["directories"]["data"].(string), cli.DataDir().String()) - require.Equal(t, config["directories"]["downloads"].(string), cli.DownloadDir().String()) - require.Equal(t, config["directories"]["user"].(string), cli.SketchbookDir().String()) - require.Empty(t, config["logging"]["file"]) - require.Equal(t, config["logging"]["format"].(string), "text") - require.Equal(t, config["logging"]["level"].(string), "info") - require.Equal(t, config["metrics"]["addr"].(string), ":9090") - require.True(t, config["metrics"]["enabled"].(bool)) } func TestInitDestAbsolutePath(t *testing.T) { @@ -237,9 +204,9 @@ func TestDump(t *testing.T) { require.NoError(t, err) require.FileExists(t, configFile.String()) - stdout, _, err := cli.Run("config", "dump", "--config-file", configFile.String(), "--format", "json") + stdout, _, err := cli.Run("config", "dump", "--config-file", configFile.String(), "--json") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") stdout, _, err = cli.Run("config", "init", "--additional-urls", "https://example.com") require.NoError(t, err) @@ -247,9 +214,9 @@ func TestDump(t *testing.T) { require.Contains(t, string(stdout), configFile.String()) require.FileExists(t, configFile.String()) - stdout, _, err = cli.Run("config", "dump", "--format", "json") + stdout, _, err = cli.Run("config", "dump", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com\"]") } func TestDumpWithConfigFileFlag(t *testing.T) { @@ -263,9 +230,9 @@ func TestDumpWithConfigFileFlag(t *testing.T) { require.NoError(t, err) require.FileExists(t, configFile.String()) - stdout, _, err := cli.Run("config", "dump", "--config-file", configFile.String(), "--format", "json") + stdout, _, err := cli.Run("config", "dump", "--config-file", configFile.String(), "--json") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com\"]") stdout, _, err = cli.Run( "config", @@ -273,11 +240,10 @@ func TestDumpWithConfigFileFlag(t *testing.T) { "--config-file", configFile.String(), "--additional-urls=https://another-url.com", - "--format", - "json", + "--json", ) require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://another-url.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://another-url.com\"]") } func TestAddRemoveSetDeleteOnUnexistingKey(t *testing.T) { @@ -288,21 +254,37 @@ func TestAddRemoveSetDeleteOnUnexistingKey(t *testing.T) { _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) - _, stderr, err := cli.Run("config", "add", "some.key", "some_value", "--config-file", "arduino-cli.yaml") - require.Error(t, err) - require.Contains(t, string(stderr), "Settings key doesn't exist") + j, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, j, `{"config":{ "board_manager": {"additional_urls":[]} } }`) - _, stderr, err = cli.Run("config", "remove", "some.key", "some_value", "--config-file", "arduino-cli.yaml") - require.Error(t, err) - require.Contains(t, string(stderr), "Settings key doesn't exist") + // Delete array key + _, _, err = cli.Run("config", "delete", "board_manager.additional_urls", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + j, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.NotContains(t, j, `{"config":{ "board_manager": {"additional_urls":[]} } }`) - _, stderr, err = cli.Run("config", "set", "some.key", "some_value", "--config-file", "arduino-cli.yaml") - require.Error(t, err) - require.Contains(t, string(stderr), "Settings key doesn't exist") + // Add to non-existing array key + _, _, err = cli.Run("config", "add", "board_manager.additional_urls", "some_value", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + j, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, j, `{"config":{ "board_manager": {"additional_urls":["some_value"]} } }`) - _, stderr, err = cli.Run("config", "delete", "some.key", "--config-file", "arduino-cli.yaml") - require.Error(t, err) - require.Contains(t, string(stderr), "Cannot delete the key some.key: key not found in settings\n") + // Remove from non-existing array key + _, _, err = cli.Run("config", "remove", "board_manager.additional_urls", "some_value", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + j, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.NotContains(t, j, `{"config":{ "board_manager": {"additional_urls":["some_value"]} } }`) + + // Set on non-existing key + _, _, err = cli.Run("config", "set", "board_manager.additional_urls", "some_value", "other_value", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + j, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, j, `{"config":{ "board_manager": {"additional_urls":["some_value","other_value"]} } }`) } func TestAddSingleArgument(t *testing.T) { @@ -314,9 +296,9 @@ func TestAddSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies no additional urls are present - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Adds one URL url := "https://example.com" @@ -324,9 +306,9 @@ func TestAddSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies URL has been saved - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com\"]") // Adds the same URL (should not error) _, _, err = cli.Run("config", "add", @@ -335,9 +317,9 @@ func TestAddSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies a second copy has NOT been added - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com\"]") } func TestAddMultipleArguments(t *testing.T) { @@ -349,9 +331,9 @@ func TestAddMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies no additional urls are present - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Adds multiple URLs at the same time urls := [3]string{ @@ -364,16 +346,18 @@ func TestAddMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies URL has been saved - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) @@ -382,16 +366,18 @@ func TestAddMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies no change in result array - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) @@ -405,17 +391,19 @@ func TestAddMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies URL has been saved - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "3") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "3") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/a_third_package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/a_third_package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) } @@ -427,11 +415,13 @@ func TestAddOnUnsupportedKey(t *testing.T) { // Create a config file _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) + _, _, err = cli.Run("config", "set", "daemon.port", "50051", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) // Verifies default value - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".daemon | .port", "\"50051\"") + requirejson.Query(t, stdout, ".config | .daemon | .port", "\"50051\"") // Tries and fails to add a new item _, stderr, err := cli.Run("config", "add", "daemon.port", "50000", "--config-file", "arduino-cli.yaml") @@ -439,9 +429,9 @@ func TestAddOnUnsupportedKey(t *testing.T) { require.Contains(t, string(stderr), "The key 'daemon.port' is not a list of items, can't add to it.\nMaybe use 'config set'?") // Verifies value is not changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".daemon | .port", "\"50051\"") + requirejson.Query(t, stdout, ".config | .daemon | .port", "\"50051\"") } func TestRemoveSingleArgument(t *testing.T) { @@ -461,16 +451,18 @@ func TestRemoveSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) @@ -479,9 +471,9 @@ func TestRemoveSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies URLs has been removed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com/yet_another_package_example_index.json\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com/yet_another_package_example_index.json\"]") } func TestRemoveMultipleArguments(t *testing.T) { @@ -501,16 +493,18 @@ func TestRemoveMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/package_example_index.json", - "https://example.com/yet_another_package_example_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/package_example_index.json", + "https://example.com/yet_another_package_example_index.json" + ] + } } }`) @@ -519,9 +513,9 @@ func TestRemoveMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies all URLs have been removed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") } func TestRemoveOnUnsupportedKey(t *testing.T) { @@ -531,11 +525,13 @@ func TestRemoveOnUnsupportedKey(t *testing.T) { // Create a config file _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) + _, _, err = cli.Run("config", "set", "daemon.port", "50051", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) // Verifies default value - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".daemon | .port", "\"50051\"") + requirejson.Query(t, stdout, ".config | .daemon | .port", "\"50051\"") // Tries and fails to remove an item _, stderr, err := cli.Run("config", "remove", "daemon.port", "50051", "--config-file", "arduino-cli.yaml") @@ -543,9 +539,9 @@ func TestRemoveOnUnsupportedKey(t *testing.T) { require.Contains(t, string(stderr), "The key 'daemon.port' is not a list of items, can't remove from it.\nMaybe use 'config delete'?") // Verifies value is not changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".daemon | .port", "\"50051\"") + requirejson.Query(t, stdout, ".config | .daemon | .port", "\"50051\"") } func TestSetSliceWithSingleArgument(t *testing.T) { @@ -557,9 +553,9 @@ func TestSetSliceWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Set an URL in the list url := "https://example.com/package_example_index.json" @@ -567,9 +563,9 @@ func TestSetSliceWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com/package_example_index.json\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com/package_example_index.json\"]") // Set an URL in the list url = "https://example.com/yet_another_package_example_index.json" @@ -577,9 +573,9 @@ func TestSetSliceWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[\"https://example.com/yet_another_package_example_index.json\"]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[\"https://example.com/yet_another_package_example_index.json\"]") } func TestSetSliceWithMultipleArguments(t *testing.T) { @@ -591,9 +587,9 @@ func TestSetSliceWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Set some URLs in the list urls := [7]string{ @@ -604,16 +600,18 @@ func TestSetSliceWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/first_package_index.json", - "https://example.com/second_package_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/first_package_index.json", + "https://example.com/second_package_index.json" + ] + } } }`) @@ -626,16 +624,18 @@ func TestSetSliceWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies previous value is overwritten - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "2") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "2") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/third_package_index.json", - "https://example.com/fourth_package_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/third_package_index.json", + "https://example.com/fourth_package_index.json" + ] + } } }`) @@ -656,18 +656,20 @@ func TestSetSliceWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies all unique values exist in config - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls | length", "4") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls | length", "4") requirejson.Contains(t, stdout, ` { - "board_manager": { - "additional_urls": [ - "https://example.com/first_package_index.json", - "https://example.com/second_package_index.json", - "https://example.com/fifth_package_index.json", - "https://example.com/sixth_package_index.json" - ] + "config": { + "board_manager": { + "additional_urls": [ + "https://example.com/first_package_index.json", + "https://example.com/second_package_index.json", + "https://example.com/fifth_package_index.json", + "https://example.com/sixth_package_index.json" + ] + } } }`) } @@ -681,18 +683,18 @@ func TestSetStringWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".logging | .level", "\"info\"") + requirejson.NotContains(t, stdout, `{"config":{"logging":{"level"}}}`) // Changes value _, _, err = cli.Run("config", "set", "logging.level", "trace", "--config-file", "arduino-cli.yaml") require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".logging | .level", "\"trace\"") + requirejson.Query(t, stdout, ".config | .logging | .level", "\"trace\"") } func TestSetStringWithMultipleArguments(t *testing.T) { @@ -704,14 +706,14 @@ func TestSetStringWithMultipleArguments(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".logging | .level", "\"info\"") + requirejson.NotContains(t, stdout, `{"config":{"logging":{"level"}}}`) // Tries to change value _, stderr, err := cli.Run("config", "set", "logging.level", "trace", "debug") require.Error(t, err) - require.Contains(t, string(stderr), "Can't set multiple values in key logging.level") + require.Contains(t, string(stderr), "Error setting value: invalid type for key 'logging.level': invalid conversion, got array but want string") } func TestSetBoolWithSingleArgument(t *testing.T) { @@ -723,18 +725,18 @@ func TestSetBoolWithSingleArgument(t *testing.T) { require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".library | .enable_unsafe_install", "false") + requirejson.NotContains(t, stdout, `{"config": {"library": {"enable_unsafe_install"}}}`) // Changes value _, _, err = cli.Run("config", "set", "library.enable_unsafe_install", "true", "--config-file", "arduino-cli.yaml") require.NoError(t, err) // Verifies value is changed - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".library | .enable_unsafe_install", "true") + requirejson.Query(t, stdout, ".config | .library | .enable_unsafe_install", "true") } func TestSetBoolWithMultipleArguments(t *testing.T) { @@ -744,16 +746,18 @@ func TestSetBoolWithMultipleArguments(t *testing.T) { // Create a config file _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) + _, _, err = cli.Run("config", "set", "library.enable_unsafe_install", "false", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".library | .enable_unsafe_install", "false") + requirejson.Query(t, stdout, ".config | .library | .enable_unsafe_install", "false") // Changes value _, stderr, err := cli.Run("config", "set", "library.enable_unsafe_install", "true", "foo", "--config-file", "arduino-cli.yaml") require.Error(t, err) - require.Contains(t, string(stderr), "Can't set multiple values in key library.enable_unsafe_install") + require.Contains(t, string(stderr), "Error setting value: invalid type for key 'library.enable_unsafe_install': invalid conversion, got array but want bool") } func TestDelete(t *testing.T) { @@ -763,11 +767,13 @@ func TestDelete(t *testing.T) { // Create a config file _, _, err := cli.Run("config", "init", "--dest-dir", ".") require.NoError(t, err) + _, _, err = cli.Run("config", "set", "library.enable_unsafe_install", "false", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) // Verifies default state - stdout, _, err := cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".library | .enable_unsafe_install", "false") + requirejson.Query(t, stdout, ".config | .library | .enable_unsafe_install", "false") // Delete config key _, _, err = cli.Run("config", "delete", "library.enable_unsafe_install", "--config-file", "arduino-cli.yaml") @@ -782,9 +788,9 @@ func TestDelete(t *testing.T) { require.NotContains(t, configLines, "enable_unsafe_install") // Verifies default state - stdout, _, err = cli.Run("config", "dump", "--format", "json", "--config-file", "arduino-cli.yaml") + stdout, _, err = cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") require.NoError(t, err) - requirejson.Query(t, stdout, ".board_manager | .additional_urls", "[]") + requirejson.Query(t, stdout, ".config | .board_manager | .additional_urls", "[]") // Delete config key and sub keys _, _, err = cli.Run("config", "delete", "board_manager", "--config-file", "arduino-cli.yaml") @@ -799,3 +805,157 @@ func TestDelete(t *testing.T) { require.NotContains(t, configLines, "additional_urls") require.NotContains(t, configLines, "board_manager") } + +func TestGet(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Create a config file + _, _, err := cli.Run("config", "init", "--dest-dir", ".") + require.NoError(t, err) + _, _, err = cli.Run("config", "set", "daemon.port", "50051", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + + // Verifies default state + stdout, _, err := cli.Run("config", "dump", "--json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Query(t, stdout, ".config | .daemon | .port", `"50051"`) + + // Get simple key value + stdout, _, err = cli.Run("config", "get", "daemon.port", "--json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, stdout, `"50051"`) + + // Get structured key value + stdout, _, err = cli.Run("config", "get", "daemon", "--json", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + requirejson.Contains(t, stdout, `{"port":"50051"}`) + + // Get undefined key + _, stderr, err := cli.Run("config", "get", "foo", "--json", "--config-file", "arduino-cli.yaml") + require.Error(t, err) + requirejson.Contains(t, stderr, `{"error":"Cannot get the configuration key foo: key foo not found"}`) +} + +func TestInitializationOrderOfConfigThroughFlagAndEnv(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + tmp := t.TempDir() + cliConfig := paths.New(filepath.Join(tmp, "cli.yaml")) + cliConfig.WriteFile([]byte(`locale: "test"`)) + envConfig := paths.New(filepath.Join(tmp, "env.yaml")) + envConfig.WriteFile([]byte(`locale: "test2"`)) + + // No flag nor env specified. + stdout, _, err := cli.Run("config", "dump", "--json") + require.NoError(t, err) + requirejson.NotEmpty(t, stdout) + + // Flag specified + stdout, _, err = cli.Run("config", "dump", "--config-file", cliConfig.String(), "--json") + require.NoError(t, err) + requirejson.Contains(t, stdout, `{"config":{ "locale": "test" }}`) + + // Env specified + customEnv := map[string]string{"ARDUINO_CONFIG_FILE": envConfig.String()} + stdout, _, err = cli.RunWithCustomEnv(customEnv, "config", "dump", "--json") + require.NoError(t, err) + requirejson.Contains(t, stdout, `{"config":{ "locale": "test2" }}`) + + // Flag and env specified, flag takes precedence + stdout, _, err = cli.RunWithCustomEnv(customEnv, "config", "dump", "--config-file", cliConfig.String(), "--json") + require.NoError(t, err) + requirejson.Contains(t, stdout, `{"config":{ "locale": "test" }}`) +} + +func TestConfigLoadWithUnknownOrInvalidKeys(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + tmp := t.TempDir() + unkwnownConfig := paths.New(filepath.Join(tmp, "unknown.yaml")) + unkwnownConfig.WriteFile([]byte(` +unk: "test" +build.unk: 123 +`)) + t.Cleanup(func() { unkwnownConfig.Remove() }) + + // Run "config get" with a configuration containing an unknown key + out, _, err := cli.Run("config", "get", "daemon.port", "--config-file", unkwnownConfig.String()) + require.NoError(t, err) + require.Equal(t, `"50051"`, strings.TrimSpace(string(out))) + + // Run "config get" with a configuration containing an invalid value + invalidConfig := paths.New(filepath.Join(tmp, "invalid.yaml")) + invalidConfig.WriteFile([]byte(`daemon.port: 123`)) + t.Cleanup(func() { invalidConfig.Remove() }) + out, _, err = cli.Run("config", "get", "daemon.port", "--config-file", invalidConfig.String()) + require.NoError(t, err) + require.Equal(t, `"50051"`, strings.TrimSpace(string(out))) + + // Run "config get" with a configuration containing a null array + nullArrayConfig := paths.New(filepath.Join(tmp, "null_array.yaml")) + nullArrayConfig.WriteFile([]byte(`board_manager.additional_urls:`)) + t.Cleanup(func() { nullArrayConfig.Remove() }) + out, _, err = cli.Run("config", "get", "daemon.port", "--config-file", nullArrayConfig.String()) + require.NoError(t, err) + require.Equal(t, `"50051"`, strings.TrimSpace(string(out))) +} + +func TestConfigViaEnvVars(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // array of strings + out, _, err := cli.RunWithCustomEnv( + map[string]string{"ARDUINO_BOARD_MANAGER_ADDITIONAL_URLS": "https://espressif.github.io/arduino-esp32/package_esp32_index.json https://arduino.esp8266.com/stable/package_esp8266com_index.json"}, + "config", "get", "board_manager.additional_urls", + ) + require.NoError(t, err) + require.Equal(t, "- https://espressif.github.io/arduino-esp32/package_esp32_index.json\n- https://arduino.esp8266.com/stable/package_esp8266com_index.json\n\n", string(out)) + + // boolean + out, _, err = cli.RunWithCustomEnv( + map[string]string{"ARDUINO_LIBRARY_ENABLE_UNSAFE_INSTALL": "True"}, + "config", "get", "library.enable_unsafe_install", + ) + require.NoError(t, err) + require.Equal(t, "true\n\n", string(out)) + + // integer + out, _, err = cli.RunWithCustomEnv( + map[string]string{"ARDUINO_BUILD_CACHE_COMPILATIONS_BEFORE_PURGE": "20"}, + "config", "get", "build_cache.compilations_before_purge", + ) + require.NoError(t, err) + require.Equal(t, "20\n\n", string(out)) +} + +func TestI18N(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + out, _, err := cli.RunWithCustomEnv(map[string]string{"LC_ALL": "it"}) + require.NoError(t, err) + require.Contains(t, string(out), "Comandi disponibili") + + out, _, err = cli.RunWithCustomEnv(map[string]string{"LC_ALL": "en"}) + require.NoError(t, err) + require.Contains(t, string(out), "Available Commands") +} + +func TestCoreUpdateWithInvalidIndexURL(t *testing.T) { + // https://github.com/arduino/arduino-cli/issues/2786 + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + t.Cleanup(env.CleanUp) + + _, _, err := cli.Run("config", "init") + require.NoError(t, err) + _, _, err = cli.Run("config", "set", "board_manager.additional_urls", "foo=https://espressif.github.io/arduino-esp32/package_esp32_index.json") + require.NoError(t, err) + _, stdErr, err := cli.Run("core", "update-index") + require.Error(t, err) + require.Contains(t, string(stdErr), `Error initializing instance: Some indexes could not be updated.`) + require.Contains(t, string(stdErr), `Invalid additional URL: parse "foo=https://espressif.github.io/arduino-esp32/package_esp32_index.json"`) +} diff --git a/internal/integrationtest/core/core_test.go b/internal/integrationtest/core/core_test.go index 89e8ecc2a87..a27b5f6d15a 100644 --- a/internal/integrationtest/core/core_test.go +++ b/internal/integrationtest/core/core_test.go @@ -16,10 +16,10 @@ package core_test import ( - "crypto/md5" - "encoding/hex" + "encoding/json" "fmt" "os" + "path/filepath" "runtime" "sort" "strconv" @@ -46,9 +46,21 @@ func TestCorrectHandlingOfPlatformVersionProperty(t *testing.T) { require.NoError(t, testPlatform.CopyDirTo(cli.SketchbookDir().Join("hardware", "DxCore-dev"))) // Trigger problematic call - out, _, err := cli.Run("core", "list", "--format", "json") - require.NoError(t, err) - requirejson.Contains(t, out, `[{"id":"DxCore-dev:megaavr","installed":"1.4.10","name":"DxCore"}]`) + out, _, err := cli.Run("core", "list", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ + "platforms": [ + { + "id":"DxCore-dev:megaavr", + "installed_version":"1.4.10", + "releases": { + "1.4.10": { + "name":"DxCore" + } + } + } + ] + }`) } func TestCoreSearch(t *testing.T) { @@ -70,58 +82,58 @@ func TestCoreSearch(t *testing.T) { _, _, err = cli.Run("core", "install", "arduino:avr@1.8.6") require.NoError(t, err) - out, _, err = cli.Run("core", "search", "avr", "--format", "json") + out, _, err = cli.Run("core", "search", "avr", "--json") require.NoError(t, err) requirejson.NotEmpty(t, out) - // Verify that "installed" is set - requirejson.Contains(t, out, `[{installed: "1.8.6"}]`) + // Verify that "installed_version" is set + requirejson.Contains(t, out, `{"platforms":[{installed_version: "1.8.6"}]}`) // additional URL - out, _, err = cli.Run("core", "search", "test_core", "--format", "json", "--additional-urls="+url.String()) + out, _, err = cli.Run("core", "search", "test_core", "--json", "--additional-urls="+url.String()) require.NoError(t, err) - requirejson.Len(t, out, 1) + requirejson.Query(t, out, `.platforms | length`, `1`) // show all versions - out, _, err = cli.Run("core", "search", "test_core", "--all", "--format", "json", "--additional-urls="+url.String()) + out, _, err = cli.Run("core", "search", "test_core", "--all", "--json", "--additional-urls="+url.String()) require.NoError(t, err) - requirejson.Len(t, out, 3) + requirejson.Query(t, out, `.platforms.[].releases | length`, "3") checkPlatformIsInJSONOutput := func(stdout []byte, id, version string) { - jqquery := fmt.Sprintf(`[{id:"%s", latest:"%s"}]`, id, version) - requirejson.Contains(t, out, jqquery, "platform %s@%s is missing from the output", id, version) + jqquery := fmt.Sprintf(`{"platforms":[{id:"%s", releases:{"%s":{}}}]}`, id, version) + requirejson.Contains(t, stdout, jqquery, "platform %s@%s is missing from the output", id, version) } // Search all Retrokit platforms - out, _, err = cli.Run("core", "search", "retrokit", "--all", "--additional-urls="+url.String(), "--format", "json") + out, _, err = cli.Run("core", "search", "retrokit", "--all", "--additional-urls="+url.String(), "--json") require.NoError(t, err) checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.5") checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.6") // Search using Retrokit Package Maintainer - out, _, err = cli.Run("core", "search", "Retrokits-RK002", "--all", "--additional-urls="+url.String(), "--format", "json") + out, _, err = cli.Run("core", "search", "Retrokits-RK002", "--all", "--additional-urls="+url.String(), "--json") require.NoError(t, err) checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.5") checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.6") // Search using the Retrokit Platform name - out, _, err = cli.Run("core", "search", "rk002", "--all", "--additional-urls="+url.String(), "--format", "json") + out, _, err = cli.Run("core", "search", "rk002", "--all", "--additional-urls="+url.String(), "--json") require.NoError(t, err) checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.5") checkPlatformIsInJSONOutput(out, "Retrokits-RK002:arm", "1.0.6") // Search using board names - out, _, err = cli.Run("core", "search", "myboard", "--all", "--additional-urls="+url.String(), "--format", "json") + out, _, err = cli.Run("core", "search", "myboard", "--all", "--additional-urls="+url.String(), "--json") require.NoError(t, err) checkPlatformIsInJSONOutput(out, "Package:x86", "1.2.3") runSearch := func(searchArgs string, expectedIDs ...string) { - args := []string{"core", "search", "--format", "json"} + args := []string{"core", "search", "--json"} args = append(args, strings.Split(searchArgs, " ")...) out, _, err := cli.Run(args...) require.NoError(t, err) for _, id := range expectedIDs { - jqquery := fmt.Sprintf(`[{id:"%s"}]`, id) + jqquery := fmt.Sprintf(`{"platforms":[{id:"%s"}]}`, id) requirejson.Contains(t, out, jqquery, "platform %s is missing from the output", id) } } @@ -168,11 +180,11 @@ func TestCoreSearchNoArgs(t *testing.T) { require.Contains(t, lines, []string{"test:x86", "2.0.0", "test_core"}) numPlatforms := len(lines) - 1 - // same thing in JSON format, also check the number of platforms found is the same - stdout, _, err = cli.Run("core", "search", "--format", "json") + // Same thing in JSON format, also check the number of platforms found is the same + stdout, _, err = cli.Run("core", "search", "--json") require.NoError(t, err) - requirejson.Contains(t, stdout, `[ { "name":"test_core" } ]`) - requirejson.Query(t, stdout, "length", fmt.Sprint(numPlatforms)) + requirejson.Contains(t, stdout, `{"platforms":[{"id": "test:x86", "releases": { "2.0.0": {"name":"test_core"}}}]}`) + requirejson.Query(t, stdout, ".platforms | length", fmt.Sprint(numPlatforms)) // list all with additional urls, check the test core is there stdout, _, err = cli.Run("core", "search", "--additional-urls="+url.String()) @@ -181,15 +193,28 @@ func TestCoreSearchNoArgs(t *testing.T) { for _, v := range strings.Split(strings.TrimSpace(string(stdout)), "\n") { lines = append(lines, strings.Fields(strings.TrimSpace(v))) } - // Check the presence of test:x86@3.0.0 - require.Contains(t, lines, []string{"test:x86", "3.0.0", "test_core"}) + // Check the absence of test:x86@3.0.0 because it contains incompatible deps. The latest available should be the 2.0.0 + require.NotContains(t, lines, []string{"test:x86", "3.0.0", "test_core"}) + require.Contains(t, lines, []string{"test:x86", "2.0.0", "test_core"}) numPlatforms = len(lines) - 1 // same thing in JSON format, also check the number of platforms found is the same - stdout, _, err = cli.Run("core", "search", "--format", "json", "--additional-urls="+url.String()) - require.NoError(t, err) - requirejson.Contains(t, stdout, `[ { "name":"test_core" } ]`) - requirejson.Query(t, stdout, "length", fmt.Sprint(numPlatforms)) + stdout, _, err = cli.Run("core", "search", "--json", "--additional-urls="+url.String()) + require.NoError(t, err) + requirejson.Contains(t, stdout, `{ + "platforms": [ + { + "id": "test:x86", + "installed_version": "2.0.0", + "latest_version": "2.0.0", + "releases": { + "1.0.0": {"name":"test_core", "compatible": true}, + "2.0.0": {"name":"test_core", "compatible": true}, + "3.0.0": {"name":"test_core", "compatible": false} + } + } + ]}`) + requirejson.Query(t, stdout, `.platforms | length`, fmt.Sprint(numPlatforms)) } func TestCoreUpdateIndexUrlNotFound(t *testing.T) { @@ -250,13 +275,17 @@ func TestCoreInstallEsp32(t *testing.T) { sketchPath := cli.SketchbookDir().Join(sketchName) _, _, err = cli.Run("sketch", "new", sketchPath.String()) require.NoError(t, err) - _, _, err = cli.Run("compile", "-b", "esp32:esp32:esp32", sketchPath.String()) + out, _, err := cli.Run("compile", "-b", "esp32:esp32:esp32", sketchPath.String(), "--json") require.NoError(t, err) + var builderOutput struct { + BuilderResult struct { + BuildPath string `json:"build_path"` + } `json:"builder_result"` + } + require.NoError(t, json.Unmarshal(out, &builderOutput)) + buildDir := paths.New(builderOutput.BuilderResult.BuildPath) + // prevent regressions for https://github.com/arduino/arduino-cli/issues/163 - md5 := md5.Sum(([]byte(sketchPath.String()))) - sketchPathMd5 := strings.ToUpper(hex.EncodeToString(md5[:])) - require.NotEmpty(t, sketchPathMd5) - buildDir := paths.TempDir().Join("arduino", "sketches", sketchPathMd5) require.FileExists(t, buildDir.Join(sketchName+".ino.partitions.bin").String()) } @@ -301,9 +330,9 @@ func TestCoreInstall(t *testing.T) { // Install a specific core version _, _, err = cli.Run("core", "install", "arduino:avr@1.6.16") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `.[] | select(.id == "arduino:avr") | .installed`, `"1.6.16"`) + requirejson.Query(t, stdout, `.platforms.[] | select(.id == "arduino:avr") | .installed_version`, `"1.6.16"`) // Replace it with the same with --no-overwrite (should NOT fail) _, _, err = cli.Run("core", "install", "arduino:avr@1.6.16", "--no-overwrite") @@ -316,29 +345,29 @@ func TestCoreInstall(t *testing.T) { // Replace it with a more recent one without --no-overwrite (should succeed) _, _, err = cli.Run("core", "install", "arduino:avr@1.6.17") require.NoError(t, err) - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `.[] | select(.id == "arduino:avr") | .installed`, `"1.6.17"`) + requirejson.Query(t, stdout, `.platforms.[] | select(.id == "arduino:avr") | .installed_version`, `"1.6.17"`) // Confirm core is listed as "updatable" - stdout, _, err = cli.Run("core", "list", "--updatable", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--updatable", "--json") require.NoError(t, err) jsonout := requirejson.Parse(t, stdout) - q := jsonout.Query(`.[] | select(.id == "arduino:avr")`) - q.Query(".installed").MustEqual(`"1.6.17"`) - latest := q.Query(".latest") + q := jsonout.Query(`.platforms.[] | select(.id == "arduino:avr")`) + q.Query(".installed_version").MustEqual(`"1.6.17"`) + latest := q.Query(".latest_version") // Upgrade the core to latest version _, _, err = cli.Run("core", "upgrade", "arduino:avr") require.NoError(t, err) - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `.[] | select(.id == "arduino:avr") | .installed`, latest.String()) + requirejson.Query(t, stdout, `.platforms.[] | select(.id == "arduino:avr") | .installed_version`, latest.String()) // double check the core isn't updatable anymore - stdout, _, err = cli.Run("core", "list", "--updatable", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--updatable", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.platforms | length`, `0`) } func TestCoreUninstall(t *testing.T) { @@ -349,14 +378,14 @@ func TestCoreUninstall(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("core", "install", "arduino:avr") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Contains(t, stdout, `[ { "id": "arduino:avr" } ]`) + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "arduino:avr" } ]}`) _, _, err = cli.Run("core", "uninstall", "arduino:avr") require.NoError(t, err) - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.platforms | length`, `0`) } func TestCoreUninstallToolDependencyRemoval(t *testing.T) { @@ -419,9 +448,9 @@ func TestCoreUpdateWithLocalUrl(t *testing.T) { testIndex = "/" + strings.ReplaceAll(testIndex, "\\", "/") } - stdout, _, err := cli.Run("core", "update-index", "--additional-urls=file://"+testIndex) + stdout, _, err := cli.Run("core", "update-index", "--additional-urls=file://"+testIndex, "--json") require.NoError(t, err) - require.Contains(t, string(stdout), "Downloading index: test_index.json downloaded") + requirejson.Parse(t, stdout).MustContain(`{"updated_indexes":[{"index_url":"file://` + testIndex + `","status":"skipped"}]}`) } func TestCoreSearchManuallyInstalledCoresNotPrinted(t *testing.T) { @@ -432,9 +461,9 @@ func TestCoreSearchManuallyInstalledCoresNotPrinted(t *testing.T) { require.NoError(t, err) // Verifies only cores in board manager are shown - stdout, _, err := cli.Run("core", "search", "--format", "json") + stdout, _, err := cli.Run("core", "search", "--json") require.NoError(t, err) - requirejson.NotEmpty(t, stdout) + requirejson.Query(t, stdout, `.platforms | length > 0`, `true`) oldJson := stdout // Manually installs a core in sketchbooks hardware folder @@ -447,9 +476,9 @@ func TestCoreSearchManuallyInstalledCoresNotPrinted(t *testing.T) { require.NoError(t, err) // Verifies manually installed core is not shown - stdout, _, err = cli.Run("core", "search", "--format", "json") + stdout, _, err = cli.Run("core", "search", "--json") require.NoError(t, err) - requirejson.NotContains(t, stdout, `[{"id": "arduino-beta-development:avr"}]`) + requirejson.NotContains(t, stdout, `{"platforms":[{"id": "arduino-beta-development:avr"}]}`) require.Equal(t, oldJson, stdout) } @@ -461,10 +490,10 @@ func TestCoreListAllManuallyInstalledCore(t *testing.T) { require.NoError(t, err) // Verifies only cores in board manager are shown - stdout, _, err := cli.Run("core", "list", "--all", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--all", "--json") require.NoError(t, err) - requirejson.NotEmpty(t, stdout) - length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query("length").String()) + requirejson.Query(t, stdout, `.platforms | length > 0`, `true`) + length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query(".platforms | length").String()) require.NoError(t, err) // Manually installs a core in sketchbooks hardware folder @@ -477,16 +506,74 @@ func TestCoreListAllManuallyInstalledCore(t *testing.T) { require.NoError(t, err) // Verifies manually installed core is shown - stdout, _, err = cli.Run("core", "list", "--all", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--all", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, length+1) - requirejson.Contains(t, stdout, `[ + requirejson.Query(t, stdout, `.platforms | length`, fmt.Sprint(length+1)) + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "arduino-beta-development:avr", - "latest": "1.8.3", - "name": "Arduino AVR Boards" + "latest_version": "1.8.3", + "releases": { + "1.8.3": { + "name": "Arduino AVR Boards" + } } - ]`) + } + ]}`) +} + +func TestCoreListShowsLatestVersionWhenMultipleReleasesOfAManuallyInstalledCoreArePresent(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Verifies only cores in board manager are shown + stdout, _, err := cli.Run("core", "list", "--all", "--json") + require.NoError(t, err) + requirejson.Query(t, stdout, `.platforms | length > 0`, `true`) + length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query(".platforms | length").String()) + require.NoError(t, err) + + // Manually installs a core in sketchbooks hardware folder + gitUrl := "https://github.com/arduino/ArduinoCore-avr.git" + repoDir := cli.SketchbookDir().Join("hardware", "arduino-beta-development", "avr") + _, err = git.PlainClone(filepath.Join(repoDir.String(), "1.8.3"), false, &git.CloneOptions{ + URL: gitUrl, + ReferenceName: plumbing.NewTagReferenceName("1.8.3"), + }) + require.NoError(t, err) + + tmp := paths.New(t.TempDir(), "1.8.4") + _, err = git.PlainClone(tmp.String(), false, &git.CloneOptions{ + URL: gitUrl, + ReferenceName: plumbing.NewTagReferenceName("1.8.4"), + }) + require.NoError(t, err) + + err = tmp.Rename(repoDir.Join("1.8.4")) + require.NoError(t, err) + + // When manually installing 2 releases of the same core, the newest one takes precedence + stdout, _, err = cli.Run("core", "list", "--all", "--json") + require.NoError(t, err) + requirejson.Query(t, stdout, `.platforms | length`, fmt.Sprint(length+1)) + requirejson.Contains(t, stdout, `{"platforms":[ + { + "id": "arduino-beta-development:avr", + "latest_version": "1.8.4", + "installed_version": "1.8.4", + "releases": { + "1.8.3": { + "name": "Arduino AVR Boards" + }, + "1.8.3": { + "name": "Arduino AVR Boards" + } + } + } + ]}`) } func TestCoreListUpdatableAllFlags(t *testing.T) { @@ -497,10 +584,10 @@ func TestCoreListUpdatableAllFlags(t *testing.T) { require.NoError(t, err) // Verifies only cores in board manager are shown - stdout, _, err := cli.Run("core", "list", "--all", "--updatable", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--all", "--updatable", "--json") require.NoError(t, err) - requirejson.NotEmpty(t, stdout) - length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query("length").String()) + requirejson.Query(t, stdout, `.platforms | length > 0`, `true`) + length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query(".platforms | length").String()) require.NoError(t, err) // Manually installs a core in sketchbooks hardware folder @@ -513,16 +600,20 @@ func TestCoreListUpdatableAllFlags(t *testing.T) { require.NoError(t, err) // Verifies using both --updatable and --all flags --all takes precedence - stdout, _, err = cli.Run("core", "list", "--all", "--updatable", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--all", "--updatable", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, length+1) - requirejson.Contains(t, stdout, `[ + requirejson.Query(t, stdout, `.platforms | length`, fmt.Sprint(length+1)) + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "arduino-beta-development:avr", - "latest": "1.8.3", - "name": "Arduino AVR Boards" + "latest_version": "1.8.3", + "releases": { + "1.8.3": { + "name": "Arduino AVR Boards" + } } - ]`) + } + ]}`) } func TestCoreUpgradeRemovesUnusedTools(t *testing.T) { @@ -586,15 +677,19 @@ func TestCoreListWithInstalledJson(t *testing.T) { require.NoError(t, err) // Verifies installed core is correctly found and name is set - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Contains(t, stdout, `[ + requirejson.Query(t, stdout, `.platforms | length`, `1`) + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "adafruit:avr", - "name": "Adafruit AVR Boards" + "releases": { + "1.4.13": { + "name": "Adafruit AVR Boards" + } + } } - ]`) + ]}`) // Deletes installed.json file, this file stores information about the core, // that is used mostly when removing package indexes and their cores are still installed; @@ -605,18 +700,22 @@ func TestCoreListWithInstalledJson(t *testing.T) { require.NoError(t, installedJson.Remove()) // Verifies installed core is still found and name is set - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.platforms | length`, `1`) // Name for this core changes since if there's installed.json file we read it from // platform.txt, turns out that this core has different names used in different files // thus the change. - requirejson.Contains(t, stdout, `[ + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "adafruit:avr", - "name": "Adafruit Boards" + "releases": { + "1.4.13": { + "name": "Adafruit Boards" + } + } } - ]`) + ]}`) } func TestCoreSearchUpdateIndexDelay(t *testing.T) { @@ -677,42 +776,42 @@ func TestCoreSearchSortedResults(t *testing.T) { for _, v := range lines { if strings.HasPrefix(v[2], "[DEPRECATED]") { deprecated = append(deprecated, v) - } else { - notDeprecated = append(notDeprecated, v) + continue } + notDeprecated = append(notDeprecated, v) } // verify that results are already sorted correctly require.True(t, sort.SliceIsSorted(deprecated, func(i, j int) bool { - return strings.ToLower(deprecated[i][2]) < strings.ToLower(deprecated[j][2]) + return strings.ToLower(deprecated[i][0]) < strings.ToLower(deprecated[j][0]) })) require.True(t, sort.SliceIsSorted(notDeprecated, func(i, j int) bool { - return strings.ToLower(notDeprecated[i][2]) < strings.ToLower(notDeprecated[j][2]) + return strings.ToLower(notDeprecated[i][0]) < strings.ToLower(notDeprecated[j][0]) })) // verify that deprecated platforms are the last ones require.Equal(t, lines, append(notDeprecated, deprecated...)) // test same behaviour with json output - stdout, _, err = cli.Run("core", "search", "--additional-urls="+url.String(), "--format=json") + stdout, _, err = cli.Run("core", "search", "--additional-urls="+url.String(), "--json") require.NoError(t, err) // verify that results are already sorted correctly sortedDeprecated := requirejson.Parse(t, stdout).Query( - "[ .[] | select(.deprecated == true) | .name |=ascii_downcase | .name ] | sort").String() + "[ .platforms.[] | select(.deprecated == true) | .id |=ascii_downcase | .id] | sort").String() notSortedDeprecated := requirejson.Parse(t, stdout).Query( - "[.[] | select(.deprecated == true) | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | select(.deprecated == true) | .id |=ascii_downcase | .id]").String() require.Equal(t, sortedDeprecated, notSortedDeprecated) sortedNotDeprecated := requirejson.Parse(t, stdout).Query( - "[ .[] | select(.deprecated != true) | .name |=ascii_downcase | .name ] | sort").String() + "[ .platforms.[] | select(.deprecated != true) | .id |=ascii_downcase | .id] | sort").String() notSortedNotDeprecated := requirejson.Parse(t, stdout).Query( - "[.[] | select(.deprecated != true) | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | select(.deprecated != true) | .id |=ascii_downcase | .id]").String() require.Equal(t, sortedNotDeprecated, notSortedNotDeprecated) // verify that deprecated platforms are the last ones platform := requirejson.Parse(t, stdout).Query( - "[.[] | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | .id |=ascii_downcase | .id]").String() require.Equal(t, platform, strings.TrimRight(notSortedNotDeprecated, "]")+","+strings.TrimLeft(notSortedDeprecated, "[")) } @@ -755,36 +854,35 @@ func TestCoreListSortedResults(t *testing.T) { // verify that results are already sorted correctly require.True(t, sort.SliceIsSorted(deprecated, func(i, j int) bool { - return strings.ToLower(deprecated[i][3]) < strings.ToLower(deprecated[j][3]) + return strings.ToLower(deprecated[i][0]) < strings.ToLower(deprecated[j][0]) })) require.True(t, sort.SliceIsSorted(notDeprecated, func(i, j int) bool { - return strings.ToLower(notDeprecated[i][3]) < strings.ToLower(notDeprecated[j][3]) + return strings.ToLower(notDeprecated[i][0]) < strings.ToLower(notDeprecated[j][0]) })) // verify that deprecated platforms are the last ones require.Equal(t, lines, append(notDeprecated, deprecated...)) // test same behaviour with json output - stdout, _, err = cli.Run("core", "list", "--additional-urls="+url.String(), "--format=json") + stdout, _, err = cli.Run("core", "list", "--additional-urls="+url.String(), "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 3) + requirejson.Query(t, stdout, `.platforms | length`, `3`) // verify that results are already sorted correctly sortedDeprecated := requirejson.Parse(t, stdout).Query( - "[ .[] | select(.deprecated == true) | .name |=ascii_downcase | .name ] | sort").String() + "[ .platforms.[] | select(.deprecated == true) | .id |=ascii_downcase | .id] | sort").String() notSortedDeprecated := requirejson.Parse(t, stdout).Query( - "[.[] | select(.deprecated == true) | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | select(.deprecated == true) | .id |=ascii_downcase | .id]").String() require.Equal(t, sortedDeprecated, notSortedDeprecated) sortedNotDeprecated := requirejson.Parse(t, stdout).Query( - "[ .[] | select(.deprecated != true) | .name |=ascii_downcase | .name ] | sort").String() + "[ .platforms.[] | select(.deprecated != true) | .id |=ascii_downcase | .id] | sort").String() notSortedNotDeprecated := requirejson.Parse(t, stdout).Query( - "[.[] | select(.deprecated != true) | .name |=ascii_downcase | .name]").String() + "[ .platforms.[] | select(.deprecated != true) | .id |=ascii_downcase | .id]").String() require.Equal(t, sortedNotDeprecated, notSortedNotDeprecated) // verify that deprecated platforms are the last ones - platform := requirejson.Parse(t, stdout).Query( - "[.[] | .name |=ascii_downcase | .name]").String() + platform := requirejson.Parse(t, stdout).Query("[ .platforms.[] | .id |=ascii_downcase | .id]").String() require.Equal(t, platform, strings.TrimRight(notSortedNotDeprecated, "]")+","+strings.TrimLeft(notSortedDeprecated, "[")) } @@ -813,11 +911,11 @@ func TestCoreListDeprecatedPlatformWithInstalledJson(t *testing.T) { require.NoError(t, installedJsonFile.WriteFile([]byte(updatedInstalledJsonData))) // test same behaviour with json output - stdout, _, err := cli.Run("core", "list", "--additional-urls="+url.String(), "--format=json") + stdout, _, err := cli.Run("core", "list", "--additional-urls="+url.String(), "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[] | .deprecated", "true") + requirejson.Query(t, stdout, `.platforms | length`, `1`) + requirejson.Query(t, stdout, ".platforms.[] | .deprecated", "true") } func TestCoreListPlatformWithoutPlatformTxt(t *testing.T) { @@ -827,9 +925,9 @@ func TestCoreListPlatformWithoutPlatformTxt(t *testing.T) { _, _, err := cli.Run("update") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 0) + requirejson.Query(t, stdout, `.platforms | length`, `0`) // Simulates creation of a new core in the sketchbook hardware folder // without a platforms.txt @@ -839,11 +937,11 @@ func TestCoreListPlatformWithoutPlatformTxt(t *testing.T) { require.NoError(t, testBoardsTxt.CopyTo(boardsTxt)) // Verifies no core is installed - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[] | .id", "\"some-packager:some-arch\"") - requirejson.Query(t, stdout, ".[] | .name", "\"some-packager-some-arch\"") + requirejson.Query(t, stdout, `.platforms | length`, `1`) + requirejson.Query(t, stdout, ".platforms.[] | .id", `"some-packager:some-arch"`) + requirejson.Query(t, stdout, ".platforms.[] | .releases[.installed_version].name", `"some-packager-some-arch"`) } func TestCoreDownloadMultiplePlatforms(t *testing.T) { @@ -859,9 +957,9 @@ func TestCoreDownloadMultiplePlatforms(t *testing.T) { require.NoError(t, err) // Verifies no core is installed - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 0) + requirejson.Query(t, stdout, `.platforms | length`, `0`) // Simulates creation of two new cores in the sketchbook hardware folder wd, _ := paths.Getwd() @@ -875,9 +973,9 @@ func TestCoreDownloadMultiplePlatforms(t *testing.T) { require.NoError(t, testBoardsTxt.CopyTo(boardsTxt1)) // Verifies the two cores are detected - stdout, _, err = cli.Run("core", "list", "--format", "json") + stdout, _, err = cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 2) + requirejson.Query(t, stdout, `.platforms | length`, `2`) // Try to do an operation on the fake cores. // The cli should not allow it since optimizing the casing results in finding two cores @@ -899,31 +997,31 @@ func TestCoreWithMissingCustomBoardOptionsIsLoaded(t *testing.T) { _, _, err := cli.Run("update") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.platforms | length`, `1`) // Verifies platform is loaded except excluding board with missing options - requirejson.Contains(t, stdout, `[ - { - "id": "arduino-beta-dev:platform_with_missing_custom_board_options" - } - ]`) - requirejson.Query(t, stdout, ".[] | select(.id == \"arduino-beta-dev:platform_with_missing_custom_board_options\") | .boards | length", "2") + requirejson.Contains(t, stdout, `{"platforms":[{"id": "arduino-beta-dev:platform_with_missing_custom_board_options"}]}`) + requirejson.Query(t, stdout, ".platforms.[] | select(.id == \"arduino-beta-dev:platform_with_missing_custom_board_options\") | .releases[.installed_version].boards | length", "2") // Verify board with malformed options is not loaded // while other board is loaded - requirejson.Contains(t, stdout, `[ + requirejson.Contains(t, stdout, `{"platforms":[ { "id": "arduino-beta-dev:platform_with_missing_custom_board_options", - "boards": [ - { - "fqbn": "arduino-beta-dev:platform_with_missing_custom_board_options:nessuno" - }, - { - "fqbn": "arduino-beta-dev:platform_with_missing_custom_board_options:altra" + "releases": { + "4.2.0": { + "boards": [ + { + "fqbn": "arduino-beta-dev:platform_with_missing_custom_board_options:nessuno" + }, + { + "fqbn": "arduino-beta-dev:platform_with_missing_custom_board_options:altra" + } + ] } - ] + } } - ]`) + ]}`) } func TestCoreListOutdatedCore(t *testing.T) { @@ -937,13 +1035,13 @@ func TestCoreListOutdatedCore(t *testing.T) { _, _, err = cli.Run("core", "install", "arduino:samd@1.8.6") require.NoError(t, err) - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .installed", "\"1.8.6\"") - installedVersion, err := semver.Parse(strings.Trim(requirejson.Parse(t, stdout).Query(".[0] | .installed").String(), "\"")) + requirejson.Query(t, stdout, `.platforms | length`, `1`) + requirejson.Query(t, stdout, ".platforms.[0] | .installed_version", "\"1.8.6\"") + installedVersion, err := semver.Parse(strings.Trim(requirejson.Parse(t, stdout).Query(".platforms.[0] | .installed_version").String(), "\"")) require.NoError(t, err) - latestVersion, err := semver.Parse(strings.Trim(requirejson.Parse(t, stdout).Query(".[0] | .latest").String(), "\"")) + latestVersion, err := semver.Parse(strings.Trim(requirejson.Parse(t, stdout).Query(".platforms.[0] | .latest_version").String(), "\"")) require.NoError(t, err) // Installed version must be older than latest require.True(t, installedVersion.LessThan(latestVersion)) @@ -956,7 +1054,7 @@ func TestCoreLoadingPackageManager(t *testing.T) { // Create empty architecture folder (this condition is normally produced by `core uninstall`) require.NoError(t, cli.DataDir().Join("packages", "foovendor", "hardware", "fooarch").MkdirAll()) - _, _, err := cli.Run("core", "list", "--all", "--format", "json") + _, _, err := cli.Run("core", "list", "--all", "--json") require.NoError(t, err) // this should not make the cli crash } @@ -1057,7 +1155,7 @@ func TestCoreUpgradeWarningWithPackageInstalledButNotIndexed(t *testing.T) { _, _, err = cli.Run("core", "install", "test:x86@1.0.0", "--additional-urls="+url) require.NoError(t, err) // upgrade without index fires a warning - jsonStdout, _, _ := cli.Run("core", "upgrade", "test:x86", "--format", "json") + jsonStdout, _, _ := cli.Run("core", "upgrade", "test:x86", "--json") requirejson.Query(t, jsonStdout, ".warnings[]", `"missing package index for test:x86, future updates cannot be guaranteed"`) }) @@ -1066,7 +1164,7 @@ func TestCoreUpgradeWarningWithPackageInstalledButNotIndexed(t *testing.T) { require.NoError(t, os.Remove(installedJson.String())) t.Run("missing both installed.json and additional-urls", func(t *testing.T) { - jsonStdout, _, _ := cli.Run("core", "upgrade", "test:x86", "--format", "json") + jsonStdout, _, _ := cli.Run("core", "upgrade", "test:x86", "--json") requirejson.Query(t, jsonStdout, ".warnings[]", `"missing package index for test:x86, future updates cannot be guaranteed"`) }) } @@ -1075,11 +1173,213 @@ func TestCoreListWhenNoPlatformAreInstalled(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() - stdout, _, err := cli.Run("core", "list", "--format", "json") + stdout, _, err := cli.Run("core", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.platforms | length`, `0`) + requirejson.Query(t, stdout, `.platforms | select(.!=null)`, `[]`) stdout, _, err = cli.Run("core", "list") require.NoError(t, err) require.Equal(t, "No platforms installed.\n", string(stdout)) } + +func TestCoreHavingIncompatibleDepTools(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + url := env.HTTPServeFile(8000, paths.New("..", "testdata", "test_index.json")).String() + additionalURLs := "--additional-urls=" + url + + _, _, err := cli.Run("core", "update-index", additionalURLs) + require.NoError(t, err) + + // the `latest_version` must point to an installable release. In the releases field the latest entry, points to an incompatible version. + stdout, _, err := cli.Run("core", "list", "--all", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{ + "installed_version": "", + "latest_version": "1.0.1", + "releases": { + "1.0.0": {"compatible": true}, + "1.0.1": {"compatible": true}, + "1.0.2": {"compatible": false} + } + }`) + + // install latest compatible version + _, _, err = cli.Run("core", "install", "foo_vendor:avr", additionalURLs) + require.NoError(t, err) + stdout, _, err = cli.Run("core", "list", "--all", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{ + "latest_version": "1.0.1", + "installed_version": "1.0.1", + "releases": {"1.0.1": {"compatible": true}} + }`) + + // install a specific incompatible version + _, stderr, err := cli.Run("core", "install", "foo_vendor:avr@1.0.2", additionalURLs) + require.Error(t, err) + require.Contains(t, string(stderr), "no versions available for the current OS") + + // install a specific compatible version + _, _, err = cli.Run("core", "install", "foo_vendor:avr@1.0.0", additionalURLs) + require.NoError(t, err) + stdout, _, err = cli.Run("core", "list", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{"installed_version": "1.0.0", "releases": {"1.0.0": {"compatible": true}}}`) + + // Lists all updatable cores + stdout, _, err = cli.Run("core", "list", "--updatable", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{"latest_version": "1.0.1", "releases": {"1.0.1": {"compatible": true}}}`) + + // Show outdated cores, must show latest compatible + stdout, _, err = cli.Run("outdated", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{"latest_version": "1.0.1", "releases":{"1.0.1": {"compatible": true}}}`) + + // upgrade to latest compatible (1.0.0 -> 1.0.1) + _, _, err = cli.Run("core", "upgrade", "foo_vendor:avr", "--json", additionalURLs) + require.NoError(t, err) + stdout, _, err = cli.Run("core", "list", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr") | .releases[.installed_version]`). + MustContain(`{"version": "1.0.1", "compatible": true}`) + + // upgrade to latest incompatible not possible (1.0.1 -> 1.0.2) + _, _, err = cli.Run("core", "upgrade", "foo_vendor:avr", "--json", additionalURLs) + require.NoError(t, err) + stdout, _, err = cli.Run("core", "list", "--json", additionalURLs) + require.NoError(t, err) + requirejson.Query(t, stdout, `.platforms | .[] | select(.id == "foo_vendor:avr") | .installed_version`, `"1.0.1"`) + + // When no compatible version are found return error + // When trying to install a platform with no compatible version fails + _, stderr, err = cli.Run("core", "install", "incompatible_vendor:avr", additionalURLs) + require.Error(t, err) + require.Contains(t, string(stderr), "is not available for your OS") + + // Core search + { + // core search with and without --all produces the same results. + stdoutSearchAll, _, err := cli.Run("core", "search", "--all", "--json", additionalURLs) + require.NoError(t, err) + stdoutSearch, _, err := cli.Run("core", "search", "--json", additionalURLs) + require.NoError(t, err) + require.Equal(t, stdoutSearchAll, stdoutSearch) + for _, stdout := range [][]byte{stdoutSearchAll, stdoutSearch} { + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "foo_vendor:avr")`). + MustContain(`{ + "latest_version": "1.0.1", + "releases": { + "1.0.0": {"compatible": true}, + "1.0.1": {"compatible": true}, + "1.0.2": {"compatible": false} + } + }`) + requirejson.Parse(t, stdout). + Query(`.platforms | .[] | select(.id == "incompatible_vendor:avr")`). + MustContain(`{"latest_version": "", "releases": { "1.0.0": {"compatible": false}}}`) + } + // In text mode, core search shows `n/a` for core that doesn't have any compatible version + stdout, _, err := cli.Run("core", "search", additionalURLs) + require.NoError(t, err) + var lines [][]string + for _, v := range strings.Split(strings.TrimSpace(string(stdout)), "\n") { + lines = append(lines, strings.Fields(strings.TrimSpace(v))) + if strings.Contains(v, "incompatible_vendor:avr") { + t.Log(strings.Fields(strings.TrimSpace(v))) + } + } + require.Contains(t, lines, []string{"incompatible_vendor:avr", "n/a", "Incompatible", "Boards"}) + } +} + +func TestReferencedCoreBuildAndRuntimeProperties(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + testSketchbook, err := paths.New("testdata", "sketchbook_with_extended_platform").Abs() + require.NoError(t, err) + + // Install custom platform + err = testSketchbook.Join("hardware").CopyDirTo(cli.SketchbookDir().Join("hardware")) + require.NoError(t, err) + + // Determine some useful paths + boardPlatformPath := cli.SketchbookDir().Join("hardware", "test", "avr").String() + corePlatformPath := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6").String() + corePath := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6", "cores", "arduino").String() + + jsonEncode := func(in string) string { + enc, err := json.Marshal(in) + require.NoError(t, err) + return string(enc) + } + + // Check runtime variables are populated correctly + { + outJson, _, err := cli.Run("board", "details", "-b", "test:avr:test", "--show-properties", "--json") + require.NoError(t, err) + out := requirejson.Parse(t, outJson).Query(".build_properties") + out.ArrayMustContain(jsonEncode("build.board.platform.path=" + boardPlatformPath)) + out.ArrayMustContain(jsonEncode("build.core.platform.path=" + corePlatformPath)) + out.ArrayMustContain(jsonEncode("build.core.path=" + corePath)) + out.ArrayMustContain(jsonEncode("runtime.platform.path=" + boardPlatformPath)) + } + { + outJson, _, err := cli.Run("board", "details", "-b", "test:avr:test2", "--show-properties", "--json") + require.NoError(t, err) + out := requirejson.Parse(t, outJson).Query(".build_properties") + out.ArrayMustContain(jsonEncode("build.board.platform.path=" + boardPlatformPath)) + out.ArrayMustContain(jsonEncode("build.core.platform.path=" + corePlatformPath)) + out.ArrayMustContain(jsonEncode("build.core.path=" + corePath)) + // https://github.com/arduino/arduino-cli/issues/2616 + out.ArrayMustContain(jsonEncode("runtime.platform.path=" + corePlatformPath)) + } +} + +func TestCoreInstallWithWrongArchiveSize(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2332 + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("--additional-urls", "https://raw.githubusercontent.com/geolink/opentracker-arduino-board/bf6158ebab0402db217bfb02ea61461ddc6f2940/package_opentracker_index.json", "core", "update-index") + require.NoError(t, err) + + _, _, err = cli.Run("--additional-urls", "https://raw.githubusercontent.com/geolink/opentracker-arduino-board/bf6158ebab0402db217bfb02ea61461ddc6f2940/package_opentracker_index.json", "core", "install", "opentracker:sam@1.0.5") + require.NoError(t, err) +} + +func TestCoreInstallWithMissingOrInvalidChecksumAndUnsafeInstallEnabled(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/1468 + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("--additional-urls", "https://raw.githubusercontent.com/keyboardio/ArduinoCore-GD32-Keyboardio/refs/heads/main/package_gd32_index.json", "core", "update-index") + require.NoError(t, err) + + _, _, err = cli.Run("--additional-urls", "https://raw.githubusercontent.com/keyboardio/ArduinoCore-GD32-Keyboardio/refs/heads/main/package_gd32_index.json", "core", "install", "GD32Community:gd32") + require.Error(t, err) + + _, _, err = cli.RunWithCustomEnv( + map[string]string{"ARDUINO_BOARD_MANAGER_ENABLE_UNSAFE_INSTALL": "true"}, + "--additional-urls", "https://raw.githubusercontent.com/keyboardio/ArduinoCore-GD32-Keyboardio/refs/heads/main/package_gd32_index.json", "core", "install", "GD32Community:gd32") + require.NoError(t, err) +} diff --git a/internal/integrationtest/core/testdata/sketchbook_with_extended_platform/hardware/test/avr/boards.txt b/internal/integrationtest/core/testdata/sketchbook_with_extended_platform/hardware/test/avr/boards.txt new file mode 100644 index 00000000000..24f046b561a --- /dev/null +++ b/internal/integrationtest/core/testdata/sketchbook_with_extended_platform/hardware/test/avr/boards.txt @@ -0,0 +1,7 @@ + +test.name=Test Board +test.build.core=arduino:arduino + +test2.name=Test 2 Board +test2.build.core=arduino:arduino +test2.runtime.use_core_platform_path_for_runtime_platform_path=true diff --git a/internal/integrationtest/daemon/board_identification_test.go b/internal/integrationtest/daemon/board_identification_test.go new file mode 100644 index 00000000000..a8c4a9e543f --- /dev/null +++ b/internal/integrationtest/daemon/board_identification_test.go @@ -0,0 +1,54 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package daemon_test + +import ( + "context" + "errors" + "fmt" + "io" + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/stretchr/testify/require" +) + +func TestBoardIdentification(t *testing.T) { + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + plInst, err := grpcInst.PlatformInstall(context.Background(), "arduino", "avr", "1.8.6", true) + require.NoError(t, err) + for { + msg, err := plInst.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + fmt.Printf("INSTALL> %v\n", msg) + } + + resp, err := grpcInst.BoardIdentify(context.Background(), map[string]string{"vid": "0x2341", "pid": "0x0043"}, false) + require.NoError(t, err) + require.Len(t, resp.GetBoards(), 1) + require.Equal(t, "arduino:avr:uno", resp.GetBoards()[0].GetFqbn()) +} diff --git a/internal/integrationtest/daemon/daemon_concurrency_test.go b/internal/integrationtest/daemon/daemon_concurrency_test.go index 02e9f2501b6..c3541efbf4d 100644 --- a/internal/integrationtest/daemon/daemon_concurrency_test.go +++ b/internal/integrationtest/daemon/daemon_concurrency_test.go @@ -20,9 +20,11 @@ import ( "errors" "fmt" "io" + "sync" "testing" "time" + "github.com/arduino/arduino-cli/internal/integrationtest" "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" @@ -31,7 +33,7 @@ import ( func TestArduinoCliDaemonCompileWithLotOfOutput(t *testing.T) { // See: https://github.com/arduino/arduino-cli/issues/2169 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() _, _, err := cli.Run("core", "install", "arduino:avr") @@ -75,3 +77,56 @@ func TestArduinoCliDaemonCompileWithLotOfOutput(t *testing.T) { testCompile() testCompile() } + +func TestInitAndMonitorConcurrency(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2719 + + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + _, _, err := cli.Run("core", "install", "arduino:avr") + require.NoError(t, err) + + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + cli.InstallMockedSerialMonitor(t) + + // Open the serial monitor for 5 seconds + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + mon, err := grpcInst.Monitor(ctx, &commands.Port{ + Address: "/dev/test", + Protocol: "serial", + }) + require.NoError(t, err) + var monitorCompleted sync.WaitGroup + monitorCompleted.Add(1) + go func() { + for { + msg, err := mon.Recv() + if err != nil { + break + } + fmt.Println("MON> ", msg) + } + fmt.Println("MON CLOSED") + monitorCompleted.Done() + }() + + // Check that Init completes without blocking when the monitor is open + start := time.Now() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + require.LessOrEqual(t, time.Since(start), 4*time.Second) + cancel() + monitorCompleted.Wait() + + // Allow some time for the mocked-monitor process to terminate (otherwise the + // test will fail on Windows when the cleanup function tries to remove the + // executable). + time.Sleep(2 * time.Second) +} diff --git a/internal/integrationtest/daemon/daemon_test.go b/internal/integrationtest/daemon/daemon_test.go index 7e49db88111..ae094a0d856 100644 --- a/internal/integrationtest/daemon/daemon_test.go +++ b/internal/integrationtest/daemon/daemon_test.go @@ -20,11 +20,14 @@ import ( "errors" "fmt" "io" + "maps" + "net/http" + "net/http/httptest" + "strings" "testing" "time" - "github.com/arduino/arduino-cli/arduino" - f "github.com/arduino/arduino-cli/internal/algorithms" + "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/internal/integrationtest" "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" @@ -37,7 +40,7 @@ import ( func TestArduinoCliDaemon(t *testing.T) { // See: https://github.com/arduino/arduino-cli/pull/1804 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -63,19 +66,19 @@ func TestArduinoCliDaemon(t *testing.T) { require.NoError(t, err) watcherCanceldCh := make(chan struct{}) go func() { + defer close(watcherCanceldCh) for { msg, err := watcher.Recv() if errors.Is(err, io.EOF) { - fmt.Println("Watcher EOF") + fmt.Println("Got EOF from watcher") return } if s, ok := status.FromError(err); ok && s.Code() == codes.Canceled { - fmt.Println("Watcher canceled") - watcherCanceldCh <- struct{}{} + fmt.Println("Got Canceled error from watcher") return } require.NoError(t, err, "BoardListWatch grpc call returned an error") - require.Empty(t, msg.Error, "Board list watcher returned an error") + require.Empty(t, msg.GetError(), "Board list watcher returned an error") fmt.Printf("WATCH> %v %v\n", msg, err) } }() @@ -91,12 +94,30 @@ func TestArduinoCliDaemon(t *testing.T) { testWatcher() testWatcher() + + { + // Test that the watcher stays open until the grpc call is canceled + + ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) + defer cancel() + + start := time.Now() + watcher, err := grpcInst.BoardListWatch(ctx) + require.NoError(t, err) + for { + _, err := watcher.Recv() + if err != nil { + break + } + } + require.Greater(t, time.Since(start), 2*time.Second) + } } func TestDaemonAutoUpdateIndexOnFirstInit(t *testing.T) { // https://github.com/arduino/arduino-cli/issues/1529 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -104,32 +125,17 @@ func TestDaemonAutoUpdateIndexOnFirstInit(t *testing.T) { fmt.Printf("INIT> %v\n", ir.GetMessage()) })) - _, err := grpcInst.PlatformList(context.Background()) + _, err := grpcInst.PlatformSearch(context.Background(), "", true) require.NoError(t, err) require.FileExists(t, cli.DataDir().Join("package_index.json").String()) } -// createEnvForDaemon performs the minimum required operations to start the arduino-cli daemon. -// It returns a testsuite.Environment and an ArduinoCLI client to perform the integration tests. -// The Environment must be disposed by calling the CleanUp method via defer. -func createEnvForDaemon(t *testing.T) (*integrationtest.Environment, *integrationtest.ArduinoCLI) { - env := integrationtest.NewEnvironment(t) - - cli := integrationtest.NewArduinoCliWithinEnvironment(env, &integrationtest.ArduinoCLIConfig{ - ArduinoCLIPath: integrationtest.FindRepositoryRootPath(t).Join("arduino-cli"), - UseSharedStagingFolder: true, - }) - - _ = cli.StartDaemon(false) - return env, cli -} - func TestDaemonCompileOptions(t *testing.T) { // See: https://github.com/arduino/arduino-cli/issues/1614 // See: https://github.com/arduino/arduino-cli/pull/1820 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -173,7 +179,7 @@ func TestDaemonCompileOptions(t *testing.T) { fmt.Println("COMPILE ERROR>", err) break } - if msg.ErrStream != nil { + if msg.GetErrStream() != nil { fmt.Printf("COMPILE> %v\n", string(msg.GetErrStream())) } } @@ -188,22 +194,24 @@ func TestDaemonCompileOptions(t *testing.T) { break } require.NoError(t, err) - if msg.ErrStream != nil { + if msg.GetErrStream() != nil { fmt.Printf("COMPILE> %v\n", string(msg.GetErrStream())) } - analyzer.Process(msg.GetProgress()) + if pr := msg.GetProgress(); pr != nil { + fmt.Printf("COMPILE PROGRESS> %v\n", pr) + analyzer.Process(pr) + } } + // https://github.com/arduino/arduino-cli/issues/2016 - // assert that the task progress is increasing and doesn't contain multiple 100% values - results := analyzer.Results[""] - require.True(t, results[len(results)-1].Completed, fmt.Sprintf("latest percent value: %v", results[len(results)-1].Percent)) - require.IsNonDecreasing(t, f.Map(results, (*commands.TaskProgress).GetPercent)) + // https://github.com/arduino/arduino-cli/issues/2711 + analyzer.Check(t) } func TestDaemonCompileAfterFailedLibInstall(t *testing.T) { // See: https://github.com/arduino/arduino-cli/issues/1812 - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -226,14 +234,14 @@ func TestDaemonCompileAfterFailedLibInstall(t *testing.T) { require.Contains(t, err.Error(), "Missing FQBN") break } - if msg.ErrStream != nil { + if msg.GetErrStream() != nil { fmt.Printf("COMPILE> %v\n", string(msg.GetErrStream())) } } } func TestDaemonCoreUpdateIndex(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -254,7 +262,7 @@ func TestDaemonCoreUpdateIndex(t *testing.T) { res, err := analyzeUpdateIndexClient(t, cl) require.NoError(t, err) require.Len(t, res, 1) - require.True(t, res["https://downloads.arduino.cc/packages/package_index.tar.bz2"].Success) + require.True(t, res["https://downloads.arduino.cc/packages/package_index.tar.bz2"].GetSuccess()) } { cl, err := grpcInst.UpdateIndex(context.Background(), false) @@ -262,14 +270,14 @@ func TestDaemonCoreUpdateIndex(t *testing.T) { res, err := analyzeUpdateIndexClient(t, cl) require.Error(t, err) require.Len(t, res, 3) - require.True(t, res["https://downloads.arduino.cc/packages/package_index.tar.bz2"].Success) - require.True(t, res["http://arduino.esp8266.com/stable/package_esp8266com_index.json"].Success) - require.False(t, res["http://downloads.arduino.cc/package_inexistent_index.json"].Success) + require.True(t, res["https://downloads.arduino.cc/packages/package_index.tar.bz2"].GetSuccess()) + require.True(t, res["http://arduino.esp8266.com/stable/package_esp8266com_index.json"].GetSuccess()) + require.False(t, res["http://downloads.arduino.cc/package_inexistent_index.json"].GetSuccess()) } } func TestDaemonBundleLibInstall(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -297,7 +305,7 @@ func TestDaemonBundleLibInstall(t *testing.T) { require.NoError(t, err) libsAndLocation := map[string]commands.LibraryLocation{} for _, lib := range resp.GetInstalledLibraries() { - libsAndLocation[lib.Library.Name] = lib.Library.Location + libsAndLocation[lib.GetLibrary().GetName()] = lib.GetLibrary().GetLocation() } require.Contains(t, libsAndLocation, "Ethernet") require.Contains(t, libsAndLocation, "SD") @@ -328,9 +336,9 @@ func TestDaemonBundleLibInstall(t *testing.T) { require.NoError(t, err) libsAndLocation := map[string]commands.LibraryLocation{} for _, lib := range resp.GetInstalledLibraries() { - libsAndLocation[lib.Library.Name] = lib.Library.Location - if lib.Library.Name == "Ethernet" { - installedEthernetVersion = lib.Library.Version + libsAndLocation[lib.GetLibrary().GetName()] = lib.GetLibrary().GetLocation() + if lib.GetLibrary().GetName() == "Ethernet" { + installedEthernetVersion = lib.GetLibrary().GetVersion() } } require.Contains(t, libsAndLocation, "Ethernet") @@ -361,7 +369,7 @@ func TestDaemonBundleLibInstall(t *testing.T) { require.NoError(t, err) libsAndLocation := map[string]commands.LibraryLocation{} for _, lib := range resp.GetInstalledLibraries() { - libsAndLocation[lib.Library.Name] = lib.Library.Location + libsAndLocation[lib.GetLibrary().GetName()] = lib.GetLibrary().GetLocation() } require.Contains(t, libsAndLocation, "Ethernet") require.Contains(t, libsAndLocation, "SD") @@ -372,7 +380,7 @@ func TestDaemonBundleLibInstall(t *testing.T) { } // Un-Set builtin libraries dir - err := cli.SetValue("directories.builtin.libraries", `""`) + err := cli.SetValue("directories.builtin.libraries", "") require.NoError(t, err) // Re-init @@ -409,7 +417,7 @@ func TestDaemonLibrariesRescanOnInstall(t *testing.T) { with the gprc instance The last attempt is expected to not raise an error */ - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -447,7 +455,7 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { res, err := analyzeUpdateIndexClient(t, cl) require.NoError(t, err) require.Len(t, res, 2) - require.True(t, res["https://arduino.esp8266.com/stable/package_esp8266com_index.json"].Success) + require.True(t, res["https://arduino.esp8266.com/stable/package_esp8266com_index.json"].GetSuccess()) refreshInstance(t, grpcInst) @@ -465,7 +473,7 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { t.Run("upgraded successfully with additional urls", func(t *testing.T) { t.Run("and install.json is present", func(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -477,11 +485,11 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { platform, upgradeError := analyzePlatformUpgradeClient(plUpgrade) require.NoError(t, upgradeError) require.NotNil(t, platform) - require.True(t, platform.Indexed) // the esp866 is present in the additional-urls - require.False(t, platform.MissingMetadata) // install.json is present + require.True(t, platform.GetMetadata().GetIndexed()) // the esp866 is present in the additional-urls + require.False(t, platform.GetRelease().GetMissingMetadata()) // install.json is present }) t.Run("and install.json is missing", func(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -497,15 +505,14 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { platform, upgradeError := analyzePlatformUpgradeClient(plUpgrade) require.NoError(t, upgradeError) require.NotNil(t, platform) - require.True(t, platform.Indexed) // the esp866 is not present in the additional-urls - require.False(t, platform.MissingMetadata) // install.json is present because the old version got upgraded - + require.True(t, platform.GetMetadata().GetIndexed()) // the esp866 is not present in the additional-urls + require.False(t, platform.GetRelease().GetMissingMetadata()) // install.json is present because the old version got upgraded }) }) t.Run("upgrade failed", func(t *testing.T) { t.Run("without additional URLs", func(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -519,13 +526,13 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { require.NoError(t, err) platform, upgradeError := analyzePlatformUpgradeClient(plUpgrade) - require.ErrorIs(t, upgradeError, (&arduino.PlatformAlreadyAtTheLatestVersionError{Platform: "esp8266:esp8266"}).ToRPCStatus().Err()) + require.ErrorIs(t, upgradeError, (&cmderrors.PlatformAlreadyAtTheLatestVersionError{Platform: "esp8266:esp8266"}).GRPCStatus().Err()) require.NotNil(t, platform) - require.False(t, platform.Indexed) // the esp866 is not present in the additional-urls - require.False(t, platform.MissingMetadata) // install.json is present + require.False(t, platform.GetMetadata().GetIndexed()) // the esp866 is not present in the additional-urls + require.False(t, platform.GetRelease().GetMissingMetadata()) // install.json is present }) t.Run("missing both additional URLs and install.json", func(t *testing.T) { - env, cli := createEnvForDaemon(t) + env, cli := integrationtest.CreateEnvForDaemon(t) defer env.CleanUp() grpcInst := cli.Create() @@ -544,18 +551,90 @@ func TestDaemonCoreUpgradePlatform(t *testing.T) { require.NoError(t, err) platform, upgradeError := analyzePlatformUpgradeClient(plUpgrade) - require.ErrorIs(t, upgradeError, (&arduino.PlatformAlreadyAtTheLatestVersionError{Platform: "esp8266:esp8266"}).ToRPCStatus().Err()) + require.ErrorIs(t, upgradeError, (&cmderrors.PlatformAlreadyAtTheLatestVersionError{Platform: "esp8266:esp8266"}).GRPCStatus().Err()) require.NotNil(t, platform) - require.False(t, platform.Indexed) // the esp866 is not present in the additional-urls - require.True(t, platform.MissingMetadata) // install.json is present + require.False(t, platform.GetMetadata().GetIndexed()) // the esp866 is not present in the additional-urls + require.True(t, platform.GetRelease().GetMissingMetadata()) // install.json is present }) }) } +func TestDaemonUserAgent(t *testing.T) { + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + // Set up an http server to serve our custom index file + // The user-agent is tested inside the HTTPServeFile function + test_index := paths.New("..", "testdata", "test_index.json") + url := env.HTTPServeFile(8000, test_index) + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Test that the user-agent contains metadata from the context when the CLI is in daemon mode + userAgent := r.Header.Get("User-Agent") + + require.Contains(t, userAgent, "cli-test/0.0.0") + require.Contains(t, userAgent, "grpc-go") + // Depends on how we built the client we may have git-snapshot or 0.0.0-git in dev releases + require.Condition(t, func() (success bool) { + return strings.Contains(userAgent, "arduino-cli/git-snapshot") || + strings.Contains(userAgent, "arduino-cli/0.0.0-git") + }) + + proxiedReq, err := http.NewRequest(r.Method, url.String(), r.Body) + require.NoError(t, err) + maps.Copy(proxiedReq.Header, r.Header) + + proxiedResp, err := http.DefaultTransport.RoundTrip(proxiedReq) + require.NoError(t, err) + defer proxiedResp.Body.Close() + + // Copy the headers from the proxy response to the original response + maps.Copy(r.Header, proxiedReq.Header) + w.WriteHeader(proxiedResp.StatusCode) + io.Copy(w, proxiedResp.Body) + })) + defer ts.Close() + + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + // Set extra indexes + additionalURL := ts.URL + "/test_index.json" + err := cli.SetValue("board_manager.additional_urls", fmt.Sprintf(`["%s"]`, additionalURL)) + require.NoError(t, err) + + { + cl, err := grpcInst.UpdateIndex(context.Background(), false) + require.NoError(t, err) + res, err := analyzeUpdateIndexClient(t, cl) + require.NoError(t, err) + require.Len(t, res, 2) + require.True(t, res[additionalURL].GetSuccess()) + } +} + +func TestDaemonCreateSketch(t *testing.T) { + // https://github.com/arduino/arduino-cli/issues/2861 + + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + sketchName := "test_sketch.ino" + _, err := grpcInst.NewSketch(context.Background(), sketchName, "", false) + require.NoError(t, err) +} + func analyzeUpdateIndexClient(t *testing.T, cl commands.ArduinoCoreService_UpdateIndexClient) (map[string]*commands.DownloadProgressEnd, error) { analyzer := NewDownloadProgressAnalyzer(t) for { msg, err := cl.Recv() + fmt.Println("UPDATE>", msg, err) if errors.Is(err, io.EOF) { return analyzer.Results, nil } @@ -575,8 +654,8 @@ func analyzePlatformUpgradeClient(cl commands.ArduinoCoreService_PlatformUpgrade if errors.Is(err, io.EOF) { break } - if msg.GetPlatform() != nil { - platform = msg.GetPlatform() + if res := msg.GetResult(); res != nil { + platform = res.GetPlatform() } if err != nil { upgradeError = err diff --git a/internal/integrationtest/daemon/detect_core_changes_test.go b/internal/integrationtest/daemon/detect_core_changes_test.go new file mode 100644 index 00000000000..d7159240b78 --- /dev/null +++ b/internal/integrationtest/daemon/detect_core_changes_test.go @@ -0,0 +1,136 @@ +// This file is part of arduino-cli. +// +// Copyright 2022 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package daemon_test + +import ( + "context" + "errors" + "fmt" + "io" + "testing" + "time" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + + "github.com/stretchr/testify/require" +) + +func TestDetectionOfChangesInCoreBeforeCompile(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2523 + + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + // Create a new instance of the daemon + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + // Install avr core + installCl, err := grpcInst.PlatformInstall(context.Background(), "arduino", "avr", "", true) + require.NoError(t, err) + for { + installResp, err := installCl.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + fmt.Printf("INSTALL> %v\n", installResp) + } + installCl.CloseSend() + + // Utility functions: tryCompile + sketchPath, err := paths.New("testdata", "bare_minimum").Abs() + require.NoError(t, err) + tryCompile := func() error { + compileCl, err := grpcInst.Compile(context.Background(), "arduino:avr:uno", sketchPath.String(), "") + require.NoError(t, err) + defer compileCl.CloseSend() + for { + if compileResp, err := compileCl.Recv(); errors.Is(err, io.EOF) { + return nil + } else if err != nil { + return err + } else { + fmt.Printf("COMPILE> %v\n", compileResp) + } + } + } + + // Utility functions: tryTouch will touch a file and see if the compile detects the change + tryTouch := func(fileToTouch *paths.Path) { + time.Sleep(time.Second) // await at least one second so the timestamp of the file is different + + // touch the file + f, err := fileToTouch.Append() + require.NoError(t, err) + _, err = f.WriteString("\n") + require.NoError(t, err) + require.NoError(t, f.Close()) + + // try compile: should fail + err = tryCompile() + require.Error(t, err) + require.Contains(t, err.Error(), "The instance is no longer valid and needs to be reinitialized") + + // re-init instance + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + // try compile: should succeed + require.NoError(t, tryCompile()) + } + + avrCorePath := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6") + tryTouch(avrCorePath.Join("installed.json")) + tryTouch(avrCorePath.Join("platform.txt")) + tryTouch(avrCorePath.Join("platform.local.txt")) + tryTouch(avrCorePath.Join("programmers.txt")) + tryTouch(avrCorePath.Join("boards.txt")) + tryTouch(avrCorePath.Join("boards.local.txt")) + + // Delete a file and check if the change is detected + require.NoError(t, avrCorePath.Join("programmers.txt").Remove()) + err = tryCompile() + require.Error(t, err) + require.Contains(t, err.Error(), "The instance is no longer valid and needs to be reinitialized") + + // Re-init instance and check again + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + require.NoError(t, tryCompile()) + + // Create a file and check if the change is detected + { + f, err := avrCorePath.Join("programmers.txt").Create() + require.NoError(t, err) + require.NoError(t, f.Close()) + } + err = tryCompile() + require.Error(t, err) + require.Contains(t, err.Error(), "The instance is no longer valid and needs to be reinitialized") + + // Re-init instance and check again + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + require.NoError(t, tryCompile()) +} diff --git a/internal/integrationtest/daemon/download_progress_test.go b/internal/integrationtest/daemon/download_progress_test.go index a232abec033..b67bde71ab8 100644 --- a/internal/integrationtest/daemon/download_progress_test.go +++ b/internal/integrationtest/daemon/download_progress_test.go @@ -45,7 +45,7 @@ func (a *DownloadProgressAnalyzer) Process(progress *commands.DownloadProgress) } if start := progress.GetStart(); start != nil { require.Empty(a.t, a.ongoingDownload, "DownloadProgressStart: started a download without 'completing' the previous one") - a.ongoingDownload = start.Url + a.ongoingDownload = start.GetUrl() } else if update := progress.GetUpdate(); update != nil { require.NotEmpty(a.t, a.ongoingDownload, "DownloadProgressUpdate: received update, but the download is not yet started...") } else if end := progress.GetEnd(); end != nil { diff --git a/internal/integrationtest/daemon/task_progress_test.go b/internal/integrationtest/daemon/task_progress_test.go index c106a2c6588..b24d809c716 100644 --- a/internal/integrationtest/daemon/task_progress_test.go +++ b/internal/integrationtest/daemon/task_progress_test.go @@ -19,6 +19,8 @@ import ( "testing" "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/stretchr/testify/require" + "go.bug.st/f" ) // TaskProgressAnalyzer analyzes TaskProgress messages for consistency @@ -44,3 +46,13 @@ func (a *TaskProgressAnalyzer) Process(progress *commands.TaskProgress) { taskName := progress.GetName() a.Results[taskName] = append(a.Results[taskName], progress) } + +func (a *TaskProgressAnalyzer) Check(t *testing.T) { + for task, results := range a.Results { + require.Equal(t, 1, f.Count(results, (*commands.TaskProgress).GetCompleted), "Got multiple 'completed' messages on task %s", task) + l := len(results) + require.True(t, results[l-1].GetCompleted(), "Last message is not 'completed' on task: %s", task) + require.Equal(t, results[l-1].GetPercent(), float32(100), "Last message is not 100% on task: %s", task) + require.IsNonDecreasing(t, f.Map(results, (*commands.TaskProgress).GetPercent), "Percentages are not increasing on task: %s", task) + } +} diff --git a/internal/integrationtest/daemon/upload_test.go b/internal/integrationtest/daemon/upload_test.go new file mode 100644 index 00000000000..75c731aab09 --- /dev/null +++ b/internal/integrationtest/daemon/upload_test.go @@ -0,0 +1,120 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package daemon_test + +import ( + "context" + "errors" + "fmt" + "io" + "os" + "strings" + "testing" + "time" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestUploadCancelation(t *testing.T) { + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + plInst, err := grpcInst.PlatformInstall(context.Background(), "arduino", "avr", "1.8.6", true) + require.NoError(t, err) + for { + msg, err := plInst.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + fmt.Printf("INSTALL> %v\n", msg) + } + + // Mock avrdude + cli.InstallMockedAvrdude(t) + + // Re-init instance to update changes + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + // Build sketch for upload + sk := paths.New("testdata", "bare_minimum") + compile, err := grpcInst.Compile(context.Background(), "arduino:avr:uno", sk.String(), "") + require.NoError(t, err) + for { + msg, err := compile.Recv() + if errors.Is(err, io.EOF) { + break + } + if err != nil { + fmt.Println("COMPILE ERROR>", err) + require.FailNow(t, "Expected successful compile", "compilation failed") + break + } + if msg.GetOutStream() != nil { + fmt.Printf("COMPILE OUT> %v\n", string(msg.GetOutStream())) + } + if msg.GetErrStream() != nil { + fmt.Printf("COMPILE ERR> %v\n", string(msg.GetErrStream())) + } + } + + // Try upload and interrupt the call after 1 sec + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + upload, err := grpcInst.Upload(ctx, "arduino:avr:uno", sk.String(), "/dev/ttyACM0", "serial") + require.NoError(t, err) + checkFile := "" + for { + msg, err := upload.Recv() + if errors.Is(err, io.EOF) { + require.FailNow(t, "Expected interrupted upload", "upload succeeded") + break + } + if err != nil { + fmt.Println("UPLOAD ERROR>", err) + break + } + if out := string(msg.GetOutStream()); out != "" { + fmt.Printf("UPLOAD OUT> %v\n", out) + if strings.HasPrefix(out, "CHECKFILE: ") { + checkFile = strings.TrimSpace(out[11:]) + } + } + if msg.GetErrStream() != nil { + fmt.Printf("UPLOAD ERR> %v\n", string(msg.GetErrStream())) + } + } + cancel() + + // Wait 5 seconds. + // If the mocked avrdude is not killed it will create a checkfile and it will remove it after 5 seconds. + time.Sleep(5 * time.Second) + + // Test if the checkfile is still there (if the file is there it means that mocked avrdude + // has been correctly killed). + require.NotEmpty(t, checkFile) + require.FileExists(t, checkFile) + require.NoError(t, os.Remove(checkFile)) +} diff --git a/internal/integrationtest/debug/debug_test.go b/internal/integrationtest/debug/debug_test.go index 6f7dd422737..e298d8e2fbf 100644 --- a/internal/integrationtest/debug/debug_test.go +++ b/internal/integrationtest/debug/debug_test.go @@ -33,13 +33,22 @@ func TestDebug(t *testing.T) { require.NoError(t, err) // Install cores + _, _, err = cli.Run("core", "install", "arduino:avr") + require.NoError(t, err) _, _, err = cli.Run("core", "install", "arduino:samd") require.NoError(t, err) + // Install custom core + customHw, err := paths.New("testdata", "hardware").Abs() + require.NoError(t, err) + err = customHw.CopyDirTo(cli.SketchbookDir().Join("hardware")) + require.NoError(t, err) + integrationtest.CLISubtests{ {"Start", testDebuggerStarts}, {"WithPdeSketchStarts", testDebuggerWithPdeSketchStarts}, {"DebugInformation", testAllDebugInformation}, + {"DebugCheck", testDebugCheck}, }.Run(t, env, cli) } @@ -99,19 +108,13 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli _, _, err := cli.Run("sketch", "new", sketchPath.String()) require.NoError(t, err) - // Install custom core - customHw, err := paths.New("testdata", "hardware").Abs() - require.NoError(t, err) - err = customHw.CopyDirTo(cli.SketchbookDir().Join("hardware")) - require.NoError(t, err) - // Build sketch - _, _, err = cli.Run("compile", "-b", "my:samd:my", sketchPath.String(), "--format", "json") + _, _, err = cli.Run("compile", "-b", "my:samd:my", sketchPath.String(), "--json") require.NoError(t, err) { // Starts debugger - jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my", "-P", "atmel_ice", sketchPath.String(), "--info", "--format", "json") + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my", "-P", "atmel_ice", sketchPath.String(), "--info", "--json") require.NoError(t, err) debugOut := requirejson.Parse(t, jsonDebugOut) debugOut.MustContain(` @@ -132,28 +135,44 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli ] }, "svd_file": "svd-file", - "cortex-debug_custom_configuration": { - "anotherStringParamer": "hellooo", - "overrideRestartCommands": [ - "monitor reset halt", - "monitor gdb_sync", - "thb setup", - "c" - ], - "postAttachCommands": [ - "set remote hardware-watchpoint-limit 2", - "monitor reset halt", - "monitor gdb_sync", - "thb setup", - "c" - ] - } + "custom_configs": { + "cortex-debug": { + "aBoolean": true, + "aStringBoolean": "true", + "aStringNumber": "10", + "aNumber": 10, + "anotherNumber": 10.2, + "anObject": { + "boolean": true, + "key": "value" + }, + "anotherObject": { + "boolean": true, + "key": "value" + }, + "anotherStringParamer": "hellooo", + "overrideRestartCommands": [ + "monitor reset halt", + "monitor gdb_sync", + "thb setup", + "c" + ], + "postAttachCommands": [ + "set remote hardware-watchpoint-limit 2", + "monitor reset halt", + "monitor gdb_sync", + "thb setup", + "c" + ] + }, + }, + "programmer": "atmel_ice" }`) } // Starts debugger with another programmer { - jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my", "-P", "my_cold_ice", sketchPath.String(), "--info", "--format", "json") + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my", "-P", "my_cold_ice", sketchPath.String(), "--info", "--json") require.NoError(t, err) debugOut := requirejson.Parse(t, jsonDebugOut) debugOut.MustContain(` @@ -174,27 +193,43 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli ] }, "svd_file": "svd-file", - "cortex-debug_custom_configuration": { - "anotherStringParamer": "hellooo", - "overrideRestartCommands": [ - "monitor reset halt", - "monitor gdb_sync", - "thb setup", - "c" - ], - "postAttachCommands": [ - "set remote hardware-watchpoint-limit 2", - "monitor reset halt", - "monitor gdb_sync", - "thb setup", - "c" - ] - } + "custom_configs": { + "cortex-debug": { + "aBoolean": true, + "aStringBoolean": "true", + "aStringNumber": "10", + "aNumber": 10, + "anotherNumber": 10.2, + "anObject": { + "boolean": true, + "key": "value" + }, + "anotherObject": { + "boolean": true, + "key": "value" + }, + "anotherStringParamer": "hellooo", + "overrideRestartCommands": [ + "monitor reset halt", + "monitor gdb_sync", + "thb setup", + "c" + ], + "postAttachCommands": [ + "set remote hardware-watchpoint-limit 2", + "monitor reset halt", + "monitor gdb_sync", + "thb setup", + "c" + ] + }, + }, + "programmer": "my_cold_ice" }`) { // Starts debugger with an old-style openocd script definition - jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my2", "-P", "atmel_ice", sketchPath.String(), "--info", "--format", "json") + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my2", "-P", "atmel_ice", sketchPath.String(), "--info", "--json") require.NoError(t, err) debugOut := requirejson.Parse(t, jsonDebugOut) debugOut.MustContain(` @@ -211,13 +246,14 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli "single-script" ] }, - "svd_file": "svd-file" + "svd_file": "svd-file", + "programmer": "atmel_ice" }`) } { // Starts debugger with mixed old and new-style openocd script definition - jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my2", "-P", "my_cold_ice", sketchPath.String(), "--info", "--format", "json") + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my2", "-P", "my_cold_ice", sketchPath.String(), "--info", "--json") require.NoError(t, err) debugOut := requirejson.Parse(t, jsonDebugOut) debugOut.MustContain(` @@ -234,9 +270,125 @@ func testAllDebugInformation(t *testing.T, env *integrationtest.Environment, cli "cold_ice_script" ] }, - "svd_file": "svd-file" + "svd_file": "svd-file", + "programmer": "my_cold_ice" }`) } + { + // Mixing programmer and additional_config + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my3", "-P", "my_cold_ice", sketchPath.String(), "--info", "--json") + require.NoError(t, err) + debugOut := requirejson.Parse(t, jsonDebugOut) + debugOut.MustContain(` + { + "toolchain": "gcc", + "toolchain_path": "gcc-path", + "toolchain_prefix": "gcc-prefix", + "server": "openocd", + "server_path": "openocd-path", + "server_configuration": { + "path": "openocd-path", + "scripts_dir": "openocd-scripts-dir", + "scripts": [ + "cold_ice_script" + ] + }, + "custom_configs": { + "cortex-debug": { + "test1": "true" + } + }, + "svd_file": "test1.svd", + "programmer": "my_cold_ice" + }`) + } + + { + // Mixing programmer and additional_config selected by another variable + jsonDebugOut, _, err := cli.Run("debug", "-b", "my:samd:my4", "-P", "my_cold_ice", sketchPath.String(), "--info", "--json") + require.NoError(t, err) + debugOut := requirejson.Parse(t, jsonDebugOut) + debugOut.MustContain(` + { + "toolchain": "gcc", + "toolchain_path": "gcc-path", + "toolchain_prefix": "gcc-prefix", + "server": "openocd", + "server_path": "openocd-path", + "server_configuration": { + "path": "openocd-path", + "scripts_dir": "openocd-scripts-dir", + "scripts": [ + "cold_ice_script" + ] + }, + "custom_configs": { + "cortex-debug": { + "test2": "true" + } + }, + "svd_file": "test2.svd", + "programmer": "my_cold_ice" + }`) + } } } + +func testDebugCheck(t *testing.T, env *integrationtest.Environment, cli *integrationtest.ArduinoCLI) { + out, _, err := cli.Run("debug", "check", "-b", "arduino:samd:mkr1000", "-P", "atmel_ice") + require.NoError(t, err) + require.Contains(t, string(out), "The given board/programmer configuration supports debugging.") + + out, _, err = cli.Run("debug", "check", "-b", "arduino:samd:mkr1000", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Query(t, out, `.debugging_supported`, `true`) + + out, _, err = cli.Run("debug", "check", "-b", "arduino:avr:uno", "-P", "atmel_ice") + require.NoError(t, err) + require.Contains(t, string(out), "The given board/programmer configuration does NOT support debugging.") + + out, _, err = cli.Run("debug", "check", "-b", "arduino:avr:uno", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Query(t, out, `.debugging_supported`, `false`) + + // Test minimum FQBN compute + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my5", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : false }`) + + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my5:dbg=on", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : true, "debug_fqbn" : "my:samd:my5:dbg=on" }`) + + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my5:dbg=on,cpu=150m", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : true, "debug_fqbn" : "my:samd:my5:dbg=on" }`) + + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my6", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : true, "debug_fqbn" : "my:samd:my6" }`) + + out, _, err = cli.Run("debug", "check", "-b", "my:samd:my6:dbg=on", "-P", "atmel_ice", "--json") + require.NoError(t, err) + requirejson.Contains(t, out, `{ "debugging_supported" : true, "debug_fqbn" : "my:samd:my6" }`) +} + +func TestDebugProfile(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + sketchPath := cli.CopySketch("sketch_with_profile") + + // Compile the sketch using the profile + _, _, err = cli.Run("compile", "--profile", "samd", sketchPath.String()) + require.NoError(t, err) + + // Debug using the profile + _, _, err = cli.Run("debug", "--profile", "samd", sketchPath.String(), "--info") + require.NoError(t, err) +} diff --git a/internal/integrationtest/debug/testdata/hardware/my/samd/boards.txt b/internal/integrationtest/debug/testdata/hardware/my/samd/boards.txt index 987aa196fdd..1333aba8231 100644 --- a/internal/integrationtest/debug/testdata/hardware/my/samd/boards.txt +++ b/internal/integrationtest/debug/testdata/hardware/my/samd/boards.txt @@ -44,6 +44,14 @@ my.debug.cortex-debug.custom.overrideRestartCommands.1=monitor gdb_sync my.debug.cortex-debug.custom.overrideRestartCommands.2=thb setup my.debug.cortex-debug.custom.overrideRestartCommands.3=c my.debug.cortex-debug.custom.anotherStringParamer=hellooo +my.debug.cortex-debug.custom.aBoolean=[boolean]true +my.debug.cortex-debug.custom.aStringBoolean=true +my.debug.cortex-debug.custom.aNumber=[number]10 +my.debug.cortex-debug.custom.anotherNumber=[number]10.20 +my.debug.cortex-debug.custom.aStringNumber=10 +my.debug.cortex-debug.custom.anObject=[object]{"key":"value", "boolean":true} +my.debug.cortex-debug.custom.anotherObject.key=value +my.debug.cortex-debug.custom.anotherObject.boolean=[boolean]true my.debug.svd_file=svd-file my2.name=My Cool Board @@ -79,3 +87,64 @@ my2.debug.server.openocd.path=openocd-path my2.debug.server.openocd.scripts_dir=openocd-scripts-dir my2.debug.server.openocd.script=single-script my2.debug.svd_file=svd-file + +my3.name=My third Cool Board +my3.build.core=arduino:arduino +my3.build.variant=arduino:mkr1000 +my3.debug.toolchain.path=gcc-path +my3.debug.toolchain.prefix=gcc-prefix +my3.debug.server.openocd.path=openocd-path +my3.debug.server.openocd.scripts_dir=openocd-scripts-dir +my3.debug.server.openocd.script=single-script +# this one will be overwritten by additional_config +my3.debug.svd_file=svd-file +my3.debug.additional_config=build.debug.config.test1 + +my4.name=My fourth Cool Board +my4.build.core=arduino:arduino +my4.build.variant=arduino:mkr1000 +my4.debug.toolchain.path=gcc-path +my4.debug.toolchain.prefix=gcc-prefix +my4.debug.server.openocd.path=openocd-path +my4.debug.server.openocd.scripts_dir=openocd-scripts-dir +my4.debug.server.openocd.script=single-script +my4.build.mcu=test2 +# this one will be overwritten by additional_config +my4.debug.svd_file=svd-file +my4.debug.additional_config=build.debug.config.{build.mcu} + +# menu options for the following boards +menu.dbg=Debugger +menu.cpu=CPU Speed + +# This does not support debug by default but only after selecting a menu option +my5.name=5th Board +my5.build.core=arduino:arduino +my5.build.variant=arduino:mkr1000 +my5.debug.toolchain.path=gcc-path +my5.debug.toolchain.prefix=gcc-prefix +my5.debug.server.openocd.path=openocd-path +my5.debug.server.openocd.scripts_dir=openocd-scripts-dir +my5.debug.server.openocd.script=single-script +my5.debug.executable= +my5.menu.dbg.off=Debug Disabled +my5.menu.dbg.on=Debug Enabled +my5.menu.dbg.on.debug.executable=YES +my5.menu.cpu.100m=100Mhz +my5.menu.cpu.150m=150Mhz + +# this one has debugger enabled by default +my6.name=5th Board +my6.build.core=arduino:arduino +my6.build.variant=arduino:mkr1000 +my6.debug.toolchain.path=gcc-path +my6.debug.toolchain.prefix=gcc-prefix +my6.debug.server.openocd.path=openocd-path +my6.debug.server.openocd.scripts_dir=openocd-scripts-dir +my6.debug.server.openocd.script=single-script +my6.debug.executable= +my6.menu.dbg.on=Debug Enabled +my6.menu.dbg.on.debug.executable=YES +my6.menu.dbg.off=Debug Disabled +my6.menu.cpu.100m=100Mhz +my6.menu.cpu.150m=150Mhz \ No newline at end of file diff --git a/internal/integrationtest/debug/testdata/hardware/my/samd/platform.txt b/internal/integrationtest/debug/testdata/hardware/my/samd/platform.txt new file mode 100644 index 00000000000..d2a61b9fd25 --- /dev/null +++ b/internal/integrationtest/debug/testdata/hardware/my/samd/platform.txt @@ -0,0 +1,5 @@ +build.debug.config.test1.svd_file=test1.svd +build.debug.config.test1.cortex-debug.custom.test1=true + +build.debug.config.test2.svd_file=test2.svd +build.debug.config.test2.cortex-debug.custom.test2=true diff --git a/internal/integrationtest/http_server.go b/internal/integrationtest/http_server.go index c5f06e9557a..dc6fd98e099 100644 --- a/internal/integrationtest/http_server.go +++ b/internal/integrationtest/http_server.go @@ -27,6 +27,7 @@ import ( // HTTPServeFile spawn an http server that serve a single file. The server // is started on the given port. The URL to the file and a cleanup function are returned. func (env *Environment) HTTPServeFile(port uint16, path *paths.Path) *url.URL { + t := env.T() mux := http.NewServeMux() mux.HandleFunc("/"+path.Base(), func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, path.String()) @@ -36,7 +37,6 @@ func (env *Environment) HTTPServeFile(port uint16, path *paths.Path) *url.URL { Handler: mux, } - t := env.T() fileURL, err := url.Parse(fmt.Sprintf("http://127.0.0.1:%d/%s", port, path.Base())) require.NoError(t, err) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index f064f32e741..f900a416dad 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -16,6 +16,8 @@ package lib_test import ( + "crypto/sha256" + "encoding/hex" "encoding/json" "fmt" "io" @@ -55,24 +57,24 @@ func TestLibUpgradeCommand(t *testing.T) { // Test upgrade of installed library _, _, err = cli.Run("lib", "install", "Servo@1.1.6") require.NoError(t, err) - stdOut, _, err := cli.Run("lib", "list", "--format", "json") + stdOut, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Contains(t, stdOut, `[ { "library":{ "name":"Servo", "version": "1.1.6" } } ]`) + requirejson.Contains(t, stdOut, `{"installed_libraries": [ { "library":{ "name":"Servo", "version": "1.1.6" } } ]}`) _, _, err = cli.Run("lib", "upgrade", "Servo") require.NoError(t, err) - stdOut, _, err = cli.Run("lib", "list", "--format", "json") + stdOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdOut) - jsonOut.MustNotContain(`[ { "library":{ "name":"Servo", "version": "1.1.6" } } ]`) - servoVersion := jsonOut.Query(`.[].library | select(.name=="Servo") | .version`).String() + jsonOut.MustNotContain(`{"installed_libraries": [{"library":{ "name":"Servo", "version": "1.1.6" }}]}`) + servoVersion := jsonOut.Query(`.installed_libraries.[].library | select(.name=="Servo") | .version`).String() // Upgrade of already up-to-date library _, _, err = cli.Run("lib", "upgrade", "Servo") require.NoError(t, err) - stdOut, _, err = cli.Run("lib", "list", "--format", "json") + stdOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdOut, `.[].library | select(.name=="Servo") | .version`, servoVersion) + requirejson.Query(t, stdOut, `.installed_libraries.[].library | select(.name=="Servo") | .version`, servoVersion) } func TestLibCommandsUsingNameInsteadOfDirName(t *testing.T) { @@ -82,11 +84,11 @@ func TestLibCommandsUsingNameInsteadOfDirName(t *testing.T) { _, _, err := cli.Run("lib", "install", "Robot Motor") require.NoError(t, err) - jsonOut, _, err := cli.Run("lib", "examples", "Robot Motor", "--format", "json") + jsonOut, _, err := cli.Run("lib", "examples", "Robot Motor", "--json") require.NoError(t, err) requirejson.Len(t, jsonOut, 1, "Library 'Robot Motor' not matched in lib examples command.") - jsonOut, _, err = cli.Run("lib", "list", "Robot Motor", "--format", "json") + jsonOut, _, err = cli.Run("lib", "list", "Robot Motor", "--json") require.NoError(t, err) requirejson.Len(t, jsonOut, 1, "Library 'Robot Motor' not matched in lib list command.") } @@ -103,11 +105,11 @@ func TestLibInstallMultipleSameLibrary(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "install", "Arduino SigFox for MKRFox1200") require.NoError(t, err) - jsonOut, _, err := cli.Run("lib", "list", "--format", "json") + jsonOut, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) // Count how many libraries with the name "Arduino SigFox for MKRFox1200" are installed requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") // Check that 'lib upgrade' didn't create a double install @@ -118,11 +120,11 @@ func TestLibInstallMultipleSameLibrary(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "upgrade", "Arduino SigFox for MKRFox1200") require.NoError(t, err) - jsonOut, _, err = cli.Run("lib", "list", "--format", "json") + jsonOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) // Count how many libraries with the name "Arduino SigFox for MKRFox1200" are installed requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") } @@ -138,9 +140,9 @@ func TestDuplicateLibInstallDetection(t *testing.T) { otaLibPath := cli.SketchbookDir().Join("libraries", "ArduinoOTA") err = otaLibPath.CopyDirTo(otaLibPath.Parent().Join("CopyOfArduinoOTA")) require.NoError(t, err) - jsonOut, _, err := cli.Run("lib", "list", "--format", "json") + jsonOut, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, jsonOut, 2, "Duplicate library install is not detected by the CLI") + requirejson.Query(t, jsonOut, `.installed_libraries | length`, `2`, "Duplicate library install is not detected by the CLI") _, stdErr, err := cli.Run("lib", "install", "ArduinoOTA") require.Error(t, err) @@ -166,11 +168,11 @@ func TestDuplicateLibInstallFromGitDetection(t *testing.T) { _, _, err = cli.RunWithCustomEnv(cliEnv, "lib", "install", "--git-url", "https://github.com/arduino-libraries/SigFox#1.0.3") require.NoError(t, err) - jsonOut, _, err := cli.Run("lib", "list", "--format", "json") + jsonOut, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) // Count how many libraries with the name "Arduino SigFox for MKRFox1200" are installed requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") // Try to make a double install by upgrade @@ -178,10 +180,10 @@ func TestDuplicateLibInstallFromGitDetection(t *testing.T) { require.NoError(t, err) // Check if double install happened - jsonOut, _, err = cli.Run("lib", "list", "--format", "json") + jsonOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") // Try to make a double install by zip-installing @@ -203,10 +205,10 @@ func TestDuplicateLibInstallFromGitDetection(t *testing.T) { require.NoError(t, err) // Check if double install happened - jsonOut, _, err = cli.Run("lib", "list", "--format", "json") + jsonOut, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) requirejson.Parse(t, jsonOut). - Query(`[.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). + Query(`[.installed_libraries.[].library.name | select(. == "Arduino SigFox for MKRFox1200")]`). LengthMustEqualTo(1, "Found multiple installations of Arduino SigFox for MKRFox1200'") } @@ -242,7 +244,7 @@ func TestLibDepsOutput(t *testing.T) { require.Regexp(t, `^✕ MKRWAN \d+\.\d+\.\d+ must be installed\.$`, lines[5]) require.Regexp(t, `^✕ WiFi101 \d+\.\d+\.\d+ must be installed\.$`, lines[6]) - stdOut, _, err = cli.Run("lib", "deps", "Arduino_ConnectionHandler@0.6.6", "--format", "json") + stdOut, _, err = cli.Run("lib", "deps", "Arduino_ConnectionHandler@0.6.6", "--json") require.NoError(t, err) var jsonDeps struct { @@ -284,7 +286,7 @@ func TestUpgradeLibraryWithDependencies(t *testing.T) { // Install library _, _, err = cli.Run("lib", "install", "Arduino_ConnectionHandler@0.3.3") require.NoError(t, err) - stdOut, _, err := cli.Run("lib", "deps", "Arduino_ConnectionHandler@0.3.3", "--format", "json") + stdOut, _, err := cli.Run("lib", "deps", "Arduino_ConnectionHandler@0.3.3", "--json") require.NoError(t, err) var jsonDeps struct { @@ -308,7 +310,7 @@ func TestUpgradeLibraryWithDependencies(t *testing.T) { // Test lib upgrade also install new dependencies of already installed library _, _, err = cli.Run("lib", "upgrade", "Arduino_ConnectionHandler") require.NoError(t, err) - stdOut, _, err = cli.Run("lib", "deps", "Arduino_ConnectionHandler", "--format", "json") + stdOut, _, err = cli.Run("lib", "deps", "Arduino_ConnectionHandler", "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdOut) @@ -329,10 +331,10 @@ func TestList(t *testing.T) { require.NoError(t, err) require.Empty(t, stderr) require.Contains(t, string(stdout), "No libraries installed.") - stdout, stderr, err = cli.Run("lib", "list", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) // Install something we can list at a version older than latest _, _, err = cli.Run("lib", "install", "ArduinoJson@6.11.0") @@ -355,23 +357,23 @@ func TestList(t *testing.T) { require.Contains(t, toks[4], "An efficient and elegant JSON library...") // Look at the JSON output - stdout, stderr, err = cli.Run("lib", "list", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) // be sure data contains the available version - requirejson.Query(t, stdout, `.[0] | .release | .version != ""`, "true") + requirejson.Query(t, stdout, `.installed_libraries.[0] | .release | .version != ""`, "true") // Install something we can list without provides_includes field given in library.properties _, _, err = cli.Run("lib", "install", "Arduino_APDS9960@1.0.3") require.NoError(t, err) // Look at the JSON output - stdout, stderr, err = cli.Run("lib", "list", "Arduino_APDS9960", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "Arduino_APDS9960", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) // be sure data contains the correct provides_includes field - requirejson.Query(t, stdout, ".[0] | .library | .provides_includes | .[0]", `"Arduino_APDS9960.h"`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .provides_includes | .[0]", `"Arduino_APDS9960.h"`) } func TestListExitCode(t *testing.T) { @@ -448,17 +450,17 @@ func TestListWithFqbn(t *testing.T) { require.Equal(t, "ArduinoJson", toks[0]) // Look at the JSON output - stdout, stderr, err = cli.Run("lib", "list", "-b", "arduino:avr:uno", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "-b", "arduino:avr:uno", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 6) + requirejson.Query(t, stdout, `.installed_libraries | length`, `6`) // Verifies library is compatible - requirejson.Query(t, stdout, `sort_by(.library | .name) | .[0] | .library | .name`, `"ArduinoJson"`) - requirejson.Query(t, stdout, `sort_by(.library | .name) | .[0] | .library | .compatible_with | ."arduino:avr:uno"`, `true`) + requirejson.Query(t, stdout, `.installed_libraries | sort_by(.library | .name) | .[0] | .library | .name`, `"ArduinoJson"`) + requirejson.Query(t, stdout, `.installed_libraries | sort_by(.library | .name) | .[0] | .library | .compatible_with | ."arduino:avr:uno"`, `true`) // Verifies bundled libs are shown if -b flag is used - requirejson.Parse(t, stdout).Query(`.[] | .library | select(.container_platform=="arduino:avr@1.8.6")`).MustNotBeEmpty() + requirejson.Parse(t, stdout).Query(`.installed_libraries.[] | .library | select(.container_platform=="arduino:avr@1.8.6")`).MustNotBeEmpty() } func TestListProvidesIncludesFallback(t *testing.T) { @@ -477,13 +479,13 @@ func TestListProvidesIncludesFallback(t *testing.T) { require.NoError(t, err) // List all libraries, even the ones installed with the above core - stdout, stderr, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:avr:uno", "--format", "json") + stdout, stderr, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:avr:uno", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 6) + requirejson.Query(t, stdout, `.installed_libraries | length`, `6`) - requirejson.Query(t, stdout, "[.[] | .library | { (.name): .provides_includes }] | add", + requirejson.Query(t, stdout, "[.installed_libraries.[] | .library | { (.name): .provides_includes }] | add", `{ "SPI": [ "SPI.h" @@ -546,9 +548,9 @@ func TestInstall(t *testing.T) { // https://github.com/arduino/arduino-cli/issues/1727 _, _, err = cli.Run("lib", "install", "ILI9341_t3@1.0") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Parse(t, stdout).Query(`.[] | select(.library.name == "ILI9341_t3") | .library.version`).MustEqual(`"1.0"`) + requirejson.Parse(t, stdout).Query(`.installed_libraries.[] | select(.library.name == "ILI9341_t3") | .library.version`).MustEqual(`"1.0"`) _, _, err = cli.Run("lib", "install", "ILI9341_t3@1") require.NoError(t, err) _, _, err = cli.Run("lib", "install", "ILI9341_t3@1.0.0") @@ -563,18 +565,18 @@ func TestInstallLibraryWithDependencies(t *testing.T) { require.NoError(t, err) // Verifies libraries are not installed - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) // Install library _, _, err = cli.Run("lib", "install", "MD_Parola@3.5.5") require.NoError(t, err) // Verifies library's dependencies are correctly installed - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `[ .[] | .library | .name ] | sort`, `["MD_MAX72XX","MD_Parola"]`) + requirejson.Query(t, stdout, `[.installed_libraries.[] | .library | .name ] | sort`, `["MD_MAX72XX","MD_Parola"]`) // Try upgrading with --no-overwrite (should fail) and without --no-overwrite (should succeed) _, _, err = cli.Run("lib", "install", "MD_Parola@3.6.1", "--no-overwrite") @@ -589,8 +591,10 @@ func TestInstallLibraryWithDependencies(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "install", "SD@1.2.3") require.NoError(t, err) - _, _, err = cli.Run("lib", "install", "Arduino_Builtin", "--no-overwrite") - require.Error(t, err) + // This time it should accept the installation with the currently installed SD 1.2.3 + out, _, err := cli.Run("lib", "install", "Arduino_Builtin", "--no-overwrite") + require.NoError(t, err) + require.Contains(t, string(out), "Already installed SD@1.2.3") } func TestInstallNoDeps(t *testing.T) { @@ -601,18 +605,18 @@ func TestInstallNoDeps(t *testing.T) { require.NoError(t, err) // Verifies libraries are not installed - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) // Install library skipping dependencies installation _, _, err = cli.Run("lib", "install", "MD_Parola@3.5.5", "--no-deps") require.NoError(t, err) // Verifies library's dependencies are not installed - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Query(t, stdout, `.[] | .library | .name`, `"MD_Parola"`) + requirejson.Query(t, stdout, `.installed_libraries.[] | .library | .name`, `"MD_Parola"`) } func TestInstallWithGitUrl(t *testing.T) { @@ -657,27 +661,66 @@ func TestInstallWithGitUrlFragmentAsBranch(t *testing.T) { _, _, err := cli.RunWithCustomEnv(envVar, "config", "init", "--dest-dir", ".") require.NoError(t, err) - libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101") - // Verifies library is not already installed - require.NoDirExists(t, libInstallDir.String()) + t.Run("InvalidRef", func(t *testing.T) { + // Test that a bad ref fails + _, _, err = cli.Run("lib", "install", "--git-url", "https://github.com/arduino-libraries/WiFi101.git#x-ref-does-not-exist", "--config-file", "arduino-cli.yaml") + require.Error(t, err) + }) - gitUrl := "https://github.com/arduino-libraries/WiFi101.git" + t.Run("RefPointingToATag", func(t *testing.T) { + gitUrl := "https://github.com/arduino-libraries/WiFi101.git" + libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101").String() - // Test that a bad ref fails - _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#x-ref-does-not-exist", "--config-file", "arduino-cli.yaml") - require.Error(t, err) + // Verifies library is not already installed + require.NoDirExists(t, libInstallDir) - // Verifies library is installed in expected path - _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#0.16.0", "--config-file", "arduino-cli.yaml") - require.NoError(t, err) - require.DirExists(t, libInstallDir.String()) + // Verifies library is installed in expected path + _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#0.16.0", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + require.DirExists(t, libInstallDir) - // Reinstall library at an existing ref - _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#master", "--config-file", "arduino-cli.yaml") - require.NoError(t, err) + // Reinstall library at an existing ref + _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#master", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) - // Verifies library remains installed - require.DirExists(t, libInstallDir.String()) + // Verifies library remains installed + require.DirExists(t, libInstallDir) + }) + + t.Run("RefPointingToBranch", func(t *testing.T) { + libInstallDir := cli.SketchbookDir().Join("libraries", "ArduinoCloud") + t.Cleanup(func() { libInstallDir.RemoveAll() }) + + // Verify install with ref pointing to a branch + require.NoDirExists(t, libInstallDir.String()) + _, _, err = cli.Run("lib", "install", "--git-url", "https://github.com/arduino-libraries/ArduinoCloud.git#revert-2-typos", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + require.DirExists(t, libInstallDir.String()) + + // Verify that the correct branch is checked out + // https://github.com/arduino-libraries/ArduinoCloud/commit/d098d4647967b3aeb4520e7baf279e4225254dd2 + fileToTest, err := libInstallDir.Join("src", "ArduinoCloudThingBase.h").ReadFile() + require.NoError(t, err) + require.Contains(t, string(fileToTest), `#define LENGHT_M "meters"`) // nolint:misspell + }) + + t.Run("RefPointingToHash", func(t *testing.T) { + libInstallDir := cli.SketchbookDir().Join("libraries", "ArduinoCloud") + t.Cleanup(func() { libInstallDir.RemoveAll() }) + + // Verify install with ref pointing to a branch + require.NoDirExists(t, libInstallDir.String()) + _, _, err = cli.Run("lib", "install", "--git-url", "https://github.com/arduino-libraries/ArduinoCloud.git#fe1a1c5d1f8ea2cb27ece1a3b9344dc1eaed60b6", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + require.DirExists(t, libInstallDir.String()) + + // Verify that the correct branch is checked out + // https://github.com/arduino-libraries/ArduinoCloud/commit/fe1a1c5d1f8ea2cb27ece1a3b9344dc1eaed60b6 + fileToTest, err := libInstallDir.Join("examples", "ReadAndWrite", "ReadAndWrite.ino").ReadFile() + require.NoError(t, err) + chksum := sha256.Sum256(fileToTest) + require.Equal(t, hex.EncodeToString(chksum[:]), `f71889cd6da3b91755c7d1b8ec76b7ee6e2824d8a417c043d117ffdf1546f896`) + }) } func TestUpdateIndex(t *testing.T) { @@ -710,9 +753,9 @@ func TestUninstallSpaces(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "uninstall", key) require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 0) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) } func TestLibOpsCaseInsensitive(t *testing.T) { @@ -738,9 +781,9 @@ func TestLibOpsCaseInsensitive(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "uninstall", key) require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 0) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) } func TestSearch(t *testing.T) { @@ -761,12 +804,12 @@ func TestSearch(t *testing.T) { expected := []string{"WiFi101", "WiFi101OTA", "Firebase Arduino based on WiFi101", "WiFi101_Generic"} require.Subset(t, libs, expected) - stdout, _, err = cli.Run("lib", "search", "--names", "--format", "json") + stdout, _, err = cli.Run("lib", "search", "--names", "--json") require.NoError(t, err) requirejson.Query(t, stdout, ".libraries | length", fmt.Sprint(len(libs))) runSearch := func(args string, expectedLibs []string) { - stdout, _, err = cli.Run("lib", "search", "--names", "--format", "json", args) + stdout, _, err = cli.Run("lib", "search", "--names", "--json", args) require.NoError(t, err) libraries := requirejson.Parse(t, stdout).Query("[ .libraries | .[] | .name ]").String() for _, l := range expectedLibs { @@ -788,6 +831,29 @@ func TestSearch(t *testing.T) { runSearch("json", []string{"ArduinoJson", "Arduino_JSON"}) } +func TestQualifiedSearch(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + runSearch := func(args string, expectedLibs []string) { + stdout, _, err := cli.Run("lib", "search", "--names", "--json", args) + require.NoError(t, err) + libraries := requirejson.Parse(t, stdout).Query("[ .libraries | .[] | .name ]").String() + for _, l := range expectedLibs { + require.Contains(t, libraries, l) + } + } + runSearch("name:MKRIoTCarrier", []string{"Arduino_MKRIoTCarrier"}) + runSearch("name=Arduino_MKRIoTCarrier", []string{"Arduino_MKRIoTCarrier"}) + // Embedded space in double-quoted string + runSearch("name=\"dht sensor library\"", []string{"DHT sensor library"}) + // No closing double-quote + runSearch("name=\"dht sensor library", []string{"DHT sensor library"}) + runSearch("name:\"sensor dht\"", []string{}) + // Literal double-quote + runSearch("sentence:\\\"", []string{"RTCtime"}) +} + func TestSearchParagraph(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() @@ -796,7 +862,7 @@ func TestSearchParagraph(t *testing.T) { // within the index file. _, _, err := cli.Run("lib", "update-index") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "search", "A simple and efficient JSON library", "--names", "--format", "json") + stdout, _, err := cli.Run("lib", "search", "A simple and efficient JSON library", "--names", "--json") require.NoError(t, err) requirejson.Contains(t, stdout, `{ "libraries": [ @@ -821,10 +887,10 @@ func TestLibListWithUpdatableFlag(t *testing.T) { require.Empty(t, stderr) require.Contains(t, string(stdout), "No libraries update is available.") // No library to update in json - stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) // Install outdated library _, _, err = cli.Run("lib", "install", "ArduinoJson@6.11.0") @@ -851,14 +917,14 @@ func TestLibListWithUpdatableFlag(t *testing.T) { require.Equal(t, "An efficient and elegant JSON library...", lines[1][4]) // Look at the JSON output - stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--format", "json") + stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--json") require.NoError(t, err) require.Empty(t, stderr) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) // be sure data contains the available version - requirejson.Query(t, stdout, `.[0] | .library | .version`, `"6.11.0"`) - requirejson.Query(t, stdout, `.[0] | .release | .version != "6.11.0"`, `true`) - requirejson.Query(t, stdout, `.[0] | .release | .version != ""`, `true`) + requirejson.Query(t, stdout, `.installed_libraries.[0] | .library | .version`, `"6.11.0"`) + requirejson.Query(t, stdout, `.installed_libraries.[0] | .release | .version != "6.11.0"`, `true`) + requirejson.Query(t, stdout, `.installed_libraries.[0] | .release | .version != ""`, `true`) } func TestInstallWithGitUrlFromCurrentDirectory(t *testing.T) { @@ -1016,10 +1082,10 @@ func TestLibExamples(t *testing.T) { _, _, err = cli.Run("lib", "install", "Arduino_JSON@0.1.0") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "Arduino_JSON", "--format", "json") + stdout, _, err := cli.Run("lib", "examples", "Arduino_JSON", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String() + requirejson.Query(t, stdout, `.examples | length`, `1`) + examples := requirejson.Parse(t, stdout).Query(".examples.[0] | .examples").String() examples = strings.ReplaceAll(examples, "\\\\", "\\") require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONArray").String()) require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONKitchenSink").String()) @@ -1036,10 +1102,10 @@ func TestLibExamplesWithPdeFile(t *testing.T) { _, _, err = cli.Run("lib", "install", "Encoder@1.4.1") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "Encoder", "--format", "json") + stdout, _, err := cli.Run("lib", "examples", "Encoder", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String() + requirejson.Query(t, stdout, `.examples | length`, `1`) + examples := requirejson.Parse(t, stdout).Query(".examples.[0] | .examples").String() examples = strings.ReplaceAll(examples, "\\\\", "\\") require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "Basic").String()) require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "NoInterrupts").String()) @@ -1057,12 +1123,12 @@ func TestLibExamplesWithCaseMismatch(t *testing.T) { _, _, err = cli.Run("lib", "install", "WiFiManager@2.0.3-alpha") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "WiFiManager", "--format", "json") + stdout, _, err := cli.Run("lib", "examples", "WiFiManager", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .examples | length", "14") + requirejson.Query(t, stdout, `.examples | length`, `1`) + requirejson.Query(t, stdout, ".examples.[0] | .examples | length", "14") - examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String() + examples := requirejson.Parse(t, stdout).Query(".examples.[0] | .examples").String() examples = strings.ReplaceAll(examples, "\\\\", "\\") examplesPath := cli.SketchbookDir().Join("libraries", "WiFiManager", "examples") // Verifies sketches with correct casing are listed @@ -1097,10 +1163,10 @@ func TestLibCommandsWithLibraryHavingInvalidVersion(t *testing.T) { require.NoError(t, err) // Verifies library is correctly returned - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .library | .version", `"0.16.1"`) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .version", `"0.16.1"`) // Changes the version of the currently installed library so that it's // invalid @@ -1108,20 +1174,20 @@ func TestLibCommandsWithLibraryHavingInvalidVersion(t *testing.T) { require.NoError(t, libPath.WriteFile([]byte("name=WiFi101\nversion=1.0001"))) // Verifies version is now empty - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .library | .version", "null") + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .version", "null") // Upgrade library _, _, err = cli.Run("lib", "upgrade", "WiFi101") require.NoError(t, err) // Verifies library has been updated - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) - requirejson.Query(t, stdout, ".[0] | .library | .version != \"\"", "true") + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .version != \"\"", "true") } func TestInstallZipLibWithMacosMetadata(t *testing.T) { @@ -1276,12 +1342,12 @@ func TestUpgradeDoesNotTryToUpgradeBundledCoreLibrariesInSketchbook(t *testing.T _, _, err = cli.Run("lib", "install", "USBHost") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--all", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--all", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 2) + requirejson.Query(t, stdout, `.installed_libraries | length`, `2`) // Verify both libraries have the same name - requirejson.Query(t, stdout, ".[0] | .library | .name", `"USBHost"`) - requirejson.Query(t, stdout, ".[1] | .library | .name", `"USBHost"`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .name", `"USBHost"`) + requirejson.Query(t, stdout, ".installed_libraries.[1] | .library | .name", `"USBHost"`) stdout, _, err = cli.Run("lib", "upgrade") require.NoError(t, err) @@ -1308,12 +1374,12 @@ func TestUpgradeDoesNotTryToUpgradeBundledCoreLibraries(t *testing.T) { _, _, err = cli.Run("lib", "install", "USBHost") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "list", "--all", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--all", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 2) + requirejson.Query(t, stdout, `.installed_libraries | length`, `2`) // Verify both libraries have the same name - requirejson.Query(t, stdout, ".[0] | .library | .name", `"USBHost"`) - requirejson.Query(t, stdout, ".[1] | .library | .name", `"USBHost"`) + requirejson.Query(t, stdout, ".installed_libraries.[0] | .library | .name", `"USBHost"`) + requirejson.Query(t, stdout, ".installed_libraries.[1] | .library | .name", `"USBHost"`) stdout, _, err = cli.Run("lib", "upgrade") require.NoError(t, err) @@ -1520,7 +1586,7 @@ func TestLibQueryParameters(t *testing.T) { require.Contains(t, string(stdout), `"url":"https://downloads.arduino.cc/libraries/github.com/arduino-libraries/USBHost-1.0.5.zip?query=upgrade"`) // Check query=depends when a library dependency is installed - stdout, _, err = cli.Run("lib", "deps", "MD_Parola@3.5.5", "--format", "json") + stdout, _, err = cli.Run("lib", "deps", "MD_Parola@3.5.5", "--json") require.NoError(t, err) // determine the version installed as dependency MDMAX72XXversion := strings.Trim(requirejson.Parse(t, stdout).Query(`.dependencies[0].version_required`).String(), `"`) @@ -1555,21 +1621,21 @@ func TestLibBundlesWhenLibWithTheSameNameIsInstalledGlobally(t *testing.T) { _, _, err := cli.Run("core", "install", "arduino:samd@1.8.13") require.NoError(t, err) { - stdout, _, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:samd:mkrzero", "USBHost", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:samd:mkrzero", "USBHost", "--json") require.NoError(t, err) j := requirejson.Parse(t, stdout) - j.Query(`.[0].library.name`).MustEqual(`"USBHost"`) - j.Query(`.[0].library.compatible_with."arduino:samd:mkrzero"`).MustEqual(`true`) + j.Query(`.installed_libraries.[0].library.name`).MustEqual(`"USBHost"`) + j.Query(`.installed_libraries.[0].library.compatible_with."arduino:samd:mkrzero"`).MustEqual(`true`) } _, _, err = cli.Run("lib", "install", "USBHost@1.0.5") require.NoError(t, err) { // Check that the architecture-specific library is still listed - stdout, _, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:samd:mkrzero", "USBHost", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--all", "--fqbn", "arduino:samd:mkrzero", "USBHost", "--json") require.NoError(t, err) j := requirejson.Parse(t, stdout) - j.Query(`.[0].library.name`).MustEqual(`"USBHost"`) - j.Query(`.[0].library.compatible_with."arduino:samd:mkrzero"`).MustEqual(`true`) + j.Query(`.installed_libraries.[0].library.name`).MustEqual(`"USBHost"`) + j.Query(`.installed_libraries.[0].library.compatible_with."arduino:samd:mkrzero"`).MustEqual(`true`) } // See: https://github.com/arduino/arduino-cli/issues/1656 @@ -1580,10 +1646,10 @@ func TestLibBundlesWhenLibWithTheSameNameIsInstalledGlobally(t *testing.T) { require.NoError(t, err) _, _, err = cli.Run("lib", "install", "ArduinoOTA@1.0.7") require.NoError(t, err) - stdout, _, err := cli.Run("lib", "examples", "--fqbn", "esp8266:esp8266:generic", "ArduinoOTA", "--format", "json") + stdout, _, err := cli.Run("lib", "examples", "--fqbn", "esp8266:esp8266:generic", "ArduinoOTA", "--json") require.NoError(t, err) - requirejson.Parse(t, stdout).Query(`.[].library.examples[0]`).MustContain(`"BasicOTA"`) - requirejson.Parse(t, stdout).Query(`.[].library.examples[1]`).MustContain(`"OTALeds"`) + requirejson.Parse(t, stdout).Query(`.examples.[].library.examples[0]`).MustContain(`"BasicOTA"`) + requirejson.Parse(t, stdout).Query(`.examples.[].library.examples[1]`).MustContain(`"OTALeds"`) } } @@ -1599,13 +1665,13 @@ func TestLibListDoesNotIncludeEmptyLibraries(t *testing.T) { require.NoError(t, emptyLib.MkdirAll()) // Check that the output of lib list and lib examples is empty - stdout, _, err := cli.Run("lib", "list", "--format", "json") + stdout, _, err := cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.installed_libraries | length`, `0`) - stdout, _, err = cli.Run("lib", "examples", "--format", "json") + stdout, _, err = cli.Run("lib", "examples", "--json") require.NoError(t, err) - requirejson.Empty(t, stdout) + requirejson.Query(t, stdout, `.examples | length`, `0`) // Create a library with a header libWithHeader := cli.SketchbookDir().Join("libraries", "libWithHeader") @@ -1615,13 +1681,13 @@ func TestLibListDoesNotIncludeEmptyLibraries(t *testing.T) { require.NoError(t, f.Close()) // Check that the output of lib list and lib examples contains the library - stdout, _, err = cli.Run("lib", "list", "--format", "json") + stdout, _, err = cli.Run("lib", "list", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.installed_libraries | length`, `1`) - stdout, _, err = cli.Run("lib", "examples", "--format", "json") + stdout, _, err = cli.Run("lib", "examples", "--json") require.NoError(t, err) - requirejson.Len(t, stdout, 1) + requirejson.Query(t, stdout, `.examples | length`, `1`) } func TestDependencyResolver(t *testing.T) { @@ -1630,9 +1696,6 @@ func TestDependencyResolver(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) defer env.CleanUp() - _, _, err := cli.Run("lib", "update-index") - require.NoError(t, err) - done := make(chan bool) go func() { _, _, err := cli.Run("lib", "install", "NTPClient_Generic") @@ -1642,7 +1705,54 @@ func TestDependencyResolver(t *testing.T) { select { case <-done: - case <-time.After(time.Second * 2): + case <-time.After(time.Second * 10): require.FailNow(t, "The install command didn't complete in the allocated time") } } + +func TestDependencyResolverNoOverwrite(t *testing.T) { + // https://github.com/arduino/arduino-cli/issues/1799 + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("lib", "install", "Bounce2@2.53.0") + require.NoError(t, err) + + out, _, err := cli.Run("lib", "deps", "EncoderTool@2.2.0", "--json") + require.NoError(t, err) + outjson := requirejson.Parse(t, out) + outjson.MustContain(`{ + "dependencies": [ + { + "name": "Bounce2", + "version_installed": "2.53" + }, + { + "name": "EncoderTool", + "version_required": "2.2.0" + } + ] + }`) + require.NotEqual(t, outjson.Query("dependencies[0].version_required").String(), `"2.53.0"`) + require.NotEqual(t, outjson.Query("dependencies[0].version_required").String(), `"2.53"`) + + out, _, err = cli.Run("lib", "deps", "EncoderTool@2.2.0", "--no-overwrite", "--json") + require.NoError(t, err) + outjson = requirejson.Parse(t, out) + outjson.MustContain(`{ + "dependencies": [ + { + "name": "Bounce2", + "version_required": "2.53", + "version_installed": "2.53" + }, + { + "name": "EncoderTool", + "version_required": "2.2.0" + } + ] + }`) + + _, _, err = cli.Run("lib", "install", "EncoderTool@2.2.0", "--no-overwrite") + require.NoError(t, err) +} diff --git a/internal/integrationtest/main/main_test.go b/internal/integrationtest/main/main_test.go index 7e039e62768..b702e07aecc 100644 --- a/internal/integrationtest/main/main_test.go +++ b/internal/integrationtest/main/main_test.go @@ -48,8 +48,8 @@ func TestVersion(t *testing.T) { require.Contains(t, string(stdout), "Commit:") require.Empty(t, string(stderr)) - // Checks if "version --format json" has a json as an output - stdout, _, err = cli.Run("version", "--format", "json") + // Checks if "version --json" has a json as an output + stdout, _, err = cli.Run("version", "--json") require.NoError(t, err) var jsonMap map[string]string err = json.Unmarshal(stdout, &jsonMap) diff --git a/internal/integrationtest/monitor/monitor_grpc_test.go b/internal/integrationtest/monitor/monitor_grpc_test.go new file mode 100644 index 00000000000..046774d3e82 --- /dev/null +++ b/internal/integrationtest/monitor/monitor_grpc_test.go @@ -0,0 +1,117 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package monitor_test + +import ( + "context" + "errors" + "fmt" + "io" + "regexp" + "testing" + "time" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +func TestMonitorGRPCClose(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2271 + + env, cli := integrationtest.CreateEnvForDaemon(t) + defer env.CleanUp() + + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + cli.InstallMockedSerialDiscovery(t) + cli.InstallMockedSerialMonitor(t) + + grpcInst := cli.Create() + require.NoError(t, grpcInst.Init("", "", func(ir *commands.InitResponse) { + fmt.Printf("INIT> %v\n", ir.GetMessage()) + })) + + // Run a one-shot board list + boardListResp, err := grpcInst.BoardList(time.Second) + require.NoError(t, err) + ports := boardListResp.GetPorts() + require.NotEmpty(t, ports) + fmt.Printf("Got boardlist response with %d ports\n", len(ports)) + + // Open mocked serial-monitor and close it client-side + tmpFileMatcher := regexp.MustCompile("Tmpfile: (.*)\n") + { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*3) + mon, err := grpcInst.Monitor(ctx, ports[0].GetPort()) + var tmpFile *paths.Path + for { + monResp, err := mon.Recv() + if err != nil { + fmt.Println("MON>", err) + break + } + fmt.Printf("MON> %v\n", monResp) + if rx := monResp.GetRxData(); rx != nil { + if matches := tmpFileMatcher.FindAllStringSubmatch(string(rx), -1); len(matches) > 0 { + fmt.Println("Found tmpFile", matches[0][1]) + tmpFile = paths.New(matches[0][1]) + } + } + } + require.NotNil(t, tmpFile) + // The port is close client-side, it may be still open server-side + require.True(t, tmpFile.Exist()) + cancel() + require.NoError(t, err) + } + + // Now close the monitor using MonitorRequest_Close + { + // Keep a timeout to allow the test to exit in any case + ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) + mon, err := grpcInst.Monitor(ctx, ports[0].GetPort()) + var tmpFile *paths.Path + for { + monResp, err := mon.Recv() + if errors.Is(err, io.EOF) { + fmt.Println("MON>", err) + break + } + + require.NoError(t, err) + fmt.Printf("MON> %v\n", monResp) + if rx := monResp.GetRxData(); rx != nil { + if matches := tmpFileMatcher.FindAllStringSubmatch(string(rx), -1); len(matches) > 0 { + fmt.Println("Found tmpFile", matches[0][1]) + tmpFile = paths.New(matches[0][1]) + go func() { + time.Sleep(time.Second) + fmt.Println("<MON Sent close command") + mon.Send(&commands.MonitorRequest{Message: &commands.MonitorRequest_Close{Close: true}}) + }() + } + } + } + require.NotNil(t, tmpFile) + // The port is closed serverd-side, it must be already closed once the client has received the EOF + require.False(t, tmpFile.Exist()) + cancel() + require.NoError(t, err) + } +} diff --git a/internal/integrationtest/monitor/monitor_test.go b/internal/integrationtest/monitor/monitor_test.go new file mode 100644 index 00000000000..f8a708e09d1 --- /dev/null +++ b/internal/integrationtest/monitor/monitor_test.go @@ -0,0 +1,417 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package monitor_test + +import ( + "bytes" + "io" + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" + "github.com/stretchr/testify/require" +) + +// returns a reader that tells the mocked monitor to exit +func quitMonitor() io.Reader { + // tells mocked monitor to exit + return bytes.NewBufferString("QUIT\n") +} + +func TestMonitorConfigFlags(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Install AVR platform (this is required to enable the 'serial' monitor...) + // TODO: maybe this is worth opening an issue? + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + // Install mocked discovery and monitor for testing + require.NoError(t, err) + cli.InstallMockedSerialDiscovery(t) + cli.InstallMockedSerialMonitor(t) + + t.Run("NoArgs", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", "--raw") + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARG") + require.Contains(t, string(stdout), "Configuration baudrate = 9600") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("BaudConfig", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", "-c", "baudrate=115200", "--raw") + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARG") + require.Contains(t, string(stdout), "Configuration baudrate = 115200") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("BaudAndParitfyConfig", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", + "-c", "baudrate=115200", "-c", "parity=even", "--raw") + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARG") + require.Contains(t, string(stdout), "Configuration baudrate = 115200") + require.Contains(t, string(stdout), "Configuration parity = even") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("InvalidConfigKey", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", + "-c", "baud=115200", "-c", "parity=even", "--raw") + require.Error(t, err) + require.Contains(t, string(stderr), "invalid port configuration: baud=115200") + }) + + t.Run("InvalidConfigValue", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARG", + "-c", "parity=9600", "--raw") + require.Error(t, err) + require.Contains(t, string(stderr), "invalid port configuration value for parity: 9600") + }) +} + +func TestMonitorCommandFlagsAndDefaultPortFQBNSelection(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Install AVR platform + _, _, err := cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + // Patch the Yun board to require special RTS/DTR serial configuration + f, err := cli.DataDir().Join("packages", "arduino", "hardware", "avr", "1.8.6", "boards.txt").Append() + require.NoError(t, err) + _, err = f.WriteString(` +uno.serial.disableRTS=true +uno.serial.disableDTR=false +yun.serial.disableRTS=true +yun.serial.disableDTR=true +`) + require.NoError(t, err) + require.NoError(t, f.Close()) + + // Install mocked discovery and monitor for testing + cli.InstallMockedSerialDiscovery(t) + cli.InstallMockedSerialMonitor(t) + + // Create test sketches + getSketchPath := func(sketch string) string { + p, err := paths.New("testdata", sketch).Abs() + require.NoError(t, err) + require.True(t, p.IsDir()) + return p.String() + } + sketch := getSketchPath("SketchWithNoProfiles") + sketchWithPort := getSketchPath("SketchWithDefaultPort") + sketchWithFQBN := getSketchPath("SketchWithDefaultFQBN") + sketchWithPortAndFQBN := getSketchPath("SketchWithDefaultPortAndFQBN") + sketchWithPortAndConfig := getSketchPath("SketchWithDefaultPortAndConfig") + sketchWithPortAndConfigAndProfile := getSketchPath("SketchWithDefaultPortAndConfigAndProfile") + + t.Run("NoFlags", func(t *testing.T) { + t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketch) + require.Error(t, err) + require.Contains(t, string(stderr), "No monitor available for the port protocol default") + }) + + t.Run("WithDefaultPort", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPort) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultFQBN", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithFQBN) + require.Error(t, err) + require.Contains(t, string(stderr), "No monitor available for the port protocol default") + }) + + t.Run("WithDefaultPortAndQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = off") + }) + + t.Run("FQBNFromSpecificProfile", func(t *testing.T) { + // The only way to assert we're picking up the fqbn specified from the profile is to provide a wrong value + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", "--profile", "profile1", sketchWithPortAndFQBN) + require.Error(t, err) + require.Contains(t, string(stderr), "not an FQBN: broken_fqbn") + }) + + t.Run("WithDefaultPortAndConfig", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPortAndConfig) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 57600") + require.Contains(t, string(stdout), "Configuration bits = 9") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + + t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPortAndConfigAndProfile) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 57600") + require.Contains(t, string(stdout), "Configuration bits = 9") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + }) + + t.Run("WithPortFlag", func(t *testing.T) { + t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketch) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultPort", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPort) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultFQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = off") + }) + + t.Run("WithDefaultPortAndQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = off") + }) + + t.Run("FQBNFromSpecificProfile", func(t *testing.T) { + // The only way to assert we're picking up the fqbn specified from the profile is to provide a wrong value + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", "--profile", "profile1", sketchWithPortAndFQBN) + require.Error(t, err) + require.Contains(t, string(stderr), "not an FQBN: broken_fqbn") + }) + + t.Run("WithDefaultPortAndConfig", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPortAndConfig) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 57600") + require.Contains(t, string(stdout), "Configuration bits = 9") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + + t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPortAndConfigAndProfile) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = on") + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 57600") + require.Contains(t, string(stdout), "Configuration bits = 9") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + }) + + t.Run("WithFQBNFlag", func(t *testing.T) { + t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketch) + require.Error(t, err) + require.Contains(t, string(stderr), "No monitor available for the port protocol default") + }) + + t.Run("WithDefaultPort", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketchWithPort) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultFQBN", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketchWithFQBN) + require.Error(t, err) + require.Contains(t, string(stderr), "No monitor available for the port protocol default") + }) + + t.Run("WithDefaultPortAndQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("IgnoreProfile", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF") + require.Contains(t, string(stdout), "Configuration rts = on") // This is taken from profile-downloaded platform that is not patched for test + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultPortAndConfig", func(t *testing.T) { + _, stderr, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndConfig) + require.Error(t, err) + require.Contains(t, string(stderr), "Profile 'profile1' not found") + require.Contains(t, string(stderr), "Unknown FQBN: unknown package arduino") + }) + + t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", "--profile", "uno", sketchWithPortAndConfigAndProfile) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyPROF") + require.Contains(t, string(stdout), "Configuration rts = on") // This is taken from profile-downloaded platform that is not patched for test + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 19200") + require.Contains(t, string(stdout), "Configuration bits = 8") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + }) + + t.Run("WithPortAndFQBNFlags", func(t *testing.T) { + t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketch) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultPort", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPort) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultFQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultPortAndQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + + t.Run("WithDefaultPortAndConfig", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndConfig) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 57600") + require.Contains(t, string(stdout), "Configuration bits = 9") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + + t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndConfigAndProfile) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = off") + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 57600") + require.Contains(t, string(stdout), "Configuration bits = 9") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + + t.Run("IgnoreProfile", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndFQBN) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS") + require.Contains(t, string(stdout), "Configuration rts = on") // This is taken from profile-downloaded platform that is not patched for test + require.Contains(t, string(stdout), "Configuration dtr = on") + }) + }) + + t.Run("WithProfileFlags", func(t *testing.T) { + t.Run("NoOtherArgs", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-m", "uno", "--raw", sketchWithPortAndConfigAndProfile) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyPROF") + require.Contains(t, string(stdout), "Configuration rts = on") // This is taken from profile-installed AVR core (not patched by this test) + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 19200") + require.Contains(t, string(stdout), "Configuration bits = 8") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + + t.Run("WithFQBN", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:yun", "-m", "uno", "--raw", sketchWithPortAndConfigAndProfile) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyPROF") + require.Contains(t, string(stdout), "Configuration rts = on") // This is taken from profile-installed AVR core (not patched by this test) + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 19200") + require.Contains(t, string(stdout), "Configuration bits = 8") + require.Contains(t, string(stdout), "Configuration parity = none") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + + t.Run("WithConfigFlag", func(t *testing.T) { + stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-c", "odd", "-m", "uno", "--raw", sketchWithPortAndConfigAndProfile) + require.NoError(t, err) + require.Contains(t, string(stdout), "Opened port: /dev/ttyPROF") + require.Contains(t, string(stdout), "Configuration rts = on") // This is taken from profile-installed AVR core (not patched by this test) + require.Contains(t, string(stdout), "Configuration dtr = on") + require.Contains(t, string(stdout), "Configuration baudrate = 19200") + require.Contains(t, string(stdout), "Configuration bits = 8") + require.Contains(t, string(stdout), "Configuration parity = odd") + require.Contains(t, string(stdout), "Configuration stop_bits = 1") + }) + }) +} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/SketchWithDefaultFQBN.ino b/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/SketchWithDefaultFQBN.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/SketchWithDefaultFQBN.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/sketch.yaml b/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/sketch.yaml new file mode 100644 index 00000000000..19e9541979f --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultFQBN/sketch.yaml @@ -0,0 +1 @@ +default_fqbn: arduino:avr:yun diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/SketchWithDefaultPort.ino b/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/SketchWithDefaultPort.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/SketchWithDefaultPort.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/sketch.yaml b/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/sketch.yaml new file mode 100644 index 00000000000..5670096124c --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPort/sketch.yaml @@ -0,0 +1 @@ +default_port: /dev/ttyDEF diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfig/SketchWithDefaultPortAndConfig.ino b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfig/SketchWithDefaultPortAndConfig.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfig/SketchWithDefaultPortAndConfig.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfig/sketch.yaml b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfig/sketch.yaml new file mode 100644 index 00000000000..4bf8973a9ed --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfig/sketch.yaml @@ -0,0 +1,4 @@ +default_port: /dev/ttyDEF +default_port_config: + baudrate: 57600 + bits: 9 diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfigAndProfile/SketchWithDefaultPortAndConfigAndProfile.ino b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfigAndProfile/SketchWithDefaultPortAndConfigAndProfile.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfigAndProfile/SketchWithDefaultPortAndConfigAndProfile.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfigAndProfile/sketch.yaml b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfigAndProfile/sketch.yaml new file mode 100644 index 00000000000..106efce780c --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndConfigAndProfile/sketch.yaml @@ -0,0 +1,13 @@ +profiles: + uno: + fqbn: arduino:avr:uno + platforms: + - platform: arduino:avr (1.8.6) + port: /dev/ttyPROF + port_config: + baudrate: 19200 + +default_port: /dev/ttyDEF +default_port_config: + baudrate: 57600 + bits: 9 diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/SketchWithDefaultPortAndFQBN.ino b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/SketchWithDefaultPortAndFQBN.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/SketchWithDefaultPortAndFQBN.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/sketch.yaml b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/sketch.yaml new file mode 100644 index 00000000000..f8cc65153ce --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithDefaultPortAndFQBN/sketch.yaml @@ -0,0 +1,8 @@ +profiles: + profile1: + fqbn: "broken_fqbn" + platforms: + - platform: arduino:avr (1.8.6) + +default_port: /dev/ttyDEF +default_fqbn: arduino:avr:yun diff --git a/internal/integrationtest/monitor/testdata/SketchWithNoProfiles/SketchWithNoProfiles.ino b/internal/integrationtest/monitor/testdata/SketchWithNoProfiles/SketchWithNoProfiles.ino new file mode 100644 index 00000000000..5054c040393 --- /dev/null +++ b/internal/integrationtest/monitor/testdata/SketchWithNoProfiles/SketchWithNoProfiles.ino @@ -0,0 +1,3 @@ + +void setup() {} +void loop() {} diff --git a/internal/integrationtest/profiles/profiles_test.go b/internal/integrationtest/profiles/profiles_test.go index ca26b75b4b3..aafd914db2c 100644 --- a/internal/integrationtest/profiles/profiles_test.go +++ b/internal/integrationtest/profiles/profiles_test.go @@ -89,12 +89,12 @@ func TestCompileWithDefaultProfile(t *testing.T) { { // no default profile -> error missing FQBN - _, _, err := cli.Run("compile", sketchWithoutDefProfilePath.String(), "--format", "json") + _, _, err := cli.Run("compile", sketchWithoutDefProfilePath.String(), "--json") require.Error(t, err) } { // specified fbqn -> compile with specified FQBN and use global installation - stdout, _, err := cli.Run("compile", "-b", "arduino:avr:nano", sketchWithoutDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "-b", "arduino:avr:nano", sketchWithoutDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.3"}`) @@ -102,7 +102,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // specified profile -> use the specified profile - stdout, _, err := cli.Run("compile", "--profile", "avr1", sketchWithoutDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--profile", "avr1", sketchWithoutDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.4"}`) @@ -110,7 +110,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // specified profile and fqbn -> use the specified profile and override fqbn - stdout, _, err := cli.Run("compile", "--profile", "avr1", "-b", "arduino:avr:nano", sketchWithoutDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--profile", "avr1", "-b", "arduino:avr:nano", sketchWithoutDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.4"}`) @@ -119,7 +119,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { { // default profile -> use default profile - stdout, _, err := cli.Run("compile", sketchWithDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", sketchWithDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.5"}`) @@ -127,7 +127,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // default profile, specified fbqn -> use default profile, override fqbn - stdout, _, err := cli.Run("compile", "-b", "arduino:avr:nano", sketchWithDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "-b", "arduino:avr:nano", sketchWithDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.5"}`) @@ -135,7 +135,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // default profile, specified different profile -> use the specified profile - stdout, _, err := cli.Run("compile", "--profile", "avr1", sketchWithDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--profile", "avr1", sketchWithDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.4"}`) @@ -143,7 +143,7 @@ func TestCompileWithDefaultProfile(t *testing.T) { } { // default profile, specified different profile and fqbn -> use the specified profile and override fqbn - stdout, _, err := cli.Run("compile", "--profile", "avr1", "-b", "arduino:avr:nano", sketchWithDefProfilePath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--profile", "avr1", "-b", "arduino:avr:nano", sketchWithDefProfilePath.String(), "--json") require.NoError(t, err) jsonOut := requirejson.Parse(t, stdout) jsonOut.Query(".builder_result.build_platform").MustContain(`{"id":"arduino:avr", "version":"1.8.4"}`) diff --git a/internal/integrationtest/sketch/sketch_test.go b/internal/integrationtest/sketch/sketch_test.go index aaf599dc305..d454a0221fd 100644 --- a/internal/integrationtest/sketch/sketch_test.go +++ b/internal/integrationtest/sketch/sketch_test.go @@ -350,9 +350,9 @@ func TestSketchArchiveWithMultipleMainFiles(t *testing.T) { cli.SetWorkingDir(sketchDir) _, stderr, err := cli.Run("sketch", "archive") require.Error(t, err) - require.Contains(t, string(stderr), "Sketches with .pde extension are deprecated, please rename the following files to .ino") + require.NotContains(t, string(stderr), "Sketches with .pde extension are deprecated, please rename the following files to .ino") require.Contains(t, string(stderr), relPath.String()) - require.Contains(t, string(stderr), "Error archiving: Can't open sketch: multiple main sketch files found") + require.Contains(t, string(stderr), "Can't open sketch: multiple main sketch files found") } func TestSketchArchiveCaseMismatchFails(t *testing.T) { @@ -370,7 +370,7 @@ func TestSketchArchiveCaseMismatchFails(t *testing.T) { _, stderr, err := cli.Run("sketch", "archive", sketchPath.String()) require.Error(t, err) - require.Contains(t, string(stderr), "Error archiving: Can't open sketch:") + require.Contains(t, string(stderr), "Can't open sketch:") } func TestSketchNewDotArgOverwrite(t *testing.T) { diff --git a/internal/integrationtest/testdata/sketch_with_profile/sketch.yaml b/internal/integrationtest/testdata/sketch_with_profile/sketch.yaml index ed40ce874f3..bc177c5023a 100644 --- a/internal/integrationtest/testdata/sketch_with_profile/sketch.yaml +++ b/internal/integrationtest/testdata/sketch_with_profile/sketch.yaml @@ -6,7 +6,16 @@ profiles: avr2: fqbn: arduino:avr:uno + programmer: atmel_ice platforms: - platform: arduino:avr (1.8.5) libraries: - Arduino_JSON (0.1.0) + + samd: + fqbn: arduino:samd:mkr1000 + programmer: atmel_ice + platforms: + - platform: arduino:samd (1.8.13) + libraries: + - Arduino_JSON (0.1.0) diff --git a/internal/integrationtest/testdata/test_index.json b/internal/integrationtest/testdata/test_index.json index 70de2ac0fee..95d38d202d4 100644 --- a/internal/integrationtest/testdata/test_index.json +++ b/internal/integrationtest/testdata/test_index.json @@ -236,6 +236,174 @@ ] } ] + }, + { + "name": "foo_vendor", + "maintainer": "Foo Developer", + "websiteURL": "http://example.com", + "email": "test@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "Foo Boards", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "https://github.com/damellis/attiny/archive/702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "archiveFileName": "702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "checksum": "SHA-256:bfffa4a700e42ae993895f5eea22bc369ba5ac3ea36eca18ac5f72a05bb60ab5", + "size": "5005", + "boards": [], + "toolsDependencies": [ + { + "packager": "foo_vendor", + "name": "some_tool", + "version": "1.0.0" + } + ] + }, + { + "name": "Foo Boards", + "architecture": "avr", + "version": "1.0.1", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "https://github.com/damellis/attiny/archive/76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "archiveFileName": "76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "checksum": "SHA-256:49a4dfc3796caf2533050b0b962ae0affb2471b8ded1283936d7b712cc1fdff1", + "size": "5719", + "boards": [], + "toolsDependencies": [ + { + "packager": "foo_vendor", + "name": "some_tool", + "version": "1.0.0" + } + ] + }, + { + "name": "Foo Boards", + "architecture": "avr", + "version": "1.0.2", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "https://github.com/damellis/attiny/archive/76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "archiveFileName": "76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "checksum": "SHA-256:49a4dfc3796caf2533050b0b962ae0affb2471b8ded1283936d7b712cc1fdff1", + "size": "5719", + "boards": [], + "toolsDependencies": [ + { + "packager": "foo_vendor", + "name": "incompatible_tool", + "version": "2.0.0" + } + ] + } + ], + "tools": [ + { + "name": "some_tool", + "version": "1.0.0", + "systems": [ + { + "size": "219631", + "checksum": "SHA-256:2a8e68c5d803aa6f902ef219f177ec3a4c28275d85cbe272962ad2cd374f50d1", + "host": "arm-linux-gnueabihf", + "archiveFileName": "avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-armhf-pc-linux-gnu.tar.bz2" + }, + { + "size": "229852", + "checksum": "SHA-256:6cf948f751acfe7b96684537f2291c766ec8b54b4f7dc95539864821456fa9fc", + "host": "aarch64-linux-gnu", + "archiveFileName": "avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-aarch64-pc-linux-gnu.tar.bz2" + }, + { + "size": "279045", + "checksum": "SHA-256:120cc9edaae699e7e9ac50b1b8eb0e7d51fdfa555bac54233c2511e6ee5418c9", + "host": "x86_64-apple-darwin12", + "archiveFileName": "avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-apple-darwin12.tar.bz2" + }, + { + "size": "254271", + "checksum": "SHA-256:accdfb920af2aabf4f7461d2ac73c0751760f525216dc4e7657427a78c60d13d", + "host": "x86_64-linux-gnu", + "archiveFileName": "avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "244550", + "checksum": "SHA-256:5c8cc6c17db9300e1451fe41cd7178b0442b4490ee6fdbc0aed9811aef96c05f", + "host": "i686-linux-gnu", + "archiveFileName": "avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "328460", + "checksum": "SHA-256:e99188873c7c5ad8f8f906f068c33600e758b2e36cce3adbd518a21bd266749d", + "host": "i686-mingw32", + "archiveFileName": "avrdude-6.3.0-arduino17-i686-w64-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino17-i686-w64-mingw32.zip" + } + ] + }, + { + "name": "incompatible_tool", + "version": "2.0.0", + "systems": [] + } + ] + }, + { + "name": "incompatible_vendor", + "maintainer": "Incompatible Developer", + "websiteURL": "http://example.com", + "email": "test@example.com", + "help": { + "online": "http://example.com" + }, + "platforms": [ + { + "name": "Incompatible Boards", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com" + }, + "url": "https://github.com/damellis/attiny/archive/702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "archiveFileName": "702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "checksum": "SHA-256:bfffa4a700e42ae993895f5eea22bc369ba5ac3ea36eca18ac5f72a05bb60ab5", + "size": "5005", + "boards": [], + "toolsDependencies": [ + { + "packager": "incompatible_vendor", + "name": "incompatible_tool", + "version": "2.0.0" + } + ] + } + ], + "tools": [ + { + "name": "incompatible_tool", + "version": "2.0.0", + "systems": [] + } + ] } ] } diff --git a/internal/integrationtest/upload/upload_test.go b/internal/integrationtest/upload/upload_test.go index b3c88cefeb9..0eebbe60ceb 100644 --- a/internal/integrationtest/upload/upload_test.go +++ b/internal/integrationtest/upload/upload_test.go @@ -40,13 +40,13 @@ type board struct { func detectedBoards(t *testing.T, cli *integrationtest.ArduinoCLI) []board { // This fixture provides a list of all the boards attached to the host. - // This fixture will parse the JSON output of `arduino-cli board list --format json` + // This fixture will parse the JSON output of `arduino-cli board list --json` // to extract all the connected boards data. // :returns a list `Board` objects. var boards []board - stdout, _, err := cli.Run("board", "list", "--format", "json") + stdout, _, err := cli.Run("board", "list", "--json") require.NoError(t, err) length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query(".[] | .matching_boards | length").String()) require.NoError(t, err) @@ -67,7 +67,7 @@ func detectedBoards(t *testing.T, cli *integrationtest.ArduinoCLI) []board { func waitForBoard(t *testing.T, cli *integrationtest.ArduinoCLI) { timeEnd := time.Now().Unix() + 10 for time.Now().Unix() < timeEnd { - stdout, _, err := cli.Run("board", "list", "--format", "json") + stdout, _, err := cli.Run("board", "list", "--json") require.NoError(t, err) length, err := strconv.Atoi(requirejson.Parse(t, stdout).Query("length").String()) require.NoError(t, err) @@ -370,7 +370,7 @@ func TestUploadSketchWithPdeExtension(t *testing.T) { require.NoError(t, err) // Compile sketch first - stdout, _, err := cli.Run("compile", "--clean", "-b", board.fqbn, sketchPath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--clean", "-b", board.fqbn, sketchPath.String(), "--json") require.NoError(t, err) buildDir := requirejson.Parse(t, stdout).Query(".builder_result | .build_path").String() buildDir = strings.Trim(strings.ReplaceAll(buildDir, "\\\\", "\\"), "\"") @@ -435,7 +435,7 @@ func TestUploadWithInputDirContainingMultipleBinaries(t *testing.T) { binariesDir := cli.SketchbookDir().Join("build", "BuiltBinaries") _, _, err = cli.Run("compile", "--clean", "-b", board.fqbn, sketchOnePath.String(), "--build-path", binariesDir.String()) require.NoError(t, err) - stdout, _, err := cli.Run("compile", "--clean", "-b", board.fqbn, sketchTwoPath.String(), "--format", "json") + stdout, _, err := cli.Run("compile", "--clean", "-b", board.fqbn, sketchTwoPath.String(), "--json") require.NoError(t, err) buildDirTwo := requirejson.Parse(t, stdout).Query(".builder_result | .build_path").String() buildDirTwo = strings.Trim(strings.ReplaceAll(buildDirTwo, "\\\\", "\\"), "\"") diff --git a/internal/integrationtest/upload_mock/upload_mock_test.go b/internal/integrationtest/upload_mock/upload_mock_test.go index d88fa84a91d..db10fc383df 100644 --- a/internal/integrationtest/upload_mock/upload_mock_test.go +++ b/internal/integrationtest/upload_mock/upload_mock_test.go @@ -44,7 +44,7 @@ type parametersMap struct { func TestUploadSketch(t *testing.T) { env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) - defer env.CleanUp() + t.Cleanup(env.CleanUp) indexes := []string{ "https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json", @@ -656,12 +656,23 @@ func TestUploadSketch(t *testing.T) { _, _, err := cli.Run("sketch", "new", sketchPath.String()) require.NoError(t, err) - var stdout []byte + out, _, err := cli.Run("config", "get", "build_cache.path") + require.NoError(t, err) + cacheDir := paths.New(strings.TrimSpace(string(out))) - for i, test := range testParameters { + md5 := md5.Sum(([]byte(sketchPath.String()))) + sketchPathMd5 := strings.ToUpper(hex.EncodeToString(md5[:])) + buildDir := cacheDir.Join("sketches", sketchPathMd5) + require.NoError(t, buildDir.MkdirAll()) + require.NoError(t, buildDir.ToAbs()) + + t.Cleanup(func() { buildDir.RemoveAll() }) + + for i, _test := range testParameters { + test := _test t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - buildDir := generateBuildDir(sketchPath, t) - defer buildDir.RemoveAll() + t.Parallel() + var stdout []byte if test.Programmer != "" { if test.UploadPort != "" { stdout, _, err = cli.Run("upload", "-p", test.UploadPort, "-P", test.Programmer, "-b", test.Fqbn, sketchPath.String(), "--dry-run", "-v") @@ -686,10 +697,11 @@ func TestUploadSketch(t *testing.T) { }) } - for i, test := range testParametersMap { + for i, _test := range testParametersMap { + test := _test t.Run(fmt.Sprintf("WithMap%d", i), func(t *testing.T) { - buildDir := generateBuildDir(sketchPath, t) - defer buildDir.RemoveAll() + t.Parallel() + var stdout []byte if test.Programmer != "" { if test.UploadPort != "" { stdout, _, err = cli.Run("upload", "-p", test.UploadPort, "-P", test.Programmer, "-b", test.Fqbn, sketchPath.String(), "--dry-run", "-v") @@ -716,11 +728,43 @@ func TestUploadSketch(t *testing.T) { } } -func generateBuildDir(sketchPath *paths.Path, t *testing.T) *paths.Path { - md5 := md5.Sum(([]byte(sketchPath.String()))) - sketchPathMd5 := strings.ToUpper(hex.EncodeToString(md5[:])) - buildDir := paths.TempDir().Join("arduino", "sketches", sketchPathMd5) +func TestUploadWithInputDirFlag(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("core", "install", "arduino:mbed_opta") + require.NoError(t, err) + + sketchPath := cli.SketchbookDir().Join("TestSketchForUpload") + _, _, err = cli.Run("sketch", "new", sketchPath.String()) + require.NoError(t, err) + + // Create a fake build directory + buildDir := sketchPath.Join("build") require.NoError(t, buildDir.MkdirAll()) - require.NoError(t, buildDir.ToAbs()) - return buildDir + require.NoError(t, buildDir.Join("TestSketchForUpload.ino.bin").WriteFile(nil)) + require.NoError(t, buildDir.Join("TestSketchForUpload.ino.elf").WriteFile(nil)) + require.NoError(t, buildDir.Join("TestSketchForUpload.ino.hex").WriteFile(nil)) + require.NoError(t, buildDir.Join("TestSketchForUpload.ino.map").WriteFile(nil)) + + // Test with input-dir flag + _, _, err = cli.Run( + "upload", + "-b", "arduino:mbed_opta:opta", + "-i", buildDir.String(), + "-t", + "-p", "/dev/ttyACM0", + "--dry-run", "-v", + sketchPath.String()) + require.NoError(t, err) + + // Test with input-dir flag and no sketch + _, _, err = cli.Run( + "upload", + "-b", "arduino:mbed_opta:opta", + "-i", buildDir.String(), + "-t", + "-p", "/dev/ttyACM0", + "--dry-run", "-v") + require.NoError(t, err) } diff --git a/internal/inventory/inventory.go b/internal/inventory/inventory.go index 05b8f1ea24b..4792c692bf8 100644 --- a/internal/inventory/inventory.go +++ b/internal/inventory/inventory.go @@ -21,7 +21,7 @@ import ( "path/filepath" "sync" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/gofrs/uuid/v5" "github.com/sirupsen/logrus" "github.com/spf13/viper" @@ -35,7 +35,6 @@ var ( Type = "yaml" // Name is the inventory file Name with Type as extension Name = "inventory" + "." + Type - tr = i18n.Tr configFilePath string ) @@ -65,13 +64,13 @@ func Init(configPath string) error { func generateInstallationData() error { installationID, err := uuid.NewV4() if err != nil { - return fmt.Errorf(tr("generating installation.id: %w"), err) + return fmt.Errorf("%s: %w", i18n.Tr("generating installation.id"), err) } Store.Set("installation.id", installationID.String()) installationSecret, err := uuid.NewV4() if err != nil { - return fmt.Errorf(tr("generating installation.secret: %w"), err) + return fmt.Errorf("%s: %w", i18n.Tr("generating installation.secret"), err) } Store.Set("installation.secret", installationSecret.String()) return nil @@ -90,13 +89,13 @@ func WriteStore() error { // Create config dir if not present, // MkdirAll will retrun no error if the path already exists if err := os.MkdirAll(configPath, os.FileMode(0755)); err != nil { - return fmt.Errorf(tr("invalid path creating config dir: %[1]s error: %[2]w"), configPath, err) + return fmt.Errorf("%s: %w", i18n.Tr("invalid path creating config dir: %[1]s error", configPath), err) } // Create file if not present err := Store.WriteConfigAs(configFilePath) if err != nil { - return fmt.Errorf(tr("invalid path writing inventory file: %[1]s error: %[2]w"), configFilePath, err) + return fmt.Errorf("%s: %w", i18n.Tr("invalid path writing inventory file: %[1]s error", configFilePath), err) } return nil diff --git a/i18n/README.md b/internal/locales/README.md similarity index 100% rename from i18n/README.md rename to internal/locales/README.md diff --git a/i18n/cmd/ast/parser.go b/internal/locales/cmd/ast/parser.go similarity index 97% rename from i18n/cmd/ast/parser.go rename to internal/locales/cmd/ast/parser.go index 9126a4ada8e..69648c70c1b 100644 --- a/i18n/cmd/ast/parser.go +++ b/internal/locales/cmd/ast/parser.go @@ -24,7 +24,7 @@ import ( "path/filepath" "strconv" - "github.com/arduino/arduino-cli/i18n/cmd/po" + "github.com/arduino/arduino-cli/internal/locales/cmd/po" ) // GenerateCatalog generates the i18n message catalog for the go source files diff --git a/i18n/cmd/commands/catalog/catalog.go b/internal/locales/cmd/commands/catalog/catalog.go similarity index 100% rename from i18n/cmd/commands/catalog/catalog.go rename to internal/locales/cmd/commands/catalog/catalog.go diff --git a/i18n/cmd/commands/catalog/generate_catalog.go b/internal/locales/cmd/commands/catalog/generate_catalog.go similarity index 95% rename from i18n/cmd/commands/catalog/generate_catalog.go rename to internal/locales/cmd/commands/catalog/generate_catalog.go index c895660867a..27ac0e76d45 100644 --- a/i18n/cmd/commands/catalog/generate_catalog.go +++ b/internal/locales/cmd/commands/catalog/generate_catalog.go @@ -19,7 +19,7 @@ import ( "os" "path/filepath" - "github.com/arduino/arduino-cli/i18n/cmd/ast" + "github.com/arduino/arduino-cli/internal/locales/cmd/ast" "github.com/spf13/cobra" ) diff --git a/i18n/cmd/commands/root.go b/internal/locales/cmd/commands/root.go similarity index 87% rename from i18n/cmd/commands/root.go rename to internal/locales/cmd/commands/root.go index e05403669c0..fc5d8eb37e0 100644 --- a/i18n/cmd/commands/root.go +++ b/internal/locales/cmd/commands/root.go @@ -16,8 +16,8 @@ package commands import ( - "github.com/arduino/arduino-cli/i18n/cmd/commands/catalog" - "github.com/arduino/arduino-cli/i18n/cmd/commands/transifex" + "github.com/arduino/arduino-cli/internal/locales/cmd/commands/catalog" + "github.com/arduino/arduino-cli/internal/locales/cmd/commands/transifex" "github.com/spf13/cobra" ) diff --git a/i18n/cmd/commands/transifex/pull_transifex.go b/internal/locales/cmd/commands/transifex/pull_transifex.go similarity index 100% rename from i18n/cmd/commands/transifex/pull_transifex.go rename to internal/locales/cmd/commands/transifex/pull_transifex.go diff --git a/i18n/cmd/commands/transifex/push_transifex.go b/internal/locales/cmd/commands/transifex/push_transifex.go similarity index 100% rename from i18n/cmd/commands/transifex/push_transifex.go rename to internal/locales/cmd/commands/transifex/push_transifex.go diff --git a/i18n/cmd/commands/transifex/transifex.go b/internal/locales/cmd/commands/transifex/transifex.go similarity index 100% rename from i18n/cmd/commands/transifex/transifex.go rename to internal/locales/cmd/commands/transifex/transifex.go diff --git a/i18n/cmd/main.go b/internal/locales/cmd/main.go similarity index 93% rename from i18n/cmd/main.go rename to internal/locales/cmd/main.go index 69b1373251e..d31f1589e09 100644 --- a/i18n/cmd/main.go +++ b/internal/locales/cmd/main.go @@ -19,7 +19,7 @@ import ( "fmt" "os" - "github.com/arduino/arduino-cli/i18n/cmd/commands" + "github.com/arduino/arduino-cli/internal/locales/cmd/commands" ) func main() { diff --git a/i18n/cmd/po/catalog.go b/internal/locales/cmd/po/catalog.go similarity index 100% rename from i18n/cmd/po/catalog.go rename to internal/locales/cmd/po/catalog.go diff --git a/i18n/cmd/po/catalog_test.go b/internal/locales/cmd/po/catalog_test.go similarity index 100% rename from i18n/cmd/po/catalog_test.go rename to internal/locales/cmd/po/catalog_test.go diff --git a/i18n/cmd/po/merge.go b/internal/locales/cmd/po/merge.go similarity index 100% rename from i18n/cmd/po/merge.go rename to internal/locales/cmd/po/merge.go diff --git a/i18n/cmd/po/merge_test.go b/internal/locales/cmd/po/merge_test.go similarity index 100% rename from i18n/cmd/po/merge_test.go rename to internal/locales/cmd/po/merge_test.go diff --git a/i18n/cmd/po/parser.go b/internal/locales/cmd/po/parser.go similarity index 100% rename from i18n/cmd/po/parser.go rename to internal/locales/cmd/po/parser.go diff --git a/i18n/cmd/po/parser_test.go b/internal/locales/cmd/po/parser_test.go similarity index 100% rename from i18n/cmd/po/parser_test.go rename to internal/locales/cmd/po/parser_test.go diff --git a/i18n/convert.go b/internal/locales/convert.go similarity index 98% rename from i18n/convert.go rename to internal/locales/convert.go index 7b6d2e8dbdf..e7aa8227571 100644 --- a/i18n/convert.go +++ b/internal/locales/convert.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package i18n +package locales import ( "regexp" diff --git a/i18n/convert_test.go b/internal/locales/convert_test.go similarity index 99% rename from i18n/convert_test.go rename to internal/locales/convert_test.go index 618fa977b3b..723d6118c2b 100644 --- a/i18n/convert_test.go +++ b/internal/locales/convert_test.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package i18n +package locales import ( "fmt" diff --git a/i18n/data/.gitkeep b/internal/locales/data/.gitkeep similarity index 100% rename from i18n/data/.gitkeep rename to internal/locales/data/.gitkeep diff --git a/i18n/data/README.md b/internal/locales/data/README.md similarity index 74% rename from i18n/data/README.md rename to internal/locales/data/README.md index e795dcd7735..5d8d773c26d 100644 --- a/i18n/data/README.md +++ b/internal/locales/data/README.md @@ -6,7 +6,7 @@ This folder contains the [localization](https://wikipedia.org/wiki/Language_loca at the source: - **en.po** - edit the string in the source code file indicated by the comment above it <br /> e.g., a comment - `#: commands/upload/upload.go:615` indicates the source string is at line 615 of the file - [`commands/upload/upload.go`](../../commands/upload/upload.go) + `#: internal/cli/lib/check_deps.go:102` indicates the source string is at line 102 of the file + [`internal/cli/lib/check_deps.go`](../../../internal/cli/lib/check_deps.go) - **All other files** - the localization is done on **Transifex**: <br /> https://explore.transifex.com/arduino-1/arduino-cli/ diff --git a/i18n/data/ar.po b/internal/locales/data/ar.po similarity index 66% rename from i18n/data/ar.po rename to internal/locales/data/ar.po index 004f4258ca7..07db1d3092d 100644 --- a/i18n/data/ar.po +++ b/internal/locales/data/ar.po @@ -3,104 +3,94 @@ # CLI team <prj_cli_team@arduino.cc>, 2022 # Mark Asaad, 2022 # Osama Breman, 2023 -# طارق عبد الفتاح, 2023 +# طارق عبد الفتاح <tariq.ok.tariq@gmail.com>, 2023 +# Ahmed Gaafar, 2024 +# bedo karam, 2025 # msgid "" msgstr "" -"Last-Translator: طارق عبد الفتاح, 2023\n" +"Last-Translator: bedo karam, 2025\n" "Language-Team: Arabic (https://app.transifex.com/arduino-1/teams/108174/ar/)\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s %[2]s النسخة : %[3]s commit : %[4]s التاريخ : %[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "الملف %[1]s اصبح غير مدعوما! راجع %[2]s للمزيد من المعلومات" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s غير صالح . جار اعادة بناء كل شيء" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s مطلوب و لكن %[2]s مثبت حاليا" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "%[1]s التنسيق مفقود" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s , رسالة : %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s , المنفذ : %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s , المنافذ : %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, نسخة البوتوكول : %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "تم تنزيل %s مسبقا" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "%s و %s لا يمكن استخدامهما معا" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%s تم تثبيته بنجاح" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "%s مثبت مسبقا" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "%s ليس مسارا صحيحا" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "%s غير مدار بواسطة مدير الحزمات" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "%s يلزم أن يكون أكبر من أو يساوي 1024" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "يجب تثبيت %s" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%s النسق مفقود" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s' لديه توقيع غير صحيح" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "'build.core' و 'build.variant' تشيران الى منصة مختلفة : %[1]s و %[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(مخفي)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "(الشكل القديم)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" @@ -108,7 +98,7 @@ msgstr "" "مسارات --git url و zip-path-- غير مفعلة افتراضيا . للمزيد من المعلومات راجع " ": %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." @@ -116,24 +106,24 @@ msgstr "" "flags الخاصة ب --git-url و --zip-path تسمح بتثبيت ملفات غير موثوقة , " "استخدمها على مسؤوليتك الخاصة" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "لا يمكن استخدام git-url-- او zip-path-- مع install-in-builtin-dir--" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "ملف ino. موجود مسبقا" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "نسخة جديدة من CLI متوفرة " -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "عليك وصل مبرمجة للرفع" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARCH" @@ -141,101 +131,105 @@ msgstr "ARCH" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "دليل استخدام سطر موجه الاوامر للاردوينو" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "مواضيع مساعدة اضافية :" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "اضافة قيمة او اكثر الى احد الاعدادات" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "اسماء مستعارة" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "جميع المنصات محدثة" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "كل الانوية محدثة باخر اصدار مسبقا" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "%s مثبت مسبقا" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "البدائل ل %[1]s : %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "حدث خطأ اثناء اضافة النماذج الاولية" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "حدث خطأ اثناء الكشف عن المكتبات" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "" "الحاق سجل التصحيح الى الملف المحدد (Append debug logging to the specified " "file)" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "المعمارية : %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "الارشيف موجود مسبقا" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "جار ارشفة built core (caching) في : %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "اوامر مشروع Arduino CLI" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "واجهة موجه سطر الاوامر للاردوينو (Arduino CLI)" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "اوامر لوحات الاردوينو" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "اوامر cache الخاصة بالاردوينو" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "اوامر الاردوينو المتعلقة بالمكتبات" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "ضبط الاردوينو" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "عمليات نواة الاردوينو (Arduino core operations)" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "خطأ بالمدخلات : %v" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "يربط اللوحة بالمشروع" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "المؤلف : %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." @@ -243,7 +237,7 @@ msgstr "" "لا يمكن تنفيذ التثبيت التلقائي للمكتبة في هذه الحالة , الرجاء ازالة كل النسخ" " المطابقة يدويا و الاعادة" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." @@ -251,11 +245,11 @@ msgstr "" "لا يمكن تنفيذ الغاء التثبيت التلقائي للمكتبة في هذه الحالة , الرجاء ازالتها " "يدويا و الاعادة" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "متوفر" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "الاوامر المتوفرة" @@ -263,240 +257,244 @@ msgstr "الاوامر المتوفرة" msgid "Binary file to upload." msgstr "الملف الثنائي (Binary file) الذي تريد رفعه" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "اسم اللوحة" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "اسم اللوحة" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "نسخة اللوحة :" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "ملف محمل الإقلاع (Bootloader) تم تحدديده لكنه مفقود: %[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -"Builds الخاصة ب 'core.a' تحفظ في هذا المسار و سيتم وضعها في الكاش و سيعاد " -"استخدامها" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "تعذر انشاء مسار البيانات %s" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "تعذر انشاء المشروع" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "تعذر تنزيل المكتبة" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "تعذر ايجاد التبعيات للمنصة %s" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "تعذر فتح المشروع" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "تعذر وضع عدة قيم في المفتاح %v" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "نعذر تحديث المشروع" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "لا يمكن استخدام العلامات التالية مع بعضها البعض : %s " -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "تعذر كتابة ملف التهيئة : %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "تعذر كتابة سجل مصحح الاخطاء : %s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "تعذر انشاء مجلد لل \"build cache\"" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "تعذر انشاء مسار البناء" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "تعذر انشاء مسار ملف التهيئة : %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "تعذر انشاء ملف التهيئة : %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "تعذر انشاء مسار مؤقت" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "تعذر انشاء ملف temp" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "تعذر حذف المفتاح %[1]s:%[2]v" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "تعذر تشغيل اداة debug" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "تعذر ايجاد المسار المطلق : %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "تعذر تثبيت المنصة" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "تعذر تثبيت الاداة %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "تعذر اجراء اعادة تشغيل المنفذ : %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 msgid "Cannot upgrade platform" msgstr "تعذر تحديث المنصة" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "تعذر كتابة الملف %[1]s : %[2]v" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "الفئة : %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "التحقق من حالة التبعيات (dependencies) للمكتبة المختارة" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" "المجموع الاختباري (Checksum) لا يتطابق مع المجموع الاختباري (checksum) " "الموجود في package.json " -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "المجموع الاختباري (Checksum) :" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "تنظيف cache" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" "قائمة يفصل بين محتوياتها فاصلة تحوي عناوين URL الاضافية لمدير اللوحات " -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "الامر يبقى قيد التشغيل و يطبع قائمة للوحات المتصلة عندما يوجد تغيير" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "المشروع المترجم لم يتم ايجاده في %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "يترجم مشاريع الاردوينو" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "يتم ترجمة النواة" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "يتم ترجمة المكتبات" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "يتم ترجمة المكتبة \"%[1]s\"" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "ترجمة الشيفرة البرمجية..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" "ملف التهيئة موجود مسبقا , استخدم --overwrite للتخلص من الملف الموجود مسبقا" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "تمت كتابة ملف التهيئة في : %s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "اعدادات الضبط ل %s" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "تكوين إعدادات منفذ الاتصال. التنسيق هو <ID>=<value>[,<ID>=<value>]" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "جار تهيئة المنصة" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "جار تهيئة الاداة" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "متصل" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "متصل الى %s ! اضغط CTRL-C للخروج" +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "جار الإتصال ب %s اضغط CTRL-C للإنهاء. " -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "النواة" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "تعذر الاتصال بواسطة HTTP" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "تعذر انشاء فهرس داخل المسار" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "تعذر القيام بـ deeply cache لــ core build : %[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "تعذر معرفة حجم البرنامج" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "تعذر ايجاد المسار الحالي %v" @@ -504,7 +502,7 @@ msgstr "تعذر ايجاد المسار الحالي %v" msgid "Create a new Sketch" msgstr "انشاء مشروع جديد" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "انشاء و طباعة اعدادات البروفايل من البناء (build)" @@ -512,7 +510,7 @@ msgstr "انشاء و طباعة اعدادات البروفايل من البن msgid "Creates a zip file containing all sketch files." msgstr "انشاء ملف zip يحوي كل ملفات المشروع" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." @@ -520,7 +518,7 @@ msgstr "" "انشاء او تحديث ملف الضبط في مسار البيانات او في مسار مخصص مع اعدادات التهيئة" " الحالية" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." @@ -528,90 +526,88 @@ msgstr "" "في الوقت الحالي , بروفايلات البناء (Build Profiles) تدعم حصرا المكتبات " "المتوافرة في مدير المكتبات للاردوينو (Arduino Library Manager)" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "مهملة (غير موصى باستخدامها)" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "Daemon يقوم بالاستماع على %s : %s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "تصحيح مشاريع الاردوينو" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "تصحيح اخطاء مشاريع الاردوينو (يفتح هذا الامر جلسة gdb تفاعلية)" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "مترجم التصحيح على سبيل المثال : %s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "تصحيح الاخطاء (Debugging) غير مدعوم للوحة %s" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "تصحيح الاخطاء (Debugging) مدعوم :" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "إفتراضي" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "تم تحديد FQBN الافتراضي الى :" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "تم تحديد المنفذ الافتراضي الى :" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "حذف كاش التحميلات (download cache) الخاص بمدير اللوحات/المكتبات" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" -"حذف محتويات مجلد `directories.downloads` حيث يتم تخزين ملفات الارشيف مؤقتا " -"اثناء تثبيت المكتبات و منصات اللوحات" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "حذف مفتاح الاعدادات و كل مفاتيحه الفرعية" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "تبعيات : %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "الوصف" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "الكشف عن المكتبات المستخدمة ..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "تكتشف و تعرض قائمة اللوحات المتصلة الى هذا الكومبيوتر" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "المسار الذي يحوي الملفات الثنائية للتصحيح" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "المجلد الذي يحوي الملفات الثنائية (binaries) التي سيتم رفعها" @@ -627,251 +623,262 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "الغاء تفعيل وصف الاكتمال في واجهات الاوامر التي تدعم ذلك" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "قطع الاتصال" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "يعرض فقط اتصالات gRPC التي تم اعطاؤها" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "عدم تثبيت التبعيات (dependencies)" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "لا تكتب فوق المكتبات المثبتة مسبقا" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "لا تكتب فوق المنصات المثبتة مسبقا" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "لا تقم بالرفع , فقط قم بتسجيل الاحداث" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "" "عدم انهاء عمليات daemon في حال تم انهاء العملية الام (Do not terminate " "daemon process if the parent process dies)" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "لا تحاول تحديث المكتبات أذا تم تثبيتها." + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "يتم تنزيل %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "جار تنزيل فهرس التوقيعات %s" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "جار تنزيل الفهرس : %s" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "جار تحميل المكتبة %s" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "جار تنزيل الاداة الناقصة" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "جار تنزيل الحزم" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "جار تحميل المنصة %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "جار تحميل الاداة" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "يقوم بتنزيل نواة او اكثر و ادواتها التابعة لها" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "يقوم بتنزيل مكتبة او اكثر بدون تثبيتها" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "تفعيل تسجيل تصحيح الاخطاء لمكالمات gRPC " -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "ادخل مسار لملف zip" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" "ادخل عنوان git URL الخاص بالمكتبات المستضافة على المستودعات (repositories)" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" "خطأ اثناء اضافة الملف لارشيف المشروع (Error adding file to sketch archive)" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "خطا اثناء ارشفة built core (caching) في %[1]s : %[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "خطا اثناء ارشفة :%v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" "خطا اثناء حساب مسار الملف النسبي (Error calculating relative file path)" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "خطأ اثناء تنظيف الكاش : %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "تعذر تحويل المسار الى مطلق : %v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "خطا اثناء نسخ ملف الخرج %s" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "خطأ في أنشاء ملف التعريفات:%v" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "خطا اثناء انشاء النسخة %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "خطا اثناء انشاء مسار الخرج" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "خطا اثناء انشاء ارشيف المشروع" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "خطأ اثناء انشاء المشروع : %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "خطا اثناء البحث عن اللوحات : %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "خطا اثناء تحميل %[1]s : %[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "خطأ اثناء تحميل %s" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "خطأ اثناء تحميل الفهرس '%s'" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "خطأ اثناء تحميل توقيع الفهرس : '%s'" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "خطأ اثناء تحميل المكتبة %s" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "خطأ اثناء تنزيل المنصة %s" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "خطا اثناء تنزيل الاداة %s" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "خطا اثناء التصحيح : %v" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "خطا اثناء اكتشاف FBQN : %v" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "خطا اثناء ترميز JSON الخاص بالخرج : %v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "خطا اثناء الرفع : %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "خطأ اثناء القيام بYAML econding للخرج : %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" +msgstr "حدث خطأ ما أثناء إكتشاف اللوحة." -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "خطأ اثناء بناء : %v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "خطأ اثناء تثبيت : %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "خطأ اثناء الغاء تثبيت : %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "خطا اثناء تطوير : %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "خطأ اثناء استخراج %s" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "خطا اثناء البحث عن build artifacts" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "خطأ اثناء الحصول على معلومات التصحيح %v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "خطا اثناء جلب المسار المطلق لارشيف المشروع" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "خطأ اثناء الحصول على معلومات اللوحة %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "خطأ اثناء الحصول على المسار الحالي من اجل قاعدة بيانات الترجمة %s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "خطأ اثناء الحصول على المعلومات للمكتبة %s" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "خطا اثناء جلب بيانات المكتبة : %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "خطأ اثناء جلب البيانات الوصفية (metadata) للمنفذ : %v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "" "خطأ اثناء الحصول على بيانات اعدادات المنفذ (port settings details) : %s" @@ -880,42 +887,42 @@ msgstr "" msgid "Error getting user input" msgstr "تعذر الحصول على مدخلات المستخدم" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "تعذر تهيئة مثال : %v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "خطأ اثناء تثبيت %v:%s" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "خطأ اثناء تثبيت مكتبة GIT : %v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "خطأ اثناء تثبيت مكتبة ZIP : %v" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "خطأ اثناء تثبيت المكتبة %s" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "خطأ اثناء تثبيت المنصة %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "خطأ اثناء تثبيت الاداة %s" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "خطا اثناء انشاء قائمة باللوحات : %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "تعذر احصاء المكتبات : %v" @@ -923,44 +930,40 @@ msgstr "تعذر احصاء المكتبات : %v" msgid "Error listing platforms: %v" msgstr "خطأ اثناء انشاء قائمة تحوي جميع المنصات : %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "خطا اثناء تحميل منصة الهاردوير" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "خطأ اثناء تحميل الفهرس %s" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "خطأ اثناء فتح %s" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "تعذر فتح الملف الذي يحوي سجلات التصحيح (debug logging file) : %s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "خطا اثناء فتح الكود المصدر الذي يتجاوز ملف البيانات : %v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "تعذر تقطيع علامة show-properties-- : %v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "خطا اثناء قراءة مسار البناء" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "خطا اثناء قراءة ملف التهيئة : %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "خطا اثناء قراءة ملفات المشروع" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "خطا اثناء حل التبعيات ل %[1]s:%[2]s" @@ -968,208 +971,223 @@ msgstr "خطا اثناء حل التبعيات ل %[1]s:%[2]s" msgid "Error retrieving core list: %v" msgstr "خطا اثناء استعادة قائمة النواة : %v" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "خطا اثناء التراجع عن التغييرات : %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "خطا اثناء حفظ فهرس التنزيلات" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" "خطأ اثناء حفظ توقيع الفهرس الذي تم تحميله (downloaded index signature)" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "خطا اثناء البحث عن اللوحات : %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "خطا اثناء البحث عن مكتبات : %v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "خطأ اثناء البحث عن المنصة : %v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" "تعذر القيام بسلسلة قاعدة بيانات الترجمة (Error serializing compilation " "database) : %s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "خطأ في وضع قيمة: %v" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "تعذر بدء الاكتشاف : %v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "خطا اثناء الغاء تثبيت %[1]s: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "خطا اثناء تحديث فهرس المكتبات : %v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "تعذر ترقية المكتبات" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "خطا اثناء تطوير المنصة : %s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "تعذر التحقق من التوقيع" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "تعذر العثور على المكتبات التي ضُمِّنَت (included) من قبل : %[1]s" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "خطأ اثناء تحديد حجم المشروع : %s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "خطأ اثناء كتابة قاعدة بيانات الترجمة (compilation database) : %s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "خطأ في كتابة الملف: %v" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "خطأ : وصف الامر غير مدعوم من قبل %v" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "خطأ : كود مصدري خاطئ سيقوم بالكتابة فوق ملف البيانات : %v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "الحدث" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "الامثلة للمكتبة %s" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "الامثلة : " -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "الملف التنفيذي الذي سيتم تصحيحه (Executable to debug)" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "توقعت وجود المشروع المترجم في المسار %s . لكنني وجدت ملفا بدلا عن ذلك" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "فشل محي الشريحة" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "فشل المبرمجة" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "فشل حرق محمل الاقلاع" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "فشل انشاء مسار البيانات" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "فشل انشاء مسار التنزيلات" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "تعذر الاستماع على منفذ TCP : %[1]s . %[2]s منفذ غير صالح" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "تعذر الاستماع على منفذ TCP : %[1]s . %[2]s اسم غير معروف" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "تعذر الاستماع على منفذ TCP : %[1]s . خطأ غير متوقع %[2]v " -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "تعذر الاستماع على منفذ TCP : %s . العناوين قيد الاستخدام مسبقا" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "تعذر الرفع" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "الملف : " -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "تشفير البرنامج الثابت او توقيعه يحتاج تحديد الخصائص التالية" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "اول رسالة يجب ان تحوي على طلب التصحيح و ليس البيانات" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "العلامة %[1]s اجبارية عند استخدامها بالتوازي مع : %[2]s" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "الاعلام :" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" "التشغيل الاجباري لسكربت post-install (تستخدم اذا كان CLI لا يعمل بشكل " "متفاعل)" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "تخطي سكربت POST-install اجباريا (تستخدم اذا كان CLI يعمل بشكل متفاعل)" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "اسم اللوحة المؤهلة بالكامل FQBN مثال : arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "سيرفر GDB '%s' غير مدعوم" @@ -1186,15 +1204,19 @@ msgstr "يولد سكربت الاكمال" msgid "Generates completion scripts for various shells" msgstr "يولد سكربتات اكمال من اجل مختلف ال shells" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "يتم توليد النماذج الاولية للتوابع :" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "علامات عامة :" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1202,31 +1224,31 @@ msgstr "" "المتغيرات العامة تستخدم %[1]s بايت (%[3]s%%) من الرام ، تبقى %[4]s بايت " "للمتغيرات المحلية. الحجم الاقصى %[2]s بايت." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "المتغيرات العامة تستخدم %[1]s بايت من الذاكرة المتغيرة." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "خصائص التعرُّف" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "" "اذا تم تحديده فان مجموعة الكود الثنائي الذي تم بناؤه سيتم تصديره الى مجلد " "المشروع" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." @@ -1234,167 +1256,170 @@ msgstr "" "اذا تم تحديده فانه سيعطيك كل النوى المثبتة و القابلة للتثبيت بالاضافة الى " "التي تم تثبيتها يدويا" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "يتضمن الاحصاء المكتبات المدمجة (بالمنصات و IDE)" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "يُضمِّن في الارشيف المجلد %s" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "تثبيت المكتبات داخل مجلد IDE-Builtin" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "تم التنصيب" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "تم تثبيت %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "جار تثبيت %s" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "جار تثبيت المكتبة %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "جار تثبيت المنصة %s" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "جار تثبيت الاداة %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" "يقوم بتثبيت نواة او اكثر و ادواتها التابعة لها (corresponding tool " "dependencies)" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "يقوم بتثبيت مكتبة او اكثر تم تحديدها مسبقا على النظام" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "خطأ داخلي في الكاش (Internal error in cache)" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "غير صالح '‍%[1]s' : الصفة : %[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "نداء خاطئ : المفروض عرض مساعدة لكنه غير متوفر الا في الوضع النصي" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "FBQN غير صالح" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "عنوان TCP غير صالح لان المنفذ غير موجود" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "URL غير صالح" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "URL الاضافي غير صالح : %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" -msgstr "ارشيف غير صالح : الملف %{1}s غير موجود في الارشيف %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "تم اعطاء وسيط غير صالح %v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "خصائص البناء غير صالحة" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "data size regexp غير صالح : %s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "eeprom size regexp غير صالح %s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "نسخة خاطئة " -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "عنصر عير صالح %s" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "مكتبة غير صالحة" -#: configuration/network.go:63 +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "" + +#: internal/cli/configuration/network.go:83 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "network.proxy غير صالح '%[1]s': %[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "اعداد خاطئ لـ log-level-- : %s" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "صيغة اخراج خاطئة : %s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "فهرس الحزمة غير صالح في %s" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "معطيات خاطئة %s: النسخة غير مسموح بها" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "قيمة pid غير صالحة : '%s'" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "ملف تعريف غير صالح" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "وصفة غير صالحة ضمن platform.txt" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "size regexp غير صالح : %s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "مهلة غير صالحة" +#: main.go:86 +msgid "Invalid value in configuration" +msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "نسخة غير صالحة" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "قيمة vid غير صالحة : '%s'" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." @@ -1402,73 +1427,74 @@ msgstr "" "يقوم بانتاج قاعدة الترجمة بدون القيام بالترجمة فعليا . سيتم تجاوز كل اوامر " "البناء ما عدا pre* hooks." -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "LIBNAME" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "المكتبة" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "اسم المكتبة" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "الأخير" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "المكتبة %[1]s تم تحديدها بانها precompiled" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "تم تثبيت المكتبة %[1]s ولكن بنسخة اخرى : %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "المكتبة %s مثبتة باخر اصدار مسبقا" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "المكتبة %s غير مثبتة" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "تعذر ايجاد المكتبة %s" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "المكتبة '%s' غير موجودة" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" "المكتبة لا تستطيع استخدام الملفين '%[1]s' 'و' '%[2]s' معا . تحقق مرة اخرى في" " '%[3]s'." -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "فشل تثبيت المكتبة" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "المكتبة مثبتة" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "رخصة" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "جار ربط كل شيء مع بعضه" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" @@ -1476,15 +1502,15 @@ msgstr "" "انشاء قائمة اللوحات التي منصة دعمها مثبتة. تستطيع البحث \n" "عن لوحة محددة اذا قمت بتحديد اسم اللوحة" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "اظهر كل اللوحات المعروفة و FBQN الخاص بها" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "اعرض كل اللوحات المتصلة" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." @@ -1492,7 +1518,7 @@ msgstr "" "اعرض كل خيارات اللوحات مفصولة عن بعضها بفواصل . او يمكن استخدامها عدة مرات " "من اجل عدة خيارات" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." @@ -1500,15 +1526,15 @@ msgstr "" "قائمة من خصائص البناء الخاصة مفصولة عن بعضها البعض بفواصل . او يمكن ان " "تستخدم عدة مرات من اجل عدة خصائص" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "انشاء قائمة بالمكتبات القابلة للتحديث" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "انشاء قائمة بالمنصات القابلة للتحديث" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "انشاء قائمة بجميع اللوحات المتصلة" @@ -1516,54 +1542,60 @@ msgstr "انشاء قائمة بجميع اللوحات المتصلة" msgid "Lists cores and libraries that can be upgraded" msgstr "يحصي النوى و المكتبات التي يمكن ترقيتها" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "جار تحميل ملف الفهرس : %v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "الموقع" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "ذاكرة منخفضة متبقية، مشاكل عدم إستقرار قد تحدث." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "القائم بالصيانة : %s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" "الحد الاقصى لزمن البحث عن المنفذ : على سبيل المثال 30 ثانية , 1 دقيقة " -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "الرسائل بهذه المرحلة و ما فوق سيتم تسجيلها . المراحل الصالحة هي : %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "'%[1]s' مفقود من المكتبة في %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "FBQN مفقود (Fully Qualified Board Name)" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "يوجد منفذ مفقود" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "عنوان المنفذ مفقود" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "يوجد بروتوكول منفذ مفقود" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "المبرمج مفقود" @@ -1571,61 +1603,61 @@ msgstr "المبرمج مفقود" msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr " size regexp مفقود" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "مسار السكتش مفقود" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "المراقب '%s' غير موجود" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "اعدادات منفذ المراقبة " -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "العثور على عدة مكتبات لـ\"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "الاسم" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "الاسم\"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "منفذ التحميل الجديد: %[1]s(%[2]s)" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "لا يوجد اية لوحات" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "لم يتم تحديد منفذ افتراضي او FQBN " +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "لا توجد اية مكتبات" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "لا يوجد مكتبات مثبتة" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "لا توجد مكتبات تطابق بحثك" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1633,51 +1665,51 @@ msgstr "" "لا توجد مكتبات متطابقة مع بحثك\n" "هل تقصد...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "لا يوجد تحديثات متاحة للمكتبات" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "لا يوجد مراقب متاح لبرتوكول المنفذ %s" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "لا يوجد مكتبات او منصات قديمة" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "لا توجد منصات مثبتة" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "ﻻ يوجد منصات تطابق بحثك" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "تعذر ايجاد منفذ رفع , باستخدام %s كرجوع احتياطي fallback" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "تعذر ايجاد حل تبعيات صالح" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "الذاكرة غير كافية؛ راجع %[1]s لنصائح حول استخدامها بكفائة" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "غير مستخدم : %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "نظام التشغيل:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "لوحة أردوينو الرسمية:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." @@ -1685,46 +1717,46 @@ msgstr "" "ازالة تفاصيل المكتبة في كل النسخ عدا اخر نسخة (يعطي اخراج json مضغوط بشكل " "اكبر)" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "فتح منفذ تواصل مع اللوحة" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "اختيار:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" "اختياري، يمكن أن يكون: %s. يُستخدم لإخبار ال gcc أي مستوي تحذير يَستخدِم (-W" " flag)" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "اختياري , يقوم بتنظيف مجلد البناء ولا يستخدم اي بناء مخزن مؤقتا" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "اختياري , يحسن مخرجات المترجم خلال تصحيح الاخطاء بدلا عن الاصدار" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "اختياري , يكبح كل خرج" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "اختياري، يُفعل الوضع المفصل." -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" "اختياري , مسار لملف json. الذي يحتوي على البدائل من الكود المصدري للمشروع" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." @@ -1732,52 +1764,65 @@ msgstr "" "تجاوز احد خصائص البناء باستخدام قيمة خاصة . يمكن استخدامه عدة مرات من اجل " "عدة خصائص" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "الكتابة فوق ملف التهيئة الموجود سابقا" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "يكتب فوق ارشيف موجود سابقا" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "يكتب فوق ملف ino. موجود مسبقا" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "المُغَلِّف" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "URL الخاص بالحزمة" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "حافظ الحزمة :" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "اسم الحزمة :" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "المساعدة الخاصة بالحزمة اونلاين" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "موقع الحزمة على الويب" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "المقطع : %s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "المسار" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." @@ -1785,7 +1830,7 @@ msgstr "" "المسار الى مجموعة من المكتبات . يمكن استخدامه عدة مرات او من اجل عدة مدخلات " "حيث يتم فصلها باستخدام فاصلة" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." @@ -1793,11 +1838,11 @@ msgstr "" "المسار الى المجلد الاصلي لمكتبة واحدة . يمكن استخدامه عدة مرات او من اجل عدة" " مدخلات حيث يتم فصلها باستخدام فاصلة" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "مسار للملف حيث تُكتب السجلات" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." @@ -1805,19 +1850,20 @@ msgstr "" "المسار الذي يتم فيه حفظ الملفات التي تمت ترجمتها , اذا تم ازالته , سيتم " "انشاء مجلد داخل المسار المؤقت الافتراضي في نظام التشغيل" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "جار تفعيل 1200-bps touch reset على المنفذ التسلسلي %s" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "المنصة %s مثبتة سابقا" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "تم تثبيت المنصة: %s" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1825,55 +1871,55 @@ msgstr "" "المنصة %sغير موجودة في اي فهرس معروف\n" "ربما تحتاج الى اضافة عنوان url من طرف 3 " -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "تم إلغاء تثبيت المنصة: %s" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "المنصة '%s' هي باخر اصدار مسبقا" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "المنصة '%s' غير موجودة" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "Platform ID" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "id المنصة غير صحيح" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "عنوان url للمنصة :" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "معمارية المنصة :" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "فئة المنصة :" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "المجموع الاختباري للمنصة :" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "اسم ملف المنصة:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "اسم المنصة:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "حجم المنصة (بالبايت) :" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" @@ -1881,7 +1927,7 @@ msgstr "" "الرجاء تحديد FQBN . لقد تم اكتشاف عدة لوحات على المنفذ %[1]s الذي يستخدم " "بروتوكول %[2]s" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" @@ -1889,34 +1935,39 @@ msgstr "" "الرجاء تحديد FQBN . تعذر التعرف على اللوحة على المنفذ %[1]s ذات البروتوكول " "%[2]s " -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "منفذ" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "المنفذ %v مغلق" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "خطا في مراقب المنفذ" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "تعذر ايجاد المكتبة التي تمت ترجمتها مسبقا في \"%[1]s\"" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "طباعة تفاصيل عن لوحة." -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "طباعة الكود قبل معالجته الى stdout بدلا من الترجمة " -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "طباعة السجلات على الخرج الافتراضي" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "اطبع الناتج بصيغة JSON" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "طباعة اعدادات الضبط الحالية." @@ -1925,170 +1976,219 @@ msgstr "طباعة اعدادات الضبط الحالية." msgid "Prints the current configuration." msgstr "طباعة اعدادات الضبط الحالية." -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "تعذر ايجاد الملف الشخصي '%s'" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "تعذر ايجاد المبرمجة '%s'" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "اسم المبرمجة" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "المبرمجة التي سيتم استخدامها , مثال : atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "المبرمجات : " -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "الخاصية '%s' غير معرفة" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "البروتوكول" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "يشمل : %s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "يزيل قيمة او اكثر من اعداد" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "تبديل %[1]s ب %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "استبدال المنصة %[1]s بـ %[2]s" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "الادوات المطلوبة :" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "التشغيل كناطر على المنفذ : %s" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "التشغيل ضمن الوضع الصامت , يظهر فقط شاشة الادخال و الاخراج " -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "يعمل كناطر من اجل تهيئة النوى و المكتبات و يتم مرة واحدة" +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "جار تشغيل البناء العادي من النواة" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "حفظ ادوات البناء ضمن هذا المجلد" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "البحث عن لوحة ضمن مدير اللوحات باستخدام كلمات مفتاحية" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "البحث عن لوحة ضمن مدير اللوحات" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "البحث عن نواة ضمن مدير اللوحات باستخدام كلمات مفتاحية" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "البحث عن نواة ضمن مدير اللوحات" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "البحث عن بيانات مكتبة او اكثر (غير حساس لحالة الاحرف)" - #: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "البحث عن بيانات مكتبة او اكثر" +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "" + +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "الجملة : %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "استجابة السيرفر : %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "تحديد قيمة للاعداد" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." msgstr "" -"تحديد القيم الافتراضية للمنفذ و FQBN . اذا لم يتم تحديد منفذ او FQBN , سيتم " -"اظهار المنفذ و FQBN الافتراضي الحالي" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "تحديد مكان حفظ ملف الضبط" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "اعداد" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "مفتاح الاعداد غير موجود" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "اظهار كل النوى المتوفرة" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "اظهار كل اعدادات منفذ التواصل" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "اظهار اللوحات التي تم تحديدها كمخفي في المنصة" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." @@ -2096,26 +2196,26 @@ msgstr "" "يظهر خصائص البناء . الخصائص متوسعة , استخدم \n" "\"show properties=unexpanded--\" اذا اردتها كما كانت معرفة بالظبط" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "اظهار تفاصيل اللوحة كاملة" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" "اظهار معلومات حول لوحة, خصوصا اذا كانت اللوحة تملك خيار لتكون محددة في FQBN " -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "اظهار اسم المكتبة فقط" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "عرض قائمة المبرمجات المتاحة" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "اظهار البيانات الوصفية لجلسة التصحيح بدلا من بدء المصحح" @@ -2124,11 +2224,11 @@ msgstr "اظهار البيانات الوصفية لجلسة التصحيح ب msgid "Show outdated cores and libraries after index update" msgstr "اظهار النوى و المكتبات القديم بعد تحديث الفهرس" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "عرض قائمة المكتبات المثبتة" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2141,15 +2241,15 @@ msgstr "" "اذا حدد المدخل LIBNAME القائمة فان القائمة ستكون محددة بما في هذا المدخل\n" "المكتبة : افتراضيا , المكتبات المدمجة بالمنصات و النوى لا يتم عرضها في القائمة , يمكن عرضها في القائمة من خلال اضافة علامة all--" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "يعرض قائمة من المنصات المثبتة" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "يظهر قائمة الامثلة الخاصة بالمكتبات" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." @@ -2157,40 +2257,40 @@ msgstr "" "يظهر قائمة الامثلة الخاصة بالمكتبات . يمكن اعطاء اسم كمدخل من اجل البحث ضمن " "مكتبة محددة" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "عرض رقم نسخة Arduino CLI المثبتة على نظامك" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "عرض رقم نسخة Arduino CLI" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "الحجم (بالبايت) :" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "لا يمكن وضع المشروع ضمن مسار البناء . الرجاء تحديد مسار بناء مختلف" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "تم انشاء المشروع في : %s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "ملف التعريف للمشروع الذي سيتم استخدامه" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" "الشيفرة البرمجية كبير جدا; راجع %[1]s\n" "لنصائح لاختصارها." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2198,76 +2298,94 @@ msgstr "" "المشروع يستخدم %[1]s بايت (%[3]s%%) من ذاكرة التخزين . الحجم الاقصى للبرنامج" " %[2]s بايت" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" "المشاريع ذوي اللاحقة pde. في حالة تقاعد , الرجاء تغيير لاحقة الملف الى ino." -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "تخطي ربط البرنامج النهائي القابل للتنفيذ" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "جار تخطي 1200bps touch reset لانه لم يتم تحديد منفذ تسلسلي" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "جار تخطي انشاء الارشيف لـ : %[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "جار تخطي ترجمة : %[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "جار تخطي الكشف عن توابع المكتبة %[1]s التي تمت ترجمتها مسبقا" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "جار تخطي ضبط المنصة" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "جار تخطي ضبط الاداة" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "جار تخطي : %[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "يمكن تحديث بعض الفهارس" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" "فشلت بعض الترقيات , الرجاء الاطلاع على الخرج من اجل المزيد من المعلومات" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOUCH : خطا اثناء اعادة الضبط : %s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:78 msgid "The TCP port the daemon will listen to" msgstr "منفذ TCP  الذي سيستمع اليه الناطر" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" + +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "ملف التهيئة المخصص (اذا لم يتم تحديده سيتم استخدام الملف الافتراضي)" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "يجب استخدام العلامة debug-file-- مع debug--" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2275,7 +2393,7 @@ msgstr "" "المفتاح '%[1]v' ليس قائمة من الاشياء , لا يمكن الاضافة اليه\n" "ربما يمكنك استخدام %[2]s" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2283,11 +2401,11 @@ msgstr "" "المفتاح '%[1]v' ليس قائمة من الاشياء , لا يمكن ازالته \n" "ربما يمكنك استخدام %[2]s" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "يوجد عدة نسخ مثبتة من المكتبة %s" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." @@ -2295,7 +2413,7 @@ msgstr "" "اسم مفتاح التشفير المخصص الذي سيستخدم لتشفير ملف ثنائي اثناء الترجمة . " "يستخدم فقط من قبل المنصات التي تدعم ذلك" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." @@ -2303,11 +2421,11 @@ msgstr "" "اسم مفتاح التوقيع المخصص الذي سيستخدم لتوقيع ملف ثنائي اثناء الترجمة . " "يستخدم فقط من قبل المنصات التي تدعم ذلك" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "تنسيق الخرج الخاص بالسجلات , يمكن ان يكون : %s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." @@ -2315,11 +2433,11 @@ msgstr "" "المسار الى المجلد للبحث عن مفتاح خاص لتوقيع و تشفير الملف الثنائي , يتم " "استخدامه من قبل المنصات التي تدعم ذلك فقط" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "المنصة لا تدعم '%[1]s' من اجل المكتبات الغير مترجمة" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2338,106 +2456,107 @@ msgstr "" "هذا الامر يظهر قائمة النوى و/أو المكتبات المثبتة التي يمكن ترقيتها. اذا لم " "يوجد اي شيء يحتاج للتحديث فالخرج سيكون فارغا" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "الاداة %s مثبتة مسبقا" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "تم الغاء تثبيت الاداة %s" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "مجموعة الادوات '%s' غير مدعومة" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "مسار مجموعة الادوات" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "بادئة مجموعة الادوات " -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "نوع مجموعة الادوات" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "جرب تشغيل %s" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "يفعل الوضع المطول" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "نوع" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "الأنواع: %s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "URL:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" "تعذر تخزين نواة البناء مؤقتا , الرجاء اخبار المحافظين %[1]s لمتابعة %[2]s" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "تعذر ايجاد مجلد Documents : %v" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "تعذر ايجاد مجلد Local App Data : %v" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "تعذر ايجاد user home dir : %v" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "تعذر فتح ملف من اجل انشاء سجلات : %s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "تعذر تقطيع عنوان URL" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "إلغاء تثبيت %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "إلغاء تثبيت %s، الأداة لم تعد مطلوبة" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "يلغي تثبيت نواة او اكثر مع ادواتها و توابعها في حال لم يتم استخدامها " -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "يلغي تثبيت مكتبة او اكثر " -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "غير معروف" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "FQBN غير معروف" @@ -2449,23 +2568,23 @@ msgstr "يحدث فهرس المكتبات و النوى" msgid "Updates the index of cores and libraries to the latest versions." msgstr "يحجث فهرس المكتبات و النوى الى اخر نسخة" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "يحدث فهرس النوى الى اخر نسخة" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "يحدث فهرس النوى" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "يحدث فهرس المكتبات الى اخر نسخة" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "يحدث فهرس المكتبات" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "الترقية لا تقبل مدخلات مع نسخة" @@ -2477,54 +2596,54 @@ msgstr "يحدث المكتبات و النوى المثبتة الى اخر ن msgid "Upgrades installed cores and libraries." msgstr "يحدث المكتبات و النوى المثبتة" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "يحدث المكتبات المثبتة" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "يحدث منصة او كل المنصات الى اخر نسخة" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "يرفع مشاريع الاردوينو" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "يرفع مشاريع الاردوينو , و لا يقوم بترجمة المشروع قبل الرفع مطلقا !" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "عنوان منفذ الرفع : مثال , COM3 او /dev/ttyACM2" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "تم ايجاد منفذ الرفع في %s" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "بروتوكول منفذ الرفع , مثال : serial \"تسلسلي\"" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "يرفع الملف الثنائي بعد الترجمة" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "يرفع محمل الاقلاع على اللوحة باستخدام مبرمجة خارجية" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "يرفع محمل الاقلاع" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" "جار الرفع الى لوحة مخصصة باستخدام بروتوكول %s الذي يتطلب المعلومات التالية" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2532,103 +2651,114 @@ msgstr "" "لا يمكن استخدام فواصل مع عناوين url , افصل عدة عناوين url باستخدام متغير بيئة \"env var\" ملحوقا بمسافة \n" "%s" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "الاستخدام" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "استخدم %s من اجل المزيد من المعلومات حول امر معين" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "المكتبة المستخدمة" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "المنصة المستخدمة" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "مستخدم : %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "يتم استخدام اللوحة '%[1]s' من منصة داخل المجلد %[2]s" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "يتم استخدام توابع المكتبة التي تم تخزينها مؤقتا من اجل الملف : %[1]s" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "يتم استخدام النواة '%[1]s' من منصة داخل الملف %[2]s " -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "استخدام المكتبة %[1]s الإصدار %[2]s في المجلد: %[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "استخدام المكتبة %[1]s في المجلد: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "يتم استخدام النواة التي تم ترجمتها مسبقا %[1]s" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "يتم استخدام المكتبة التي تم ترجمتها مسبقا %[1]s" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "استخدام الملف المترجم سابقا: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "النسخة" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "رقم النسخة" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "القيم" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "التاكد من الملف الثنائي الذي سيتم رفعه قبل الرفع" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "النسخة" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "النسخ : %s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "تحذير , تعذرت تهيئة المنصة %s" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "تحذير , تعذر تهيئة الاداة %s" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "تحذير : المشروع سيترجم باستخدام مكتبة خاصة او اكثر . " -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2636,49 +2766,45 @@ msgstr "" "تحذير: المكتبة %[1]s تعمل على معمارية %[2]s وقد لا تتوافق مع لوحتك الحالية " "التي تعمل على معمارية %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "يتم انتظار منفذ الرفع (upload port) ... " -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" "تحذير , اللوحة %[1]s لا تُعرّف الخاصة %[2]s . تم وضع التحديد الالي لـ %[3]s" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "الموقع : %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "جار كتابة اعدادات الضبط الحالية الى ملف الضبط" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "تكتب الاعدادات الضبط الحالية في ملف التهيئة داخل مجلد البيانات" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "جار كتابة ملف التهيئة : %v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" "لا يمكنك استخدام flag %s اثناء الترجمة باستخدام بروفايل (while compiling " "with a profile)" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "تلبيد \"hash\" الارشيف يختلف عن تلبيد \"hash\" الفهرس" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "الارشيف غير صالح : يوجد عدة ملفات داخل ملف zip في المرحلة العليا" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "الارشيف غير صالح : لا يوجد اي ملفات داخل ملف zip في المرحلة العليا" @@ -2686,375 +2812,346 @@ msgstr "الارشيف غير صالح : لا يوجد اي ملفات داخل msgid "archivePath" msgstr "مسار الارشيف" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "نمط arduino-preprocessor مفقود" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "الكشف التلقائي عن بقايا البناء : %s" - -#: internal/cli/feedback/stdio.go:35 +#: internal/cli/feedback/stdio.go:37 msgid "available only in text format" msgstr "متوفر في الوضع النصي حصرا" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "تعذر ايجاد الملف الثنائي (Binary file) داخل %s" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "اللوحة %s غير موجودة" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "اسم اللوحة" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "مجلد المكتبات المدمجة غير محدد" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "جار استدعاء %[1]s :%[2]w" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "تعذر العثور على اخر اصدار من %s" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "تعذر العثور على اخر اصدار من الاداة %s" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "تعذر ايحاد ملف المشروع الرئيسي داخل %s" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "تعذر ايجاد نمط للاكتشاف بواسطة id %s" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "تعذر استعادة standard error stream %s" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "تعذر استعادة standard error stream %s" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "المرشحون" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "تعذر تشغيل اداة الرفع : %s" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "جار التاكد من اكتمال ملف الارشيف" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "جار تنظيف مسار البناء (build path)" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "الامر" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "الامر '%[1]s' اخفق في : %[2]s" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "الامر اخفق : %s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" "التواصل غير متزامن (communication out of sync) , توقعتُ وصول '%[1]s' لكن وصل" " ما يلي '%[2]s'" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "جار حوسبة التلبيد \"hash\" : %s" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "جار نسخ المكتبة الى مجلد الوجهة" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "تعذر ايجاد ادوات صالحة للبناء (valid build artifact)" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "تعذر الكتابة فوقه" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "تعذر ازالة المكتبة القديمة" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "تعذر تحديث ملف المشروع" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "جار انشاء ملف تخزن مؤقت للنواة : %s" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "جار انشاء installed.json داخل %[1]s : %[2]s" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "جار انشاء مسار مؤقت للاستخراج : %s" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "" "قسم البيانات تخطى الحجم المتوفر في اللوحة (data section exceeds available " "space in board)" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "التبعية (dependency) '%s' غير متوفرة" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "الوجهة موجودة مسبقا" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "تعذر التثبيت لان مجلد الوجهة %s موجود مسبقا " -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "مجلد الوجهة موجودة مسبقا" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "المجلد غير موجود : %s" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "عملية الكشف %[1]s لم تبدأ : %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "المستكشف %s غير موجود" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "تعذر تثبيت المستكشف %s" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "تعذر ايجاد اصدار المستكشف %s" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "تنزيل نسخة محددة (في هذه الحالة ستكون النسخة 1.6.9)" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "تنزيل اخر نسخة من Arduino SAMD core" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "تم تحميله" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "جار تنزيل الاداة %[1]s : %[2]s" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "معرف اللوحة خالي (empty board identifier)" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "خطا اثناء تحميل ملفات المشروع :" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "تعذر فتح %s" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "تعذر تقطيع القيمة : %v" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "تعذر تقطيع قيود النسخة" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" "خطأ اثناء معالجة الرد من السيرفر (error processing response from server)" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "خطا اثناء القيام باستعلامات مع Arduino Cloud Api" -#: arduino/resources/install.go:67 +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" +msgstr "" + +#: internal/arduino/resources/install.go:77 msgid "extracting archive: %s" msgstr "جار استخراج الارشيف : %s" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "جار استخراج الارشيف : %w" - -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "تعذر حساب تلبيد \"hash\" ملف \"%s\"" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "تعذر تهيئة http client" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "حجم الارشيف الذي تم جلبه يختلف عن الحجم المحدد في الفهرس" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "ملفات الارشيف يجب ان توضع في مسار فرعي" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "جار البحث عن المسار المطلق (absolute path) لـ %s" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "الاعلام" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "الوصلة الرمزية symlink التالية %s" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "من اجل نسخة محددة" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "من اجل اخر نسخة" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "من اجل النسخة الحالية " -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "جار انتاج installation.id : %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "جار انتاج installation.secret : %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "" + +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "جار جلب معلومات ملف الارشيف : %s" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "جار جلب معلومات الارشيف : %s" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "جار جلب مسار الارشيف : %s" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "جار الحصول على خصائص البناء للوحة %[1]s : %[2]s " -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "جار الحصول على توابع المستكشف من اجل المنصة %[1]s:%[2]s" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "جار الحصول على توابع الشاشة من اجل المنصة %[1]s:%[2]s" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "جار الحصول على المجلد الاصل لـ %[1]s : %[2]s" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "جار الحصول على توابع الاداة من اجل المنصة %[1]s:%[2]s" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "لم يتم تحديد مجلد التثبيت" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "جار تثبيت الاداة %[1]s : %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "جار تثبيت المنصة %[1]s : %[2]s" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "الطرفية \"terminal \" التفاعلية لا تدعم تنسيق الخرج التالي %s" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "يوجد directive \"عبارة برمجية بداخل الكود المصدري\" غير صالحة %s" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "رسالة 'add' غير صالحة : المنفذ غير موجود" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "رسالة 'remove' غير صالحة : المنفذ غير موجود" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "تنسيق المجموع الاختباري \"checksum\" غير صالح : %s" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "اعداد التهيئة غير صالح : %s" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "معمارية النواة الفارغة غير صالحة '%s'" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "معطى النواة الفارغة غير صالح" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "اسم النواة الفارغة غير صالح '%s'" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "مرجع النواة الفارغة غير صالح '%s'" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "نسخة النواة الفارغة غير صالحة : %s" @@ -3066,83 +3163,82 @@ msgstr "اسم المكتبة الفارغة غير صالح " msgid "invalid empty library version: %s" msgstr "نسخة المكتبة الفارغة غير صالحة : %s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "تم ايجاد اعداد اعداد فارغ غير صالح" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "عنوان url لـ git غير صالح" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "علامة تلبيد \"hash\" غير صالحة '%[1]s' : %[2]s" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "عنصر غير صالح %s" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "يوجد directive للمكتبة \"عبارة برمجية بداخل الكود المصدري\" غير صالح %s" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "تخطيط المكتبة غير صالح : %s" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "موقع المكتبة غير صالح : %s" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "مكتبة غير صالحة : لا يوجد ترويسة في الملف" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "خيار غير صالح %s" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "خيار غير صالح %s" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "مسار غير صالح اثناء انشاء مجلد التهيئة %[1]s الخطا : %[2]w" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "مسار غير صالح اثناء كتابة ملف inventory %[1]s الخطا : %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" -msgstr "حجم ملف ارشيف المنصة غير صالح : %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "معرف المنصة غير صالح" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "عنوان url لفهرس المنصة غير صالح" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "مرجع الشاشة القابلة للوصل غير صالح : %s" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "قيمة الضبط الخاصة بالمنفذ غير صالحة : %s:%s" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" -msgstr "اعدادات الضبط للمنفذ غير صالحة" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" +msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "وصفة غير صالحة %[1]s : %[2]s" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " @@ -3152,150 +3248,161 @@ msgstr "" "\"_\" , المحارف المتبقية يمكنها ان تحوي \"-\" و \".\" بالاضافة الى ما سبق , " "المحرف الاخير لا يمكن ان يكون \".\"" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "قيمة خاطئة '%[1]s' من اجل الخيار %[2]s" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "مجلد النسخة خاطئ %s" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "نسخة خاطئة " -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "تعذر ايجاد المفتاح في الاعدادات" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "الكلمات المفتاحية" -#: arduino/libraries/librariesmanager/install.go:130 +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "مكتبات من أنشاء دانيل جراسيا" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:125 msgid "library %s already installed" msgstr "المكتبة %s مثبتة مسبقا" -#: arduino/libraries/librariesmanager/install.go:319 +#: internal/arduino/libraries/librariesmanager/install.go:342 msgid "library not valid" msgstr "المكتبة غير صالحة" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "مسار المكتبة غير موجود : %s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "جار الاستماع للمنافذ التسلسلية" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 msgid "loading %[1]s: %[2]s" msgstr "جار تحميل %[1]s:%[2]s" -#: arduino/cores/packagemanager/loader.go:351 +#: internal/arduino/cores/packagemanager/loader.go:314 msgid "loading boards: %s" msgstr "جار تحميل اللوحات : %s" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "جار تحميل حزمة الادوات من %s" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "جار تحميل ملف json index %[1]s : %[2]s" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "جار تحميل المكتبة من %[1]s : %[2]s" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "جار تحميل خصائص المكتبة (library.properties) : %s" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "جار تحميل المنصة اصدار %s" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "جار تحميل platform.txt" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "جار تحميل المنصات المطلوبة %s" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "جار تحميل الادوات المطلوبة %s" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "جار تحميل اصدار الاداة (tool release) في %s" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "جار البحث عن boards.txt داخل %s" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "الملف الرئيسي مفقود من المشروع : %s" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "يوجد directive \"عبارة برمجية بداخل الكود المصدري\" مفقودة %s" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "المجموع الاختباري (checksum) لـ %s مفقود" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "تعذر العثور على الحزمة %[1]s التي التي تشير اليها اللوحة %[2]s " -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" "يوجد حزمة مفقودة من الفهرس %s , لا يمكن ضمان التحديثات المستقبلية بسبب ذلك" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" "تعذر العثور على المنصة %[1]s : %[2]s التي التي تشير اليها اللوحة %[3]s" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" "تعذر العثور على المنصة اصدار (platform release) %[1]s : %[2]s التي التي تشير" " اليها اللوحة %[3]s" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" -msgstr "" +msgstr "هناك توقيع غير موجود" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "تعذر ايجاد اصدار المراقب : %s" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "جار نقل الارشيف الذي تم استخراجه الى مجلد الوجهة : %s" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "تم ايجاد اكثر من build artifacts : '%[1]s' و '%[2]s'" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "تم العثور على اكثر من ملف مشروع رئيسي main sketch file (%[1]v,%[2]v)" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" @@ -3303,115 +3410,110 @@ msgstr "" "لا يوجد نسخة متوافقة من الاداة %[1]s من اجل نظام التشغيل الحالي , جرب " "التواصل مع %[2]s" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "لم يتم تحديد اي برنامج قابل للتنفيذ (executable)" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "لا يوجد نسخ محددة" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "لم يتم تحديد مجلد/ملف المشروع او البناء " -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "لا يوجد ملف او مجلد مشابه" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "لا يوجد مجلد اصلي في الارشيف , تم ايجاد %[1]s و %[2]s" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "لم يتم تحديد اي منفذ للرفع" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "تعذر ايجاد اي مشروع صالح في %[2]s : %[1]sمفقود" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "لا يوجد نسخة متوفرة لنظام التشغيل الحالي , جرب التواصل مع %s" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "لا يعمل في الطرفية \"terminal\"" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "جار فتح ملف الارشيف : %s" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "جار فتح boards.txt" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "جار فتح منفذ عند 1200bps" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "جار فتح ملف التوقيع : %s" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "جار فتح الملف الهدف : %s" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "الحزمة %sغير موجودة " -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "الحزمة '%s' غير موجودة" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "جار تقطيع حزمة فهرس IDE" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "جار تقطيع FQBN : %s" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "جار تقطيع ملف library_index.json : %s" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "المسار المحدد ليس مجلدا لمنصة : %s" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "تعذر ايجاد المنصة %[1]s في الحزمة %[2]s" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "لا يوجد اصدارات متاحة للمنصة %s" - -#: arduino/cores/packagemanager/package_manager.go:298 +#: internal/arduino/cores/packagemanager/package_manager.go:309 msgid "platform %s is not installed" msgstr "المنصة %s غير مثبتة" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "المنصة غير متاحة لنظام التشغيل الخاص بك" + +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "المنصة غير مثبتة" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "الرجاء استخدام build-property-- بدلا من ذلك" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "تم اضافة الكشف عن الاشياء القابلة للوصل مسبقا : %s" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "المنفذ" @@ -3419,292 +3521,278 @@ msgstr "المنفذ" msgid "port not found: %[1]s %[2]s" msgstr "تعذر ايجاد المنفذ : %[1]s %[2]s" -#: arduino/monitor/monitor.go:236 +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "بروجرامر" + +#: internal/arduino/monitor/monitor.go:235 msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "نسخة البروتوكول غير مدعومة : تم طلب %[1]d , فكان الرد %[2]d" -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "نسخة البروتوكول غير مدعومة : تم طلب 1 , فكان الرد %d" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "يتم قراءة %[1]s : %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "جار قراءة المجلد %[1]s : %[2]s" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "جار قراءة المجلد %[1]s الذي يحوي %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "جار قراءة المجلد %s" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "جار قراءة المجلد %w الذي يحوي %s" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" +msgstr "جار قراءة محتويات المجلد %s" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "جار قراءة الملف %[1]s : %[2]s" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "جار قراءة الملفات %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "جاري قرأت الملفات" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "جار قراءة ترويسة المكتبة : %s" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "جار قراءة المجلد الاصلي للمكتبة %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "جار قراءة ترويسة المكتبة %w " +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "جار قراءة library_index.json : %s" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "جار قراءة المجلد الاصلي للحزمة : %s" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "جاري قرأت ملفات المذكرة" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "تعذر ايجاد الوصفة '%s'" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "تعذر ايجاد الاصدار %[1]s للاداة %[2]s" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "الاصدار لا يمكن ان يكون صفر \"nil\"" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "جار ازالة ملف الارشيف المتخرب %s" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "جار ازالة مجلد المكتبة %s" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "جار ازالة ملفات المنصة %s" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "تعذر ايجاد النسخة المطلوبة %[1]s من اجل المنصة %[2]s" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "جار ازالة المفاتيح العامة للاردوينو : %s" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "جار فحص الامثلة %s" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "جار البحث عن builtin_tools_versions.txt في %[1]s : %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "جاري فحص امثلة المذكرة" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "جار البحث عن المجلد الاصلي لـ %s" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "جار ضبط DTR الى OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" +msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "لا يمكن ان يكون اسم المشروع فارغا" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "اسم المشروع لا يمكن ان يكون اسما محجوزا \"%[1]s\"" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "اسم المشروع طويل جدا (%[1]d محرف) , الطول الاقصى المسموح به هو %[2]d" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "مسار المشروع غير صالح" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "مسار المشروع" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "المصدر \"source \" ليس مجلدا" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "جار بدء الاكتشاف %s" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "جار فحص المجموع الاختباري للارشيف %s" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "جار فحص حجم الارشيف : %s" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "جار فحص ما اذا كان الارشيف تم تخزينه مؤقتا %s" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "جار فحص تكامل ملف الارشيف المحلي : %s" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "القسم النصي تخطى المساحة المتوفرة في اللوحة" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "ربما قاعدة بيانات الترجمة ناقصة او غير دقيقة" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "هذه المنصة لا تملك اي اصدارات" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "استجاب السيرفر بالحالة %s" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "نفذ الوقت اثناء انتظار الرسالة " -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "نفذ الوقت اثناء انتظار الرسالة من %s" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "الاداة %s لا تتم ادارتها من قبل مدير الحزم" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "الاداة %s غير موجودة" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "الاداة '%[1]s' غير موجودة ضمن الحزمة '%[2]s'" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "الاداة غير مثبتة" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "اصدار الاداة غير موجود : %s" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "نسخة الاداة %s غير موجودة" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" "يجب ان يكون هناك اصدارين من نفس المكتبة %[1]s , هذا %[2]s و هذا %[3]s" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "تعذر حوسبة المسار النسبي للمشروع من اجل العنصر" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "تعذر انشاء مجلد لحفظ المشروع" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "تعذر انشاء مجلد يحوي العنصر" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr " %v : unable to marshal config to YAML" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "تعذر قراءة محتويات العنصر الهدف" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "تعذر قراءة محتويات العنصر الاصل" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "تعذر الكتابة الى المجلد الوجهة" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "حزمة غير معروفة %s" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "منصة غير معروفة %s:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "لاحقة المشروع غير معروفة '%s'" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "خوارزمية تليبد \"hash\" غير مدعومة %s" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "جار تحديث arduino:samd لاخر اصدار" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "تحديث كل شيء الى اخر اصدار" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "خطا اثناء الرفع %s" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "مجلد المستخدم غير محدد" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "ادخال المستخدم لا يدعم تنسيق الخرج '%s'" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "ادخال المستخدم غير مدعوم في الوضع الغير تفاعلي" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "الاصدار %s غير مدعوم من اجل نظام التشغيل الحالي" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "الاصدار %s غير موجود" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "تنسيق خاطئ في استجابة السيرفر" diff --git a/internal/locales/data/be.po b/internal/locales/data/be.po new file mode 100644 index 00000000000..6595aee80af --- /dev/null +++ b/internal/locales/data/be.po @@ -0,0 +1,3901 @@ +# +# Translators: +# lidacity <dzmitry@lidacity.by>, 2025 +# +msgid "" +msgstr "" +"Last-Translator: lidacity <dzmitry@lidacity.by>, 2025\n" +"Language-Team: Belarusian (https://app.transifex.com/arduino-1/teams/108174/be/)\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: internal/version/version.go:56 +msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" +msgstr "%[2]s%[1]sВерсія: %[3]s Фіксацыі: %[4]s Дата: %[5]s" + +#: internal/arduino/builder/internal/detector/detector.go:462 +msgid "%[1]s folder is no longer supported! See %[2]s for more information" +msgstr "" +"%[1]s каталог больш не падтрымліваецца!\n" +"Дадатковую інфармацыю глядзіце ў падзеле %[2]s" + +#: internal/arduino/builder/build_options_manager.go:140 +msgid "%[1]s invalid, rebuilding all" +msgstr "%[1]s несапраўдны, перабудаваць усё" + +#: internal/cli/lib/check_deps.go:125 +msgid "%[1]s is required but %[2]s is currently installed." +msgstr "Патрабуецца %[1]s, але ў дадзены момант усталяваны %[2]s." + +#: internal/arduino/builder/builder.go:487 +msgid "%[1]s pattern is missing" +msgstr "Шаблон %[1]s адсутнічае" + +#: internal/arduino/resources/download.go:51 +msgid "%s already downloaded" +msgstr "%s ужо спампаваны" + +#: commands/service_upload.go:782 +msgid "%s and %s cannot be used together" +msgstr "%s і %s не могуць ужывацца разам" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 +msgid "%s installed" +msgstr "%s усталяваны" + +#: internal/cli/lib/check_deps.go:122 +msgid "%s is already installed." +msgstr "%s ужо ўсталяваны." + +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 +msgid "%s is not a directory" +msgstr "%s не каталог" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 +msgid "%s is not managed by package manager" +msgstr "%s не кіруецца кіраўніком пакетаў" + +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "%s павинны быць >= 1024" + +#: internal/cli/lib/check_deps.go:119 +msgid "%s must be installed." +msgstr "%s павінен быць усталяваны." + +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 +msgid "%s pattern is missing" +msgstr "Шаблон %s адсутнічае" + +#: commands/cmderrors/cmderrors.go:818 +msgid "'%s' has an invalid signature" +msgstr "'%s' мае несапраўдную сігнатуру" + +#: internal/arduino/cores/packagemanager/package_manager.go:416 +msgid "" +"'build.core' and 'build.variant' refer to different platforms: %[1]s and " +"%[2]s" +msgstr "" +"'build.core' і 'build.variant' ставяцца да розных платформах:\n" +"%[1]s і %[2]s" + +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 +msgid "(hidden)" +msgstr "(схаваны)" + +#: internal/arduino/builder/libraries.go:303 +msgid "(legacy)" +msgstr "(састарэлы)" + +#: internal/cli/lib/install.go:82 +msgid "" +"--git-url and --zip-path are disabled by default, for more information see: " +"%v" +msgstr "" +"--git-url і --zip-path першапачаткова адключаныя, дадатковую інфармацыю " +"глядзіце ў падзеле: %v" + +#: internal/cli/lib/install.go:84 +msgid "" +"--git-url and --zip-path flags allow installing untrusted files, use it at " +"your own risk." +msgstr "" +"--git-url і --zip-path дазваляюць усталёўваць ненадзейныя файлы, ужывайце іх" +" на свой страх і рызыку." + +#: internal/cli/lib/install.go:87 +msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" +msgstr "" +"--git-url ці --zip-path не могуць быць выкарыстаныя з --install-in-builtin-" +"dir" + +#: commands/service_sketch_new.go:66 +msgid ".ino file already exists" +msgstr "Файл .ino ужо існуе" + +#: internal/cli/updater/updater.go:30 +msgid "A new release of Arduino CLI is available:" +msgstr "Новая версія Arduino CLI даступная:" + +#: commands/cmderrors/cmderrors.go:299 +msgid "A programmer is required to upload" +msgstr "Для выгрузкі патрабуецца праграматар" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "ARCH" +msgstr "Архітэктура" + +#: internal/cli/generatedocs/generatedocs.go:80 +msgid "ARDUINO COMMAND LINE MANUAL" +msgstr "Кіраўніцтва карыстальніка каманднага радка Arduino" + +#: internal/cli/usage.go:28 +msgid "Additional help topics:" +msgstr "Дадатковыя падзелы даведкі:" + +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 +msgid "Adds one or more values to a setting." +msgstr "Дадае адно ці некалькі значэнняў да налады." + +#: internal/cli/usage.go:23 +msgid "Aliases:" +msgstr "Псеўданім:" + +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "Усе платформы знаходзяцца ў актуальным стане." + +#: internal/cli/core/upgrade.go:87 +msgid "All the cores are already at the latest version" +msgstr "Усе ядры ўжо ўсталяваныя ў апошняй версіі" + +#: commands/service_library_install.go:136 +msgid "Already installed %s" +msgstr "%s ужо ўсталяваны" + +#: internal/arduino/builder/internal/detector/detector.go:91 +msgid "Alternatives for %[1]s: %[2]s" +msgstr "Варыянт для %[1]s: %[2]s" + +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 +msgid "An error occurred adding prototypes" +msgstr "Адбылася памылка пры даданні прататыпаў" + +#: internal/arduino/builder/internal/detector/detector.go:213 +msgid "An error occurred detecting libraries" +msgstr "Адбылася памылка пры выяўленні бібліятэк" + +#: internal/cli/daemon/daemon.go:87 +msgid "Append debug logging to the specified file" +msgstr "Дадаць часопіс адладкі ў паказаны файл" + +#: internal/cli/lib/search.go:208 +msgid "Architecture: %s" +msgstr "Архітэктура: %s" + +#: commands/service_sketch_archive.go:69 +msgid "Archive already exists" +msgstr "Архіў ужо існуе" + +#: internal/arduino/builder/core.go:164 +msgid "Archiving built core (caching) in: %[1]s" +msgstr "Архіваванне ўбудаванага ядра (кэшаванне) у: %[1]s" + +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 +msgid "Arduino CLI sketch commands." +msgstr "Каманды сцэнараў Arduino CLI." + +#: internal/cli/cli.go:88 +msgid "Arduino CLI." +msgstr "Arduino CLI." + +#: internal/cli/cli.go:89 +msgid "Arduino Command Line Interface (arduino-cli)." +msgstr "Інтэрфейс каманднага радка Arduino (arduino-cli)." + +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 +msgid "Arduino board commands." +msgstr "Каманды платы Arduino." + +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 +msgid "Arduino cache commands." +msgstr "Каманды кэшу Arduino." + +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 +msgid "Arduino commands about libraries." +msgstr "Каманды Arduino пра бібліятэкі." + +#: internal/cli/config/config.go:35 +msgid "Arduino configuration commands." +msgstr "Каманды налад Arduino." + +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 +msgid "Arduino core operations." +msgstr "Аперацыі ядра Arduino." + +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 +msgid "Arguments error: %v" +msgstr "Памылка ў аргументах: %v" + +#: internal/cli/board/attach.go:36 +msgid "Attaches a sketch to a board." +msgstr "Прымацаванне сцэнара да платы." + +#: internal/cli/lib/search.go:199 +msgid "Author: %s" +msgstr "Аўтар: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:78 +msgid "" +"Automatic library install can't be performed in this case, please manually " +"remove all duplicates and retry." +msgstr "" +"У гэтым выпадку аўтаматычнае ўсталяванне бібліятэкі немагчыма.\n" +"Калі ласка, выдаліце ўсе паўторы ўручную і паспрабуйце яшчэ раз." + +#: commands/service_library_uninstall.go:87 +msgid "" +"Automatic library uninstall can't be performed in this case, please manually" +" remove them." +msgstr "" +"У гэтым выпадку аўтаматычнае выдаленне бібліятэк немагчыма.\n" +"Калі ласка, выдаліце іх уручную." + +#: internal/cli/lib/list.go:138 +msgid "Available" +msgstr "Даступны" + +#: internal/cli/usage.go:25 +msgid "Available Commands:" +msgstr "Даступныя каманды:" + +#: internal/cli/upload/upload.go:75 +msgid "Binary file to upload." +msgstr "Двайковы файл для выгрузкі." + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "Board Name" +msgstr "Назва платы" + +#: internal/cli/board/details.go:139 +msgid "Board name:" +msgstr "Назва платы:" + +#: internal/cli/board/details.go:141 +msgid "Board version:" +msgstr "Версія платы:" + +#: internal/arduino/builder/sketch.go:245 +msgid "Bootloader file specified but missing: %[1]s" +msgstr "Паказаны файл загрузніка адсутнічае: %[1]s" + +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." +msgstr "" +"Зборкі ядраў і сцэнараў захоўваюцца ў дадзеных каталогу для кэшавання і " +"паўторнага ўжывання." + +#: internal/arduino/resources/index.go:65 +msgid "Can't create data directory %s" +msgstr "Не атрымалася стварыць каталог дадзеных %s" + +#: commands/cmderrors/cmderrors.go:511 +msgid "Can't create sketch" +msgstr "Не атрымалася стварыць сцэнар" + +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 +msgid "Can't download library" +msgstr "Не атрымалася спампаваць бібліятэку" + +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 +msgid "Can't find dependencies for platform %s" +msgstr "Не атрымалася знайсці залежнасці для платформы %s" + +#: commands/cmderrors/cmderrors.go:537 +msgid "Can't open sketch" +msgstr "Не атрымалася адчыніць сцэнар" + +#: commands/cmderrors/cmderrors.go:524 +msgid "Can't update sketch" +msgstr "Не атрымалася абнавіць сцэнар" + +#: internal/cli/arguments/arguments.go:38 +msgid "Can't use the following flags together: %s" +msgstr "Не атрымалася ўжываць наступныя птушкі разам: %s" + +#: internal/cli/daemon/daemon.go:117 +msgid "Can't write debug log: %s" +msgstr "Не атрымалася запісаць часопіс адладкі: %s" + +#: commands/service_compile.go:190 commands/service_compile.go:193 +msgid "Cannot create build cache directory" +msgstr "Не атрымалася стварыць каталог кэша зборкі" + +#: commands/service_compile.go:215 +msgid "Cannot create build directory" +msgstr "Не атрымалася стварыць каталог зборкі" + +#: internal/cli/config/init.go:100 +msgid "Cannot create config file directory: %v" +msgstr "Не атрымалася стварыць каталог канфігурацыйных файлаў: %v" + +#: internal/cli/config/init.go:124 +msgid "Cannot create config file: %v" +msgstr "Не атрымалася стварыць файл кафігурацыі: %v" + +#: commands/cmderrors/cmderrors.go:781 +msgid "Cannot create temp dir" +msgstr "Не атрымалася стварыць часовы каталог" + +#: commands/cmderrors/cmderrors.go:799 +msgid "Cannot create temp file" +msgstr "Не атрымалася стварыць часовы файл" + +#: internal/cli/config/delete.go:55 +msgid "Cannot delete the key %[1]s: %[2]v" +msgstr "Не атрымалася выдаліць ключ %[1]s: %[2]v" + +#: commands/service_debug.go:228 +msgid "Cannot execute debug tool" +msgstr "Не атрымалася запусціць сродак адладкі" + +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 +msgid "Cannot find absolute path: %v" +msgstr "Не атрымалася знайсці абсалютны шлях: %v" + +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "Не атрымалася здабыць канфігурацыйны ключ %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 +msgid "Cannot install platform" +msgstr "Не атрымалася ўсталяваць платформу" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 +msgid "Cannot install tool %s" +msgstr "Не атрымалася ўсталяваць інструмент %s" + +#: commands/service_upload.go:544 +msgid "Cannot perform port reset: %s" +msgstr "Не атрымалася скінуць порт: %s" + +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "Не атрымалася выдаліць канфігурацыйны ключ %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" +msgstr "Не атрымалася абнавіць платформу" + +#: internal/cli/lib/search.go:207 +msgid "Category: %s" +msgstr "Катэгорыя: %s" + +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 +msgid "Check dependencies status for the specified library." +msgstr "Праверыць стан залежнасцяў для паказанай бібліятэкі." + +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" +"Праверыць, ці падтрымлівае дадзеная камбінацыя платы і праграматара адладку." + +#: internal/arduino/resources/checksums.go:166 +msgid "Checksum differs from checksum in package.json" +msgstr "" +"Кантрольная сума адрозніваецца ад кантрольнай сумы ў файле package.json" + +#: internal/cli/board/details.go:190 +msgid "Checksum:" +msgstr "Кантрольная сума:" + +#: internal/cli/cache/cache.go:32 +msgid "Clean caches." +msgstr "Чысціць кэш." + +#: internal/cli/cli.go:181 +msgid "Comma-separated list of additional URLs for the Boards Manager." +msgstr "" +"Спіс дадатковых адрасоў URL для кіраўніка плат, які падзелены коскамі." + +#: internal/cli/board/list.go:56 +msgid "" +"Command keeps running and prints list of connected boards whenever there is " +"a change." +msgstr "" +"Каманда працягвае выконвацца і друкуе спіс злучаных плат кожны раз, калі " +"адбываюцца змяненні." + +#: commands/service_debug_config.go:178 commands/service_upload.go:452 +msgid "Compiled sketch not found in %s" +msgstr "Скампіляваны сцэнар не знойдзены ў %s" + +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 +msgid "Compiles Arduino sketches." +msgstr "Кампіляцыя сцэнараў Arduino." + +#: internal/arduino/builder/builder.go:421 +msgid "Compiling core..." +msgstr "Кампіляцыя ядра..." + +#: internal/arduino/builder/builder.go:400 +msgid "Compiling libraries..." +msgstr "Кампіляцыя бібліятэкі..." + +#: internal/arduino/builder/libraries.go:134 +msgid "Compiling library \"%[1]s\"" +msgstr "Кампіляцыя бібліятэкі \"%[1]s\"" + +#: internal/arduino/builder/builder.go:384 +msgid "Compiling sketch..." +msgstr "Кампіляцыя сцэнара" + +#: internal/cli/config/init.go:94 +msgid "" +"Config file already exists, use --overwrite to discard the existing one." +msgstr "" +"Канфігурацыйны файл ужо існуе, ужывайце --overwrite, каб выдаліць існуючы." + +#: internal/cli/config/init.go:179 +msgid "Config file written to: %s" +msgstr "Канфігурацыйны файл запісаны ў: %s" + +#: internal/cli/debug/debug.go:250 +msgid "Configuration options for %s" +msgstr "Канфігурацыйныя налады для %s" + +#: internal/cli/monitor/monitor.go:78 +msgid "" +"Configure communication port settings. The format is " +"<ID>=<value>[,<ID>=<value>]..." +msgstr "" +"Наладзьце налады камунікацыйнага порта.\n" +"Фармат <ID> =<value>[<ID>,=<value>]..." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +msgid "Configuring platform." +msgstr "Наладзіць платформу." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 +msgid "Configuring tool." +msgstr "Наладзіць інструмент." + +#: internal/cli/board/list.go:198 +msgid "Connected" +msgstr "Злучаны" + +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "" +"Злучэнне з %s.\n" +"Націсніце Ctrl+C для выхаду." + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Core" +msgstr "Ядро" + +#: internal/cli/configuration/network.go:127 +msgid "Could not connect via HTTP" +msgstr "Не атрымалася злучыцца па пратаколе HTTP" + +#: commands/instances.go:487 +msgid "Could not create index directory" +msgstr "Не атрымалася стварыць індэксны каталог" + +#: internal/arduino/builder/core.go:42 +msgid "Couldn't deeply cache core build: %[1]s" +msgstr "Не атрымалася глыбока кэшаваць зборку ядра: %[1]s" + +#: internal/arduino/builder/sizer.go:155 +msgid "Couldn't determine program size" +msgstr "Не ўдалося вызначыць памер праграмы" + +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 +msgid "Couldn't get current working directory: %v" +msgstr "Не атрымалася здабыць бягучы працоўны каталог: %v" + +#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 +msgid "Create a new Sketch" +msgstr "Стварыць новы сцэнар" + +#: internal/cli/compile/compile.go:101 +msgid "Create and print a profile configuration from the build." +msgstr "Стварыць і надрукаваць канфігурацыі профілю з зборкі." + +#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 +msgid "Creates a zip file containing all sketch files." +msgstr "Стварэнне файлу zip, які змяшчае ўсе файлы сцэнара." + +#: internal/cli/config/init.go:46 +msgid "" +"Creates or updates the configuration file in the data directory or custom " +"directory with the current configuration settings." +msgstr "" +"Стварэнне ці абнаўленне файлу канфігурацыі ў каталогу дадзеных або " +"карыстальніцкім каталогу з бягучымі наладамі канфігурацыі." + +#: internal/cli/compile/compile.go:340 +msgid "" +"Currently, Build Profiles only support libraries available through Arduino " +"Library Manager." +msgstr "" +"У бягучы час профілі зборкі падтрымліваюць толькі бібліятэкі, якія даступныя" +" праз кіраванне бібліятэкамі Arduino." + +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" +msgstr "Карыстальніцкая канфігурацыя для %s:" + +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 +msgid "DEPRECATED" +msgstr "САСТАРЭЛЫ" + +#: internal/cli/daemon/daemon.go:195 +msgid "Daemon is now listening on %s:%s" +msgstr "Дэман зараз слухае на %s: %s" + +#: internal/cli/debug/debug.go:53 +msgid "Debug Arduino sketches." +msgstr "Адладзіць сцэнары Arduino." + +#: internal/cli/debug/debug.go:54 +msgid "" +"Debug Arduino sketches. (this command opens an interactive gdb session)" +msgstr "" +"Адладзіць сцэнары Arduino (дадзеная каманда адчыняе інтэрактыўны сеанс gdb)." + +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 +msgid "Debug interpreter e.g.: %s" +msgstr "Адладкавы інтэрпрэтатар, напрыклад: %s" + +#: commands/service_debug_config.go:215 +msgid "Debugging not supported for board %s" +msgstr "Адладка не падтрымліваецца для платы %s" + +#: internal/cli/monitor/monitor.go:331 +msgid "Default" +msgstr "Першапачаткова" + +#: internal/cli/board/attach.go:115 +msgid "Default FQBN set to" +msgstr "Першапачатковы FQBN роўны" + +#: internal/cli/board/attach.go:114 +msgid "Default port set to" +msgstr "Першапачатковы порт усталяваны на" + +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "Першапачатковы праграматар усталяваны на" + +#: internal/cli/cache/clean.go:32 +msgid "Delete Boards/Library Manager download cache." +msgstr "Выдаліць кэш спампоўкі плат/кіраўніка бібліятэк." + +#: internal/cli/cache/clean.go:33 +msgid "" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "" +"Выдаліць змест каталогу кэша спамовак, у якой захоўваюцца архіўныя файлы " +"падчас ўсталяваняў бібліятэк і платформаў плат." + +#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 +msgid "Deletes a settings key and all its sub keys." +msgstr "Выдаленне клавішы налады і ўсіх яе дадатковых клавішы." + +#: internal/cli/lib/search.go:215 +msgid "Dependencies: %s" +msgstr "Залежнасці: %s" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 +msgid "Description" +msgstr "Апісанне" + +#: internal/arduino/builder/builder.go:314 +msgid "Detecting libraries used..." +msgstr "Выяўленне бібліятэк, якія ўжываюцца..." + +#: internal/cli/board/list.go:46 +msgid "" +"Detects and displays a list of boards connected to the current computer." +msgstr "" +"Выяўленне і адлюстраванне спісу плат, якія злучаныя да бягучага кампутара." + +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 +msgid "Directory containing binaries for debug." +msgstr "Каталог, які змяшчае двайковыя файлы для адладкі." + +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 +msgid "Directory containing binaries to upload." +msgstr "Каталог, які змяшчае двайковыя файлы для выгрузкі." + +#: internal/cli/generatedocs/generatedocs.go:45 +msgid "" +"Directory where to save generated files. Default is './docs', the directory " +"must exist." +msgstr "" +"Каталог, у які будуць захаваныя створаныя файлы.\n" +"Першапачаткова ўжываецца './ docs', дадзеныкаталог павінен існаваць." + +#: internal/cli/completion/completion.go:44 +msgid "Disable completion description for shells that support it" +msgstr "Адключыць апісанне завяршэння для абалонак, якія яго падтрымліваюць" + +#: internal/cli/board/list.go:199 +msgid "Disconnected" +msgstr "Раз'яднаны" + +#: internal/cli/daemon/daemon.go:90 +msgid "Display only the provided gRPC calls" +msgstr "Адлюстраваць толькі прадстаўленыя выклікі gRPC" + +#: internal/cli/lib/install.go:62 +msgid "Do not install dependencies." +msgstr "Не ўсталёўваць залежнасці." + +#: internal/cli/lib/install.go:63 +msgid "Do not overwrite already installed libraries." +msgstr "Ня перазапісваць ужо ўсталяваныя бібліятэкі." + +#: internal/cli/core/install.go:56 +msgid "Do not overwrite already installed platforms." +msgstr "Ня перазапісваць ужо ўсталяваныя платформы." + +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 +msgid "Do not perform the actual upload, just log out actions" +msgstr "Не выконваць фактычную выгрузку, проста выйсці з сістэмы" + +#: internal/cli/daemon/daemon.go:81 +msgid "Do not terminate daemon process if the parent process dies" +msgstr "Не завяршаць дэманічны працэс, калі бацькоўскі працэс памірае" + +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" +"Не спрабаваць абнаўляць залежнасці бібліятэкі, калі яны ўжо ўсталяваныя." + +#: commands/service_library_download.go:92 +msgid "Downloading %s" +msgstr "Спампоўка %s" + +#: internal/arduino/resources/index.go:137 +msgid "Downloading index signature: %s" +msgstr "Спампоўка індэкснай сігнатуры: %s" + +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 +msgid "Downloading index: %s" +msgstr "Спамоўка індэксаў: %s" + +#: commands/instances.go:372 +msgid "Downloading library %s" +msgstr "Спампоўка бібліятэкі %s" + +#: commands/instances.go:54 +msgid "Downloading missing tool %s" +msgstr "Спампоўка інструмента %s, які адсутнічае" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 +msgid "Downloading packages" +msgstr "Спампоўка пакетаў" + +#: internal/arduino/cores/packagemanager/profiles.go:101 +msgid "Downloading platform %s" +msgstr "Спампоўка платформы %s" + +#: internal/arduino/cores/packagemanager/profiles.go:177 +msgid "Downloading tool %s" +msgstr "Спампоўка інструмента %s" + +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 +msgid "Downloads one or more cores and corresponding tool dependencies." +msgstr "" +"Спампаванне аднаго ці некалькі ядраў і адпаведныя залежнасці інструментаў." + +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 +msgid "Downloads one or more libraries without installing them." +msgstr "Спампаванне адной ці некалькі бібліятэк, не ўсталёўваючы іх." + +#: internal/cli/daemon/daemon.go:84 +msgid "Enable debug logging of gRPC calls" +msgstr "Уключыць вядзенне часопіса адладкі выклікаў gRPC" + +#: internal/cli/lib/install.go:65 +msgid "Enter a path to zip file" +msgstr "Увясці шлях да файлу zip" + +#: internal/cli/lib/install.go:64 +msgid "Enter git url for libraries hosted on repositories" +msgstr "Увясць адрас URL git для бібліятэк, якія размешчаныя ў сховішчах" + +#: commands/service_sketch_archive.go:105 +msgid "Error adding file to sketch archive" +msgstr "Памылка пры даданні файла ў архіў сцэнараў" + +#: internal/arduino/builder/core.go:170 +msgid "Error archiving built core (caching) in %[1]s: %[2]s" +msgstr "Памылка архівавання ўбудаванага ядра (кэшавання) у %[1]s: %[2]s" + +#: internal/cli/sketch/archive.go:85 +msgid "Error archiving: %v" +msgstr "Памылка пры архіваванні: %v" + +#: commands/service_sketch_archive.go:93 +msgid "Error calculating relative file path" +msgstr "Памылка пры вылічэнні адноснага шляху да файла" + +#: internal/cli/cache/clean.go:48 +msgid "Error cleaning caches: %v" +msgstr "Памылка пры ачысткі кэшу: %v" + +#: internal/cli/compile/compile.go:225 +msgid "Error converting path to absolute: %v" +msgstr "Памылка пры пераўтварэнні шляху ў абсалютны: %v" + +#: commands/service_compile.go:420 +msgid "Error copying output file %s" +msgstr "Памылка пры капіяванні выхаднога файла %s" + +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "Памылка пры стварэнні канфігурацыі: %v" + +#: internal/cli/instance/instance.go:43 +msgid "Error creating instance: %v" +msgstr "Памылка пры стварэнні асобніка: %v" + +#: commands/service_compile.go:403 +msgid "Error creating output dir" +msgstr "Памылка пры стварэнні выходнага каталогу" + +#: commands/service_sketch_archive.go:81 +msgid "Error creating sketch archive" +msgstr "Памылка пры стварэнні архіва сцэнараў" + +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 +msgid "Error creating sketch: %v" +msgstr "Памылка пры стварэнні эскізу: %v" + +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 +msgid "Error detecting boards: %v" +msgstr "Памылка пры выяўленні платы: %v" + +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 +msgid "Error downloading %[1]s: %[2]v" +msgstr "Памылка пры спампоўцы %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 +msgid "Error downloading %s" +msgstr "Памылка пры спампоўцы %s" + +#: commands/instances.go:661 internal/arduino/resources/index.go:83 +msgid "Error downloading index '%s'" +msgstr "Памылка пры спампоўцы індэксу '%s'" + +#: internal/arduino/resources/index.go:138 +msgid "Error downloading index signature '%s'" +msgstr "Памылка пры спампоўцы індэкснай сігнатуры '%s'" + +#: commands/instances.go:382 commands/instances.go:388 +msgid "Error downloading library %s" +msgstr "Памылка пры спамоўцы бібліятэкі %s" + +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 +msgid "Error downloading platform %s" +msgstr "Памылка пры спампоўцы платформы %s" + +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 +msgid "Error downloading tool %s" +msgstr "Памылка пры спампоўцы інструменту %s" + +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 +msgid "Error during Debug: %v" +msgstr "Памылка падчас адладкі: %v" + +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 +msgid "Error during JSON encoding of the output: %v" +msgstr "Памылка пры кадаванні выходных дадзеных у фармаце Json: %v" + +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 +msgid "Error during Upload: %v" +msgstr "Памылка падчас выгрузкі: %v" + +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" +msgstr "Памылка падчас выяўленні платы" + +#: internal/cli/compile/compile.go:394 +msgid "Error during build: %v" +msgstr "Памылка падчас зборкі: %v" + +#: internal/cli/core/install.go:81 +msgid "Error during install: %v" +msgstr "Памылка падчас усталявання: %v" + +#: internal/cli/core/uninstall.go:75 +msgid "Error during uninstall: %v" +msgstr "Памылка падчас выдалення: %v" + +#: internal/cli/core/upgrade.go:136 +msgid "Error during upgrade: %v" +msgstr "Памылка падчас абнаўлення: %v" + +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 +msgid "Error extracting %s" +msgstr "Памылка пыр выманні %s" + +#: commands/service_upload.go:449 +msgid "Error finding build artifacts" +msgstr "Памылка пры выяўленні артэфактаў зборкі" + +#: internal/cli/debug/debug.go:139 +msgid "Error getting Debug info: %v" +msgstr "Памылка пры атрыманні адладкавай інфармацыі: %v" + +#: commands/service_sketch_archive.go:57 +msgid "Error getting absolute path of sketch archive" +msgstr "Памылка пры атрыманні абсалютнага шляху да архіва сцэнараў" + +#: internal/cli/board/details.go:74 +msgid "Error getting board details: %v" +msgstr "Памылка пры атрыманні звестак пра плату: %v" + +#: internal/arduino/builder/internal/compilation/database.go:82 +msgid "Error getting current directory for compilation database: %s" +msgstr "" +"Памылка пры атрыманні бягучага каталога для базы дадзеных кампіляцыі: %s" + +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" +"Памылка пры атрыманні першапачатковага порта з ' sketch.yaml`.\n" +"Праверце, ці правільна вы паказалі каталог сцэнара, ці пакажыце аргумент --port:" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 +msgid "Error getting information for library %s" +msgstr "Памылка пры атрыманні інфармацыі для бібліятэкі %s" + +#: internal/cli/lib/examples.go:75 +msgid "Error getting libraries info: %v" +msgstr "Памылка пры атрыманні інфармацыі пра бібліятэкі: %v" + +#: internal/cli/arguments/fqbn.go:96 +msgid "Error getting port metadata: %v" +msgstr "Памылка пры атрыманні метададзеных порта: %v" + +#: internal/cli/monitor/monitor.go:154 +msgid "Error getting port settings details: %s" +msgstr "Памылка пры атрыманні звестак пра налады порта: %s" + +#: internal/cli/upload/upload.go:169 +msgid "Error getting user input" +msgstr "Памылка пры атрыманні карыстальніцкага ўводу" + +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 +msgid "Error initializing instance: %v" +msgstr "Памылка пры ініцыялізацыі асобніка: %v" + +#: internal/cli/lib/install.go:148 +msgid "Error installing %s: %v" +msgstr "Памылка пры ўсталяванні %s: %v" + +#: internal/cli/lib/install.go:122 +msgid "Error installing Git Library: %v" +msgstr "Памылка пры ўсталяванні бібліятэкі Git: %v" + +#: internal/cli/lib/install.go:100 +msgid "Error installing Zip Library: %v" +msgstr "Памылка пры ўсталяванні бібліятэкі Zip: %v" + +#: commands/instances.go:398 +msgid "Error installing library %s" +msgstr "Памылка пры ўсталяванні бібліятэкі %s" + +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 +msgid "Error installing platform %s" +msgstr "Памылка пры ўсталяванні платформы %s" + +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 +msgid "Error installing tool %s" +msgstr "Памылка пры ўсталяванні інструмента %s" + +#: internal/cli/board/listall.go:66 +msgid "Error listing boards: %v" +msgstr "Памылка пры пералічэнні плат: %v" + +#: internal/cli/lib/list.go:91 +msgid "Error listing libraries: %v" +msgstr "Памылка пры пералічэнні бібліятэк: %v" + +#: internal/cli/core/list.go:69 +msgid "Error listing platforms: %v" +msgstr "Памылка пры пералічэнні платформ: %v" + +#: commands/cmderrors/cmderrors.go:424 +msgid "Error loading hardware platform" +msgstr "Памылка пры загрузцы апаратнай платформы" + +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 +msgid "Error loading index %s" +msgstr "Памылка пры загрузцы індэкса %s" + +#: internal/arduino/resources/index.go:99 +msgid "Error opening %s" +msgstr "Памылка пры адкрыцці %s" + +#: internal/cli/daemon/daemon.go:111 +msgid "Error opening debug logging file: %s" +msgstr "Памылка пры адкрыцці файла часопіса адладкі: %s" + +#: internal/cli/compile/compile.go:196 +msgid "Error opening source code overrides data file: %v" +msgstr "" +"Памылка пры адкрыцці зыходнага кода, які перавызначае файл дадзеных: %v" + +#: internal/cli/compile/compile.go:209 +msgid "Error parsing --show-properties flag: %v" +msgstr "Памылка пры разборы аргумента --show-properties: %v" + +#: commands/service_compile.go:412 +msgid "Error reading build directory" +msgstr "Памылка пры чытанні каталога зборкі" + +#: commands/service_sketch_archive.go:75 +msgid "Error reading sketch files" +msgstr "Памылка пры чытанні файлаў сцэнара" + +#: internal/cli/lib/check_deps.go:72 +msgid "Error resolving dependencies for %[1]s: %[2]s" +msgstr "Памылка пры выпраўленні ў залежнасці для %[1]s: %[2]s" + +#: internal/cli/core/upgrade.go:68 +msgid "Error retrieving core list: %v" +msgstr "Памылка пры выманні спісу ядраў: %v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 +msgid "Error rolling-back changes: %s" +msgstr "Памылка пры адкаце змяненняў: %s" + +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 +msgid "Error saving downloaded index" +msgstr "Памылка пры захаванні спампаванага індэкса" + +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 +msgid "Error saving downloaded index signature" +msgstr "Памылка пры захаванні спампаванай індэкснай сігнатуры" + +#: internal/cli/board/search.go:63 +msgid "Error searching boards: %v" +msgstr "Памылка пры пошуку плат: %v" + +#: internal/cli/lib/search.go:126 +msgid "Error searching for Libraries: %v" +msgstr "Памылка пры пошуку па бібліятэках: %v" + +#: internal/cli/core/search.go:82 +msgid "Error searching for platforms: %v" +msgstr "Памылка пры пошуку па платформах: %v" + +#: internal/arduino/builder/internal/compilation/database.go:67 +msgid "Error serializing compilation database: %s" +msgstr "Памылка пры серыялізацыі базы дадзеных кампіляцыі: %s" + +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "Памылка пры наладзе рэжыму raw: %s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "Памылка пры заданні значэння: %v" + +#: internal/cli/board/list.go:86 +msgid "Error starting discovery: %v" +msgstr "Памылкі выяўлення пры запуску: %v" + +#: internal/cli/lib/uninstall.go:67 +msgid "Error uninstalling %[1]s: %[2]v" +msgstr "Памылка пры выдаленні %[1]s: %[2]v" + +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 +msgid "Error updating library index: %v" +msgstr "Памылка пры абнаўленні індэксу бібліятэкі: %v" + +#: internal/cli/lib/upgrade.go:75 +msgid "Error upgrading libraries" +msgstr "Памылка пры абнаўленні бібліятэк" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 +msgid "Error upgrading platform: %s" +msgstr "Памылка пры абнаўленні платформы: %s" + +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 +msgid "Error verifying signature" +msgstr "Памылка пры праверцы сігнатуры" + +#: internal/arduino/builder/internal/detector/detector.go:369 +msgid "Error while detecting libraries included by %[1]s" +msgstr "Памылка пры выяўленні бібліятэк, якія ўключаныя %[1]s" + +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 +msgid "Error while determining sketch size: %s" +msgstr "Памылка пры вызначэнні памеру сцэнара: %s" + +#: internal/arduino/builder/internal/compilation/database.go:70 +msgid "Error writing compilation database: %s" +msgstr "Памылка пры запісу базы дадзеных кампіляцыі: %s" + +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "Памылка пры запісу ў файл: %v" + +#: internal/cli/completion/completion.go:56 +msgid "Error: command description is not supported by %v" +msgstr "Памылка: апісанне каманды не падтрымліваецца %v" + +#: internal/cli/compile/compile.go:202 +msgid "Error: invalid source code overrides data file: %v" +msgstr "Памылка: няправільны зыходны код, які перавызначае файл дадзеных: %v" + +#: internal/cli/board/list.go:104 +msgid "Event" +msgstr "Падзея" + +#: internal/cli/lib/examples.go:123 +msgid "Examples for library %s" +msgstr "Прыклады для бібліятэкі %s" + +#: internal/cli/usage.go:24 +msgid "Examples:" +msgstr "Прыклады:" + +#: internal/cli/debug/debug.go:233 +msgid "Executable to debug" +msgstr "Выкананы файл для адладкі" + +#: commands/service_debug_config.go:181 commands/service_upload.go:455 +msgid "Expected compiled sketch in directory %s, but is a file instead" +msgstr "" +"Чаканы скампіляваны сцэнар знаходзіцца ў каталогу %s, але замест гэтага ён " +"уяўляе сабой файл" + +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "FQBN" +msgstr "FQBN" + +#: internal/cli/board/details.go:140 +msgid "FQBN:" +msgstr "FQBN:" + +#: commands/service_upload.go:578 +msgid "Failed chip erase" +msgstr "Не атрымалася сцерці чып" + +#: commands/service_upload.go:585 +msgid "Failed programming" +msgstr "Не атрымалася праграмаванне" + +#: commands/service_upload.go:581 +msgid "Failed to burn bootloader" +msgstr "Не атрымалася запісаць загрузнік" + +#: commands/instances.go:88 +msgid "Failed to create data directory" +msgstr "Не атрымалася стварыць каталог дадзеных" + +#: commands/instances.go:77 +msgid "Failed to create downloads directory" +msgstr "Не атрымалася стварыць каталог для спамповак" + +#: internal/cli/daemon/daemon.go:150 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." +msgstr "" +"Не атрымалася праслухаць порт TCP: %[1]s.\n" +"%[2]s - недапушчальны порт." + +#: internal/cli/daemon/daemon.go:145 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." +msgstr "" +"Не атрымалася праслухаць порт TCP: %[1]s.\n" +"%[2]s невядомая назва." + +#: internal/cli/daemon/daemon.go:157 +msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" +msgstr "" +"Не атрымалася праслухаць порт TCP: %[1]s.\n" +"Нечаканая памылка: %[2]v" + +#: internal/cli/daemon/daemon.go:155 +msgid "Failed to listen on TCP port: %s. Address already in use." +msgstr "" +"Не атрымалася праслухаць порт TCP: %s.\n" +"Адрас, які ўжо ўжываецца." + +#: commands/service_upload.go:589 +msgid "Failed uploading" +msgstr "Не атрымалася выгрузіць" + +#: internal/cli/board/details.go:188 +msgid "File:" +msgstr "Файл:" + +#: commands/service_compile.go:163 +msgid "" +"Firmware encryption/signing requires all the following properties to be " +"defined: %s" +msgstr "" +"Для шыфравання/подпісу прашыўкі патрабуюцца ўсе наступныя ўласцівасці, якія " +"павінны быць вызначаныя: %s" + +#: commands/service_debug.go:187 +msgid "First message must contain debug request, not data" +msgstr "" +"Першае паведамленне павінна ўтрымліваць запыт на адладку, а не дадзеныя" + +#: internal/cli/arguments/arguments.go:49 +msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" +msgstr "" +"Аргумент %[1]s з'яўляецца абавязковым пры ўжыванні ў спалучэнні з: %[2]s" + +#: internal/cli/usage.go:26 +msgid "Flags:" +msgstr "Аргументы:" + +#: internal/cli/arguments/pre_post_script.go:38 +msgid "" +"Force run of post-install scripts (if the CLI is not running interactively)." +msgstr "" +"Прымусовы запуск сцэнараў пасля ўсталявання (калі CLI не запушчаны ў " +"інтэрактыўным рэжыме)." + +#: internal/cli/arguments/pre_post_script.go:40 +msgid "" +"Force run of pre-uninstall scripts (if the CLI is not running " +"interactively)." +msgstr "" +"Прымусовы запуск сцэнараў папярэдняга выдалення (калі CLI радка не запушчаны" +" ў інтэрактыўным рэжыме)." + +#: internal/cli/arguments/pre_post_script.go:39 +msgid "" +"Force skip of post-install scripts (if the CLI is running interactively)." +msgstr "" +"Прымусовы пропуск сцэнараў пасля ўсталявання (калі CLI запушчаны ў " +"інтэрактыўным рэжыме)." + +#: internal/cli/arguments/pre_post_script.go:41 +msgid "" +"Force skip of pre-uninstall scripts (if the CLI is running interactively)." +msgstr "" +"Прымусовы пропуск сцэнараў папярэдняга выдалення (калі CLI запушчаны ў " +"інтэрактыўным рэжыме)." + +#: commands/cmderrors/cmderrors.go:839 +msgid "Found %d platforms matching \"%s\": %s" +msgstr "Знойдзены платформы %d, якія адпаведныя \"%s\": %s" + +#: internal/cli/arguments/fqbn.go:39 +msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" +msgstr "Поўная назва платы, напрыклад: arduino:avr:uno" + +#: commands/service_debug.go:321 +msgid "GDB server '%s' is not supported" +msgstr "Сервер GDB '%s' не падтрымліваецца" + +#: internal/cli/generatedocs/generatedocs.go:38 +#: internal/cli/generatedocs/generatedocs.go:39 +msgid "Generates bash completion and command manpages." +msgstr "" +"Стварэнне старонкі кіравання завяршэннем абалонкі і камандамі дапамогі." + +#: internal/cli/completion/completion.go:38 +msgid "Generates completion scripts" +msgstr "Стварэнне сцэнару завяршэння" + +#: internal/cli/completion/completion.go:39 +msgid "Generates completion scripts for various shells" +msgstr "Стварэнне сцэнару завяршэння для розных абалонак" + +#: internal/arduino/builder/builder.go:334 +msgid "Generating function prototypes..." +msgstr "Стварэнне прататыпаў функцый..." + +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "Вяртае значэнне ключа налады." + +#: internal/cli/usage.go:27 +msgid "Global Flags:" +msgstr "Глабальныя аргументы:" + +#: internal/arduino/builder/sizer.go:166 +msgid "" +"Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " +"bytes for local variables. Maximum is %[2]s bytes." +msgstr "" +" Глабальныя зменныя ўжываюць %[1]s байтаў (%[3]s%% ) дынамічнай памяці, пакідаючы %[4]s байтаў для лакальных зменных.\n" +"Максімальнае значэнне - %[2]s байтаў." + +#: internal/arduino/builder/sizer.go:172 +msgid "Global variables use %[1]s bytes of dynamic memory." +msgstr "Глабальныя зменныя ўжываюць %[1]s байтаў дынамічнай памяці." + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 +msgid "ID" +msgstr "ID" + +#: internal/cli/board/details.go:111 +msgid "Id" +msgstr "Ідэнтыфікатар" + +#: internal/cli/board/details.go:154 +msgid "Identification properties:" +msgstr "Уласцівасці ідэнтыфікатару:" + +#: internal/cli/compile/compile.go:135 +msgid "If set built binaries will be exported to the sketch folder." +msgstr "" +"Калі зададзена, то створаныя двайковыя файлы будуць экспартаваныя ў каталог " +"сцэнараў." + +#: internal/cli/core/list.go:46 +msgid "" +"If set return all installable and installed cores, including manually " +"installed." +msgstr "" +"Калі зададзена, то вяртаюцца ўсе ўсталяваныя ядры, уключаючы ўсталяваныя " +"ўручную." + +#: internal/cli/lib/list.go:55 +msgid "Include built-in libraries (from platforms and IDE) in listing." +msgstr "Уключыць у спіс убудаваныя бібліятэкі (з платформаў і IDE)." + +#: internal/cli/sketch/archive.go:51 +msgid "Includes %s directory in the archive." +msgstr "Уключэнне каталогу %s у архіў." + +#: internal/cli/lib/install.go:66 +msgid "Install libraries in the IDE-Builtin directory" +msgstr "Усталяваць бібліятэкі ва ўбудаваным каталогу IDE" + +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 +msgid "Installed" +msgstr "Усталявана" + +#: commands/service_library_install.go:201 +msgid "Installed %s" +msgstr "Усталявана %s" + +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 +msgid "Installing %s" +msgstr "Усталяванне %s" + +#: commands/instances.go:396 +msgid "Installing library %s" +msgstr "Усталяванне бібліятэкі %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 +msgid "Installing platform %s" +msgstr "Усталяванне платформы %s" + +#: internal/arduino/cores/packagemanager/profiles.go:185 +msgid "Installing tool %s" +msgstr "Усталяванне інструмента %s" + +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 +msgid "Installs one or more cores and corresponding tool dependencies." +msgstr "" +"Усталёўвае адно ці некалькі ядраў і адпаведныя залежнасці інструментаў." + +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 +msgid "Installs one or more specified libraries into the system." +msgstr "Усталёўвае ў сістэму адну ці некалькі названых бібліятэк." + +#: internal/arduino/builder/internal/detector/detector.go:394 +msgid "Internal error in cache" +msgstr "Унутраная памылка ў кэшы" + +#: commands/cmderrors/cmderrors.go:377 +msgid "Invalid '%[1]s' property: %[2]s" +msgstr "Недапушчальная ўласцівасць '%[1]s': %[2]s" + +#: commands/cmderrors/cmderrors.go:60 +msgid "Invalid FQBN" +msgstr "Хібны FQBN" + +#: internal/cli/daemon/daemon.go:168 +msgid "Invalid TCP address: port is missing" +msgstr "Хібны адрас TCP: порт адсутнічае" + +#: commands/cmderrors/cmderrors.go:78 +msgid "Invalid URL" +msgstr "Хібны адрас URL" + +#: commands/instances.go:184 +msgid "Invalid additional URL: %v" +msgstr "Хібны дадатковы адрас URL: %v" + +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "Хібны архіў: файл %[1]s не знойдзены ў архіве %[2]s" + +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 +msgid "Invalid argument passed: %v" +msgstr "Перададзены хібны аргумент: %v" + +#: commands/service_compile.go:282 +msgid "Invalid build properties" +msgstr "Хібныя ўласцівасці зборкі" + +#: internal/arduino/builder/sizer.go:253 +msgid "Invalid data size regexp: %s" +msgstr "Хібны памер дадзеных рэгулярнага выразу: %s" + +#: internal/arduino/builder/sizer.go:259 +msgid "Invalid eeprom size regexp: %s" +msgstr "Хібны памер eeprom рэгулярнага выразу: %s" + +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "Хібны індэкс адрасу URL: %s" + +#: commands/cmderrors/cmderrors.go:46 +msgid "Invalid instance" +msgstr "Хібны асобнік" + +#: internal/cli/core/upgrade.go:114 +msgid "Invalid item %s" +msgstr "Хібны элемент %s" + +#: commands/cmderrors/cmderrors.go:96 +msgid "Invalid library" +msgstr "Хібная бібліятэка" + +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "Хібны ўзровень вядзення часопіса: %s" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "Хібная канфігурацыя сеткі: %s" + +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "Хібны network.proxy '%[1]s': %[2]s" + +#: internal/cli/cli.go:222 +msgid "Invalid output format: %s" +msgstr "Хібны фармат вываду: %s" + +#: commands/instances.go:581 +msgid "Invalid package index in %s" +msgstr "Хібны індэкс пакету ў %s" + +#: internal/cli/core/uninstall.go:63 +msgid "Invalid parameter %s: version not allowed" +msgstr "Хібная налада %s: версія не дазволеная" + +#: commands/service_board_identify.go:169 +msgid "Invalid pid value: '%s'" +msgstr "Хібнае значэнне pid: '%s'" + +#: commands/cmderrors/cmderrors.go:220 +msgid "Invalid profile" +msgstr "Хібны профіль" + +#: commands/service_monitor.go:270 +msgid "Invalid recipe in platform.txt" +msgstr "Хібныя пакеты ў platform.txt" + +#: internal/arduino/builder/sizer.go:243 +msgid "Invalid size regexp: %s" +msgstr "Хібны памер regexp: %s" + +#: main.go:86 +msgid "Invalid value in configuration" +msgstr "Хібнае значэнне ў канфігурацыі" + +#: commands/cmderrors/cmderrors.go:114 +msgid "Invalid version" +msgstr "Хібаня версія" + +#: commands/service_board_identify.go:166 +msgid "Invalid vid value: '%s'" +msgstr "Хібнае значэнне vid: '%s'" + +#: internal/cli/compile/compile.go:132 +msgid "" +"Just produce the compilation database, without actually compiling. All build" +" commands are skipped except pre* hooks." +msgstr "" +"Проста стварыце базу дадзеных для кампіляцыі, фактычна не кампіліруя яе.\n" +"Усе каманды зборкі прапушчаны, акрамя хукаў pre*." + +#: internal/cli/lib/list.go:39 +msgid "LIBNAME" +msgstr "Назва бібліятэкі" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "LIBRARY" +msgstr "Бібліятэка" + +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 +msgid "LIBRARY_NAME" +msgstr "Назва бібліятэкі" + +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 +msgid "Latest" +msgstr "Апошні" + +#: internal/arduino/builder/libraries.go:92 +msgid "Library %[1]s has been declared precompiled:" +msgstr "Бібліятэка %[1]s была абвешчаная папярэдне скампіляванай:" + +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 +msgid "" +"Library %[1]s is already installed, but with a different version: %[2]s" +msgstr "Бібліятэка %[1]s ужо ўсталяваная, але з іншай версіяй: %[2]s" + +#: commands/service_library_upgrade.go:137 +msgid "Library %s is already at the latest version" +msgstr "Бібліятэка %s ужо апошняй версіі" + +#: commands/service_library_uninstall.go:63 +msgid "Library %s is not installed" +msgstr "Бібліятэка %s не ўсталяваная" + +#: commands/instances.go:375 +msgid "Library %s not found" +msgstr "Бібліятэка %s не знойдзеная" + +#: commands/cmderrors/cmderrors.go:445 +msgid "Library '%s' not found" +msgstr "Бібліятэка '%s' не знойдзеная" + +#: internal/arduino/builder/internal/detector/detector.go:471 +msgid "" +"Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." +msgstr "" +"Бібліятэка не можа ўжываць абодва каталога '%[1]s' і '%[2]s'.\n" +"Праверце '%[3]s' яшчэ раз." + +#: commands/cmderrors/cmderrors.go:574 +msgid "Library install failed" +msgstr "Не атрымалася ўсталяваць бібліятэку" + +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 +msgid "Library installed" +msgstr "Бібліятэка ўсталяваная" + +#: internal/cli/lib/search.go:205 +msgid "License: %s" +msgstr "Ліцэнзія: %s" + +#: internal/arduino/builder/builder.go:437 +msgid "Linking everything together..." +msgstr "Звязваць усё разам..." + +#: internal/cli/board/listall.go:40 +msgid "" +"List all boards that have the support platform installed. You can search\n" +"for a specific board if you specify the board name" +msgstr "" +"Пералічыць усе платы, на якіх ўсталаваная платформа падтрымкі.\n" +"Вы можаце выканаць пошук па канкрэтнай плаце, калі пакажыце яе назву" + +#: internal/cli/board/listall.go:39 +msgid "List all known boards and their corresponding FQBN." +msgstr "Пералічыць усе вядомыя платы і адпаведныя ім FQBN." + +#: internal/cli/board/list.go:45 +msgid "List connected boards." +msgstr "Пералічыць злучаныя платы" + +#: internal/cli/arguments/fqbn.go:44 +msgid "" +"List of board options separated by commas. Or can be used multiple times for" +" multiple options." +msgstr "" +"Пералічыць налады платы, праз коску.\n" +"Ці можа ўжываць некалькі разоў для некалькіх налад." + +#: internal/cli/compile/compile.go:110 +msgid "" +"List of custom build properties separated by commas. Or can be used multiple" +" times for multiple properties." +msgstr "" +"Пералічычць карыстальніцкія ўласцівасцт зборкі, праз коску.\n" +"Ці можа ўжываць некалькі разоў для некалькіх уласцівасцяў." + +#: internal/cli/lib/list.go:57 +msgid "List updatable libraries." +msgstr "Спіс абноўленых бібліятэк." + +#: internal/cli/core/list.go:45 +msgid "List updatable platforms." +msgstr "Спіс абноўленых платформ." + +#: internal/cli/board/board.go:32 +msgid "Lists all connected boards." +msgstr "Спіс усех злучаных плат." + +#: internal/cli/outdated/outdated.go:41 +msgid "Lists cores and libraries that can be upgraded" +msgstr "Пералічыць ядры і бібліятэкі, якія можна абнавіць" + +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 +msgid "Loading index file: %v" +msgstr "Загрузка індэкснага файла: %v" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 +msgid "Location" +msgstr "Месцазнаходжанне" + +#: internal/arduino/builder/sizer.go:208 +msgid "Low memory available, stability problems may occur." +msgstr "" +"Недастаткова даступнай памяці, могуць узнікнуць праблемы са стабільнасцю." + +#: internal/cli/lib/search.go:200 +msgid "Maintainer: %s" +msgstr "Суправаджэнне: %s" + +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" +"Найбольшая колькасць паралельных кампілятараў.\n" +"Калі 0, будзе ўжывацца колькасць даступных працэсарных ядраў." + +#: internal/cli/arguments/discovery_timeout.go:32 +msgid "Max time to wait for port discovery, e.g.: 30s, 1m" +msgstr "Найбольшы час чакання выяўлення порта, напрыклад: 30 с, 1 м" + +#: internal/cli/cli.go:170 +msgid "" +"Messages with this level and above will be logged. Valid levels are: %s" +msgstr "" +"Паведамленні з дадзеным узроўнем і вышэй будуць рэгістравацца.\n" +"Дапушчальнымі ўзроўнямі з'яўляюцца:" + +#: internal/arduino/builder/internal/detector/detector.go:466 +msgid "Missing '%[1]s' from library in %[2]s" +msgstr "Адсутнічае '%[1]s' з бібліятэкі ў %[2]s" + +#: commands/cmderrors/cmderrors.go:169 +msgid "Missing FQBN (Fully Qualified Board Name)" +msgstr "Адсутнічае FQBN (поўная назва платы)" + +#: commands/cmderrors/cmderrors.go:260 +msgid "Missing port" +msgstr "Адсутнічае порт" + +#: commands/cmderrors/cmderrors.go:236 +msgid "Missing port address" +msgstr "Адсутнічае адрас порту" + +#: commands/cmderrors/cmderrors.go:248 +msgid "Missing port protocol" +msgstr "Адсутнічае порт пратаколу" + +#: commands/cmderrors/cmderrors.go:286 +msgid "Missing programmer" +msgstr "Адсутнічае праграматар" + +#: internal/cli/upload/upload.go:162 +msgid "Missing required upload field: %s" +msgstr "Адсутнічае абавязковае поле для выгрузкі: %s" + +#: internal/arduino/builder/sizer.go:247 +msgid "Missing size regexp" +msgstr "Адсутнічае памер regexp" + +#: commands/cmderrors/cmderrors.go:497 +msgid "Missing sketch path" +msgstr "Адсутнчіае шлях сцэнара" + +#: commands/cmderrors/cmderrors.go:358 +msgid "Monitor '%s' not found" +msgstr "Манітор '%s' не знойдзены" + +#: internal/cli/monitor/monitor.go:261 +msgid "Monitor port settings:" +msgstr "Налады манітора порта:" + +#: internal/arduino/builder/internal/detector/detector.go:156 +msgid "Multiple libraries were found for \"%[1]s\"" +msgstr "Было знойдзена некалькі бібліятэк для \"%[1]s\"" + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 +msgid "Name" +msgstr "Назва" + +#: internal/cli/lib/search.go:179 +msgid "Name: \"%s\"" +msgstr "Назва: \"%s\"" + +#: internal/cli/upload/upload.go:238 +msgid "New upload port: %[1]s (%[2]s)" +msgstr "Новы порт выгрузкі: %[1]s (%[2]s)" + +#: internal/cli/board/list.go:132 +msgid "No boards found." +msgstr "Плата не знойдзена" + +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "Не зададзены першапачатковы порт, FQBN ці праграматар" + +#: internal/cli/lib/examples.go:108 +msgid "No libraries found." +msgstr "Бібліятэкі не знойдзены." + +#: internal/cli/lib/list.go:130 +msgid "No libraries installed." +msgstr "Бібліятэкі не ўсталяваныя." + +#: internal/cli/lib/search.go:168 +msgid "No libraries matching your search." +msgstr "Няма бібліятэк, якія адпавядаюць вашаму запыту." + +#: internal/cli/lib/search.go:174 +msgid "" +"No libraries matching your search.\n" +"Did you mean...\n" +msgstr "" +"Няма бібліятэк, якія адпавядаюць вашаму запыту.\n" +"Вы мелі на ўвазе...\n" + +#: internal/cli/lib/list.go:128 +msgid "No libraries update is available." +msgstr "Абнаўленне бібліятэк недаступна." + +#: commands/cmderrors/cmderrors.go:274 +msgid "No monitor available for the port protocol %s" +msgstr "Манітор для пратаколу порта %s недаступны" + +#: internal/cli/outdated/outdated.go:95 +msgid "No outdated platforms or libraries found." +msgstr "Састарэлых платформаў ці бібліятэк не знойдзена." + +#: internal/cli/core/list.go:114 +msgid "No platforms installed." +msgstr "Платформы не ўсталяваныя." + +#: internal/cli/core/search.go:113 +msgid "No platforms matching your search." +msgstr "Няма платформаў, якія адпавядаюць вашаму запыту." + +#: commands/service_upload.go:534 +msgid "No upload port found, using %s as fallback" +msgstr "Порт выгрузкі не знойдзены, ўжываецца %s у якасці рэзервовага" + +#: commands/cmderrors/cmderrors.go:464 +msgid "No valid dependencies solution found" +msgstr "Не знойдзена дапушчальнага рашэння для залежнасцяў" + +#: internal/arduino/builder/sizer.go:198 +msgid "Not enough memory; see %[1]s for tips on reducing your footprint." +msgstr "" +"Недастаткова памяці; азнаёмцеся %[1]s з парадамі па памяншэнні займаемага " +"памеру." + +#: internal/arduino/builder/internal/detector/detector.go:159 +msgid "Not used: %[1]s" +msgstr "Не ўжываецца: %[1]s" + +#: internal/cli/board/details.go:187 +msgid "OS:" +msgstr "Аперацыйная сістэма:" + +#: internal/cli/board/details.go:145 +msgid "Official Arduino board:" +msgstr "Афіцыйная плата Arduino:" + +#: internal/cli/lib/search.go:98 +msgid "" +"Omit library details far all versions except the latest (produce a more " +"compact JSON output)." +msgstr "" +"Апусціце звесткі пра бібліятэку для ўсіх версій, акрамя апошняй (атрымаеце " +"больш кампактную выснову ў фармаце Json)." + +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 +msgid "Open a communication port with a board." +msgstr "Адчыніць камунікацыйны порт з дапамогай платы." + +#: internal/cli/board/details.go:200 +msgid "Option:" +msgstr "Налады:" + +#: internal/cli/compile/compile.go:120 +msgid "" +"Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." +msgstr "" +"Неабавязкова, можа быць: %s.\n" +"Ужываецца для ўказанні gcc, які ўзровень папярэджання ўжываць (аргумент -W)." + +#: internal/cli/compile/compile.go:133 +msgid "Optional, cleanup the build folder and do not use any cached build." +msgstr "Неабавязкова, ачысціць каталог зборкі і не ўжываць кэшаваныя зборкі." + +#: internal/cli/compile/compile.go:130 +msgid "" +"Optional, optimize compile output for debugging, rather than for release." +msgstr "" +"Неабавязкова, аптымізаваць выходныя дадзеныя кампіляцыі для адладкі, а не " +"для выпуску." + +#: internal/cli/compile/compile.go:122 +msgid "Optional, suppresses almost every output." +msgstr "Неабавязкова, душыць амаль усе выходныя дадзеныя." + +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 +msgid "Optional, turns on verbose mode." +msgstr "Неабавязкова, уключыць падрабязны рэжым." + +#: internal/cli/compile/compile.go:136 +msgid "" +"Optional. Path to a .json file that contains a set of replacements of the " +"sketch source code." +msgstr "" +"Неабавязкова, шлях да файла .json, які змяшчае набор замен зыходнага кода " +"сцэнара." + +#: internal/cli/compile/compile.go:112 +msgid "" +"Override a build property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Перавызначыць уласцівасць зборкі карыстальніцкім значэннем.\n" +"Можа ўжывацца некалькі разоў для некалькіх уласцівасцяў." + +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Перавызначыць уласцівасць адладкі карыстальніцкім значэннем.\n" +"Можа ўжывацца некалькі разоў для некалькіх уласцівасцяў." + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Перавызначыць выгружаную ўласцівасць карыстальніцкім значэннем.\n" +"Можа ўжывацца некалькі разоў для некалькіх уласцівасцяў." + +#: internal/cli/config/init.go:62 +msgid "Overwrite existing config file." +msgstr "Перазапісць існуючы канфігурацыйны файл." + +#: internal/cli/sketch/archive.go:52 +msgid "Overwrites an already existing archive" +msgstr "Перазапісвае ўжо існуючы архіў" + +#: internal/cli/sketch/new.go:46 +msgid "Overwrites an existing .ino sketch." +msgstr "Перазапісвае існуючы сцэнар .ino." + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "PACKAGER" +msgstr "Пакеты" + +#: internal/cli/board/details.go:165 +msgid "Package URL:" +msgstr "Пакет адраса URL:" + +#: internal/cli/board/details.go:164 +msgid "Package maintainer:" +msgstr "Спецыяліст па суправаджэнні пакетаў:" + +#: internal/cli/board/details.go:163 +msgid "Package name:" +msgstr "Назва пакета:" + +#: internal/cli/board/details.go:167 +msgid "Package online help:" +msgstr "Інтэрактыўная даведка пакету:" + +#: internal/cli/board/details.go:166 +msgid "Package website:" +msgstr "Вэб-сайт пакету:" + +#: internal/cli/lib/search.go:202 +msgid "Paragraph: %s" +msgstr "Абзац: %s" + +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 +msgid "Path" +msgstr "Шлях" + +#: internal/cli/compile/compile.go:129 +msgid "" +"Path to a collection of libraries. Can be used multiple times or entries can" +" be comma separated." +msgstr "" +"Шлях да калекцыі бібліятэк.\n" +"Можа ўжывацца некалькі разоў ці запісы могуць быць праз коску." + +#: internal/cli/compile/compile.go:127 +msgid "" +"Path to a single library’s root folder. Can be used multiple times or " +"entries can be comma separated." +msgstr "" +"Шлях да каранёвага каталогу адной бібліятэкі.\n" +"Можа ўжывацца некалькі разоў ці запісы могуць быць праз коску." + +#: internal/cli/cli.go:172 +msgid "Path to the file where logs will be written." +msgstr "Шлях да файла, у які будуць запісвацца логі." + +#: internal/cli/compile/compile.go:108 +msgid "" +"Path where to save compiled files. If omitted, a directory will be created " +"in the default temporary path of your OS." +msgstr "" +"Шлях для захавання скампіляваных файлаў.\n" +"Калі не паказаны, будзе створаны каталог ў першапачатковым часовым шляху вашай аперацыйнай сістэмы." + +#: commands/service_upload.go:515 +msgid "Performing 1200-bps touch reset on serial port %s" +msgstr "Выкананне сэнсарнага скіду з хуткасцю 1200 біт/с на паслядоўным порце" + +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 +msgid "Platform %s already installed" +msgstr "Платформа %s ужо ўсталяваная" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 +msgid "Platform %s installed" +msgstr "Платформа %s усталяваная" + +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 +msgid "" +"Platform %s is not found in any known index\n" +"Maybe you need to add a 3rd party URL?" +msgstr "" +"Платформа %s не знойдзена ні ў адным з вядомых індэксаў.\n" +"Ці можа быць, вам трэба дадаць 3 бок адрасу URL?" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 +msgid "Platform %s uninstalled" +msgstr "Платформа %s выдаленая" + +#: commands/cmderrors/cmderrors.go:482 +msgid "Platform '%s' is already at the latest version" +msgstr "Платформа '%s' ужо апошняй версіі" + +#: commands/cmderrors/cmderrors.go:406 +msgid "Platform '%s' not found" +msgstr "Платформа '%s' не знойдзеная" + +#: internal/cli/board/search.go:85 +msgid "Platform ID" +msgstr "Ідэнтыфікатар платформы" + +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 +msgid "Platform ID is not correct" +msgstr "Неправільны ідэнтыфікатар платформы" + +#: internal/cli/board/details.go:173 +msgid "Platform URL:" +msgstr "Адрас URL платформы:" + +#: internal/cli/board/details.go:172 +msgid "Platform architecture:" +msgstr "Архитэктура платформы:" + +#: internal/cli/board/details.go:171 +msgid "Platform category:" +msgstr "Катэгорыя платформы:" + +#: internal/cli/board/details.go:178 +msgid "Platform checksum:" +msgstr "Кантрольная сума платформы:" + +#: internal/cli/board/details.go:174 +msgid "Platform file name:" +msgstr "Имя файла платформы:" + +#: internal/cli/board/details.go:170 +msgid "Platform name:" +msgstr "Назва платформы:" + +#: internal/cli/board/details.go:176 +msgid "Platform size (bytes):" +msgstr "Памер платформы (у байтах):" + +#: commands/cmderrors/cmderrors.go:153 +msgid "" +"Please specify an FQBN. Multiple possible boards detected on port %[1]s with" +" protocol %[2]s" +msgstr "" +"Калі ласка, пакажыце FQBN.\n" +"У порце %[1]s з пратаколам %[2]s выяўлена некалькі магчымых плат" + +#: commands/cmderrors/cmderrors.go:133 +msgid "" +"Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" +" identified" +msgstr "" +"Калі ласка, пакажыце FQBN.\n" +"Плата, якая злучаная з портам %[1]s з адпаведным пратаколам %[2]s, не можа быць ідэнтыфікаваная" + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Port" +msgstr "Порт" + +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 +msgid "Port closed: %v" +msgstr "Порт зачынены: %v" + +#: commands/cmderrors/cmderrors.go:668 +msgid "Port monitor error" +msgstr "Памылка манитора порта" + +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 +msgid "Precompiled library in \"%[1]s\" not found" +msgstr "Папярэдне скампіляваная бібліятэка ў \"%[1]s\" не знойдзеная" + +#: internal/cli/board/details.go:42 +msgid "Print details about a board." +msgstr "Надрукаваць падрабязную інфармацыю пра плату." + +#: internal/cli/compile/compile.go:103 +msgid "Print preprocessed code to stdout instead of compiling." +msgstr "" +"Надрукаваць папярэдне апрацаваны код у стандартны вывад замест кампіляцыі." + +#: internal/cli/cli.go:166 internal/cli/cli.go:168 +msgid "Print the logs on the standard output." +msgstr "Надрукаваць часопісы ў стандартным фармаце вываду." + +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "Надрукаваць выходныя дадзеныя ў фармаце Json." + +#: internal/cli/config/dump.go:31 +msgid "Prints the current configuration" +msgstr "Друкуе бягучую канфігурацыю" + +#: internal/cli/config/dump.go:32 +msgid "Prints the current configuration." +msgstr "Друкуе бягучую канфігурацыю." + +#: commands/cmderrors/cmderrors.go:202 +msgid "Profile '%s' not found" +msgstr "Профіль '%s' не знойдзены" + +#: commands/cmderrors/cmderrors.go:339 +msgid "Programmer '%s' not found" +msgstr "Праграматар '%s' не знойдзены" + +#: internal/cli/board/details.go:111 +msgid "Programmer name" +msgstr "Назва праграматара" + +#: internal/cli/arguments/programmer.go:35 +msgid "Programmer to use, e.g: atmel_ice" +msgstr "Праграматар, які ўжываецца, напрыклад: atmel_ice" + +#: internal/cli/board/details.go:216 +msgid "Programmers:" +msgstr "Праграматары:" + +#: commands/cmderrors/cmderrors.go:391 +msgid "Property '%s' is undefined" +msgstr "Уласцівасць '%s' не вызначана" + +#: internal/cli/board/list.go:142 +msgid "Protocol" +msgstr "Пратакол" + +#: internal/cli/lib/search.go:212 +msgid "Provides includes: %s" +msgstr "Правайдэр уключэнняў: %s" + +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 +msgid "Removes one or more values from a setting." +msgstr "Выдаляе адно ці некалькі значэнняў з налады." + +#: commands/service_library_install.go:188 +msgid "Replacing %[1]s with %[2]s" +msgstr "Замена %[1]s на %[2]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 +msgid "Replacing platform %[1]s with %[2]s" +msgstr "Замена платформы %[1]s на %[2]s" + +#: internal/cli/board/details.go:184 +msgid "Required tool:" +msgstr "Неабходны інструмент:" + +#: internal/cli/monitor/monitor.go:79 +msgid "Run in silent mode, show only monitor input and output." +msgstr "" +"Запускаецца ў аўтаматычным рэжыме, адлюстроўваюцца толькі ўваходныя і " +"выходныя дадзеныя манітора." + +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "Запусціць Arduino CLI як дэман gRPC." + +#: internal/arduino/builder/core.go:43 +msgid "Running normal build of the core..." +msgstr "Выконваецца звычайная зборка ядра..." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 +msgid "Running pre_uninstall script." +msgstr "Выканаць сцэнар pre_uninstall." + +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "Пошук тэрм" + +#: internal/cli/debug/debug.go:238 +msgid "SVD file path" +msgstr "Шлях да файла SVD" + +#: internal/cli/compile/compile.go:106 +msgid "Save build artifacts in this directory." +msgstr "Захавайць артэфакты зборкі ў дадзеным каталогу." + +#: internal/cli/board/search.go:39 +msgid "Search for a board in the Boards Manager using the specified keywords." +msgstr "Знайсці плату ў кіраўніку плат, ужывая названыя ключавыя словы." + +#: internal/cli/board/search.go:38 +msgid "Search for a board in the Boards Manager." +msgstr "Знайсць плату ў кіраўніку плат." + +#: internal/cli/core/search.go:41 +msgid "Search for a core in Boards Manager using the specified keywords." +msgstr "Знайсці ядро ў кіраўніку плат, ужывая названыя ключавыя словы." + +#: internal/cli/core/search.go:40 +msgid "Search for a core in Boards Manager." +msgstr "Знайсць ядро ў кіраўніку плат." + +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"Выканаць пошук бібліятэк, якія адпавядаюць не аднаму ці больш пошукавым запытам.\n" +"\n" +"Усе пошукавыя запыты выконваюцца без уліку рэгістра.\n" +"Запыты, якія змяшчаюць некалькі пошукавых запытаў, будуць вяртаць толькі тыя бібліятэкі, якія адпавядаюць усім умовам.\n" +"\n" +"Умовы пошуку, якія не адпавядаюць сінтаксісу QV, які апісаныя ніжэй, з'яўляюцца базавымі ўмовамі пошуку і будуць адпавядаць бібліятэкам, якія ўтрымліваюць дадзены тэрмін у любым з наступных палёў:\n" +"- Аўтар\n" +"- Назва\n" +"- Абзац\n" +"- Правайдэр\n" +" - Прапанова\n" +"\n" +"Спецыяльны сінтаксіс, званы значэннем кваліфікатара (QV), паказвае на тое, што пошукавы запыт варта параўноўваць толькі з адным полем кожнага запісу бібліятэчнага індэкса.\n" +"У гэтым сінтаксісе ўжываецца назва індэкснага поля (без уліку рэгістра), знак роўнасці (=) ці двукроп'е (:) і значэнне, напрыклад \"name=ArduinoJson\" або \"provides:tinyusb.h\".\n" +"Пошукавыя запыты QV, у якіх ужываецца падзельнік двукроп'яў, будуць адпавядаць усім бібліятэкам з значэннем у любым месцы найменнага поля, а пошукавыя запыты QV, у якіх ужываецца падзельнік \"роўна\", будуць адпавядаць толькі бібліятэкам з дакладна названым значэннем у названае поле.\n" +"\n" +"Пошукавыя запыты QV могуць утрымліваць устаўленыя прабелы з ужываннем знакаў двайога двукосся (\"). частка значэння або ўвесь тэрмін цалкам, напрыклад, \"ategory=\"Data Processing\" і \"category=Data Processing\" эквівалентныя.\n" +"Тэрмін QV можа ўтрымліваць літаральны знак двайнога двукосся, перад якім ставіцца зваротная касая рыса (\\).\n" +"\n" +"Заўвага: пошукавыя запыты QV, якія ўжываюць знакі двайнога двукосся ці зваротнай касой рысы, якія перадаюцца ў якасці аргументаў каманднага радка, могуць быць заключаныя ў двукоссі ці экранаваныя, каб прадухіліць інтэрпрэтацыю гэтых знакаў каманднай абалонкай.\n" +"\n" +"У дадатак да палёў, якія пералічаныя вышэй, пошукавыя запыты QV могуць ужываць наступныя вызначальнікі:\n" +"- Архітэктура\n" +"- Катэгорыя\n" +"- Залежнасьць\n" +"- Ліцэнзія\n" +"- Суправаджальнік\n" +"- Тып\n" +"- Версія\n" +"- Вэб-сайт" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "Выконвае пошук адной ці некалькіх бібліятэк, якія адпаведныя запыту." + +#: internal/cli/lib/search.go:201 +msgid "Sentence: %s" +msgstr "Прапанова: %s" + +#: internal/cli/debug/debug.go:246 +msgid "Server path" +msgstr "Шлях да сервера" + +#: internal/arduino/httpclient/httpclient.go:61 +msgid "Server responded with: %s" +msgstr "Сервер адказаў паведамленнем: %s" + +#: internal/cli/debug/debug.go:245 +msgid "Server type" +msgstr "Тып сервера" + +#: internal/cli/upload/upload.go:83 +msgid "Set a value for a field required to upload." +msgstr "Задаць значэнне для поля, які неабходны для выгрузкі." + +#: internal/cli/monitor/monitor.go:76 +msgid "Set terminal in raw mode (unbuffered)." +msgstr "Задаць тэрмінал у неапрацаваным рэжыме (без буферызацыі)." + +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 +msgid "Sets a setting value." +msgstr "Задаць значэнне налады" + +#: internal/cli/cli.go:189 +msgid "" +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." +msgstr "" +"Задае першапачатковы каталог дадзеных (Arduino CLI будзе шукаць файл " +"канфігурацыі ў дадзеным каталогу)." + +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" +"Задае першапачатковае значэнне для порта і FQBN.\n" +"Калі порт, FQBN ці праграматар не пазначаны, адлюстроўваюцца першапачатковыя бягучы порт, FQBN і программатор." + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "Задае найбольшы памер паведамлення ў байтах, які можа атрымаць дэман" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 +msgid "Sets where to save the configuration file." +msgstr "Задае месца для захавання файла канфігурацыі." + +#: internal/cli/monitor/monitor.go:331 +msgid "Setting" +msgstr "Налады" + +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" +"Павінна з'явіцца даведачнае паведамленне, але яно даступнае толькі ў " +"тэкставым рэжыме." + +#: internal/cli/core/search.go:48 +msgid "Show all available core versions." +msgstr "Паказаць усе даступныя версіі ядра." + +#: internal/cli/monitor/monitor.go:77 +msgid "Show all the settings of the communication port." +msgstr "Адлюструеце ўсе налады камунікацыйнага порта." + +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 +msgid "Show also boards marked as 'hidden' in the platform" +msgstr "Паказаць таксама пталы, якія пазначаныя як 'схаваныя' на платформе" + +#: internal/cli/arguments/show_properties.go:60 +msgid "" +"Show build properties. The properties are expanded, use \"--show-" +"properties=unexpanded\" if you want them exactly as they are defined." +msgstr "" +"Паказаць ўласцівасці зборкі.\n" +"Калі ўласцівасці пашыраныя, ужывайце \"--show-properties=unexpanded, калі вы жадаеце, каб яны былі дакладна такімі, як яны вызначаныя." + +#: internal/cli/board/details.go:52 +msgid "Show full board details" +msgstr "Паказаць падрабязную інфармацыю пра плату" + +#: internal/cli/board/details.go:43 +msgid "" +"Show information about a board, in particular if the board has options to be" +" specified in the FQBN." +msgstr "" +"Паказаць інфармацыю пра плату, у прыватнасці, калі ў платы ёсць налады, якія" +" павінны быць паказаныя ў FQBN." + +#: internal/cli/lib/search.go:97 +msgid "Show library names only." +msgstr "Паказаць толькі назвы бібліятэк." + +#: internal/cli/board/details.go:53 +msgid "Show list of available programmers" +msgstr "Паказаць спіс даступных праграматараў" + +#: internal/cli/debug/debug.go:73 +msgid "" +"Show metadata about the debug session instead of starting the debugger." +msgstr "Паказваць метададзеныя пра сеанс адладкі замест запуску адладчыка." + +#: internal/cli/update/update.go:45 +msgid "Show outdated cores and libraries after index update" +msgstr "Паказваць састарэлыя ядры і бібліятэкі пасля абнаўлення індэкса" + +#: internal/cli/lib/list.go:40 +msgid "Shows a list of installed libraries." +msgstr "Паказвае спіс усталяваных бібліятэк." + +#: internal/cli/lib/list.go:41 +msgid "" +"Shows a list of installed libraries.\n" +"\n" +"If the LIBNAME parameter is specified the listing is limited to that specific\n" +"library. By default the libraries provided as built-in by platforms/core are\n" +"not listed, they can be listed by adding the --all flag." +msgstr "" +"Паказвае спіс усталяваных бібліятэк.\n" +"\n" +"Калі паказана налада LIBNAME, спіс абмежаваны дадзенай канкрэтнай бібліятэкай.\n" +"Першапачаткова бібліятэкі, якія прадстаўляюцца платформамі/ядром як убудаваныя, у спісе адсутнічаюць, іх можна ўключыць у спіс, калі задаць аргумент --all." + +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 +msgid "Shows the list of installed platforms." +msgstr "Паказвае спіс усталяваных платформаў." + +#: internal/cli/lib/examples.go:44 +msgid "Shows the list of the examples for libraries." +msgstr "Паказвае спіс прыкладаў для бібліятэк." + +#: internal/cli/lib/examples.go:45 +msgid "" +"Shows the list of the examples for libraries. A name may be given as " +"argument to search a specific library." +msgstr "" +"Паказвае спіс прыкладаў бібліятэк.\n" +"Назва можа быць паказаная ў якасці аргументу для пошуку канкрэтнай бібліятэкі." + +#: internal/cli/version/version.go:37 +msgid "" +"Shows the version number of Arduino CLI which is installed on your system." +msgstr "Паказвае нумар версіі Arduino CLI, якая ўсталяваная ў вашай сістэме." + +#: internal/cli/version/version.go:36 +msgid "Shows version number of Arduino CLI." +msgstr "Паказвае нумар версіі Arduino CLI." + +#: internal/cli/board/details.go:189 +msgid "Size (bytes):" +msgstr "Памер (у байтах):" + +#: commands/service_compile.go:286 +msgid "" +"Sketch cannot be located in build path. Please specify a different build " +"path" +msgstr "" +"Сцэнар не можа быць паказаны ў шляху зборкі.\n" +"Калі ласка, пакажыце іншы шлях зборкі" + +#: internal/cli/sketch/new.go:98 +msgid "Sketch created in: %s" +msgstr "Сцэнар створаны ў: %s" + +#: internal/cli/arguments/profiles.go:33 +msgid "Sketch profile to use" +msgstr "Профіль эскіза, які ўжываецца" + +#: internal/arduino/builder/sizer.go:193 +msgid "Sketch too big; see %[1]s for tips on reducing it." +msgstr "Сцэнар занадта вялікі; глядзіце %[1]s для парады па яго памяншэнні." + +#: internal/arduino/builder/sizer.go:160 +msgid "" +"Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" +" bytes." +msgstr "" +" Сцэнар ўжывае %[1]s байтаў (%[3]s%%) дыскавай прасторы праграмы.\n" +"Найбольшае значэнне - %[2]s байтаў." + +#: internal/cli/feedback/warn_deprecated.go:39 +msgid "" +"Sketches with .pde extension are deprecated, please rename the following " +"files to .ino:" +msgstr "" +"Сцэнар з пашырэннем .pde састарэў, калі ласка, пераназавіце наступныя файлы " +"ў .ino:" + +#: internal/arduino/builder/linker.go:31 +msgid "Skip linking of final executable." +msgstr "Прапусціць звязванне канчатковага выкананага файла." + +#: commands/service_upload.go:508 +msgid "Skipping 1200-bps touch reset: no serial port selected!" +msgstr "" +"Пропуск сэнсарнага скіду з хуткасцю 1200 біт/с: паслядоўны порт не абраны!" + +#: internal/arduino/builder/archive_compiled_files.go:28 +msgid "Skipping archive creation of: %[1]s" +msgstr "Прапускаць стварэння архіва: %[1]s" + +#: internal/arduino/builder/compilation.go:184 +msgid "Skipping compile of: %[1]s" +msgstr "Прапускаць кампіляцыі: %[1]s" + +#: internal/arduino/builder/internal/detector/detector.go:414 +msgid "Skipping dependencies detection for precompiled library %[1]s" +msgstr "" +"Выяўленне прапушчаных залежнасцяў для папярэдне скампіляванай бібліятэкі " +"%[1]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 +msgid "Skipping platform configuration." +msgstr "Прапускаць канфігурацыі платформы." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 +msgid "Skipping pre_uninstall script." +msgstr "Прапускаць сцэнар pre_uninstall " + +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 +msgid "Skipping tool configuration." +msgstr "Прапускаць налады інструмента." + +#: internal/arduino/builder/recipe.go:48 +msgid "Skipping: %[1]s" +msgstr "Прапускаць: %[1]s" + +#: commands/instances.go:634 +msgid "Some indexes could not be updated." +msgstr "Некаторыя індэксы не атрымалася абнавіць." + +#: internal/cli/core/upgrade.go:141 +msgid "Some upgrades failed, please check the output for details." +msgstr "" +"У некаторых абнаўленнях адбыўся збой.\n" +"Калі ласка, праверце выходныя дадзеныя для атрымання падрабязнай інфармацыі." + +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" +msgstr "Порт TCP, які будзе праслухоўвацца дэманам" + +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "Фармат вываду каманды можа быць наступным: %s" + +#: internal/cli/cli.go:187 +msgid "The custom config file (if not specified the default will be used)." +msgstr "" +"Карыстальніцкі канфігурацыйны файл (калі ён не пазначаны, будзе ўжывацца " +"першапачатковы файл)." + +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" +"Аргумент --build-cache-path састарэў.\n" +"Калі ласка, ужывайце толькі --build-path, альбо наладзьце шлях да кэшу зборкі ў наладах Arduino CLI." + +#: internal/cli/daemon/daemon.go:103 +msgid "The flag --debug-file must be used with --debug." +msgstr "Аргумент --debug-file павінен ужывацца з аргументам --debug." + +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "Дадзеная канфігурацыя платы/праграматара не падтрымлівае адладку." + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "Дадзеная канфігурацыя платы/праграматара падтрымлівае адладку." + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "Асобнік больш несапраўдны і мае патрэбу ў паўторнай ініцыялізацыі" + +#: internal/cli/config/add.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't add to it.\n" +"Maybe use '%[2]s'?" +msgstr "" +"Ключ '%[1]v' не з'яўляецца спісам элементаў, да яго нельга дадаць.\n" +"Ці можа быць трэба ўжываць '%[2]s'?" + +#: internal/cli/config/remove.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't remove from it.\n" +"Maybe use '%[2]s'?" +msgstr "" +"Ключ '%[1]v' не з'яўляецца спісам элементаў, не можа быць выдалены з яго.\n" +"Ці можа быць трэба ўжываць '%[2]s'?" + +#: commands/cmderrors/cmderrors.go:858 +msgid "The library %s has multiple installations:" +msgstr "Бібліятэка %s мае некалькі ўсталяванняў:" + +#: internal/cli/compile/compile.go:118 +msgid "" +"The name of the custom encryption key to use to encrypt a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" +"Назва карыстальніцкага ключа шыфравання, які ўжываецца для шыфравання двайковага файла ў працэсе кампіляцыі.\n" +"Ужываецца толькі тымі платформамі, якія яго падтрымліваюць." + +#: internal/cli/compile/compile.go:116 +msgid "" +"The name of the custom signing key to use to sign a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" +"Назва карыстальніцкага ключа подпісу, які ўжываецца для подпісу двайковага файла ў працэсе кампіляцыі.\n" +"Ужываецца толькі тымі платформамі, якія яго падтрымліваюць." + +#: internal/cli/cli.go:174 +msgid "The output format for the logs, can be: %s" +msgstr "Фармат вываду часопісаў можа быць наступным: %s" + +#: internal/cli/compile/compile.go:114 +msgid "" +"The path of the dir to search for the custom keys to sign and encrypt a " +"binary. Used only by the platforms that support it." +msgstr "" +"Шлях да каталога каталогаў для пошуку карыстальніцкіх ключоў для подпісу і шыфравання двайковага файла.\n" +"Ужываецца толькі платформамі, якія яго падтрымліваюць." + +#: internal/arduino/builder/libraries.go:152 +msgid "The platform does not support '%[1]s' for precompiled libraries." +msgstr "Платформа не падтрымлівае '%[1]s' папярэдне скампіляваныя бібліятэкі." + +#: internal/cli/lib/upgrade.go:36 +msgid "" +"This command upgrades an installed library to the latest available version. " +"Multiple libraries can be passed separated by a space. If no arguments are " +"provided, the command will upgrade all the installed libraries where an " +"update is available." +msgstr "" +"Каманда абнаўляе ўсталяваную бібліятэку да апошняй даступнай версіі.\n" +"Можна паказаць некалькі бібліятэк, падзеленыя прабелам.\n" +"Калі аргументы не пазначаныя, каманда абновіць усе ўсталяваныя бібліятэкі, у якіх даступна абнаўленне." + +#: internal/cli/outdated/outdated.go:42 +msgid "" +"This commands shows a list of installed cores and/or libraries\n" +"that can be upgraded. If nothing needs to be updated the output is empty." +msgstr "" +"Каманды паказваюць спіс усталяваных ядраў і/ці бібліятэк, якія можна абнавіць.\n" +"Калі нічога не патрабуецца абнаўляць, вывад будзе пустым." + +#: internal/cli/monitor/monitor.go:80 +msgid "Timestamp each incoming line." +msgstr "Часовая пазнака на кожны ўваходны радок." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 +msgid "Tool %s already installed" +msgstr "Інструмент %s ужо ўсталяваны" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 +msgid "Tool %s uninstalled" +msgstr "Інструмент %s выдалены" + +#: commands/service_debug.go:277 +msgid "Toolchain '%s' is not supported" +msgstr "Ланцужок інструментаў '%s' не падтрымліваецца" + +#: internal/cli/debug/debug.go:235 +msgid "Toolchain path" +msgstr "Шлях да ланцужка інструментаў" + +#: internal/cli/debug/debug.go:236 +msgid "Toolchain prefix" +msgstr "Прыстаўка ланцужка інструментаў" + +#: internal/cli/debug/debug.go:234 +msgid "Toolchain type" +msgstr "Тып ланцужка інструментаў" + +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 +msgid "Try running %s" +msgstr "Спроба выканання %s" + +#: internal/cli/burnbootloader/burnbootloader.go:63 +msgid "Turns on verbose mode." +msgstr "Уключае падрабязны рэжым." + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Type" +msgstr "Тып" + +#: internal/cli/lib/search.go:209 +msgid "Types: %s" +msgstr "Тыпы: %s" + +#: internal/cli/board/details.go:191 +msgid "URL:" +msgstr "Адрас URL:" + +#: internal/arduino/builder/core.go:166 +msgid "" +"Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" +msgstr "" +"Не атрымалася кэшаваць убудаванае ядро.\n" +"Калі ласка, папытайце %[1]s суправаджальнікаў %[2]s" + +#: internal/cli/configuration/configuration.go:95 +msgid "Unable to get Documents Folder: %v" +msgstr "Няма доступу да каталога дакументаў: %v" + +#: internal/cli/configuration/configuration.go:70 +msgid "Unable to get Local App Data Folder: %v" +msgstr "Няма доступу да лакальнага каталогу дадзеных праграмы: %v" + +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 +msgid "Unable to get user home dir: %v" +msgstr "Няма доступу да хатняга каталогу карыстальніка: %v" + +#: internal/cli/cli.go:252 +msgid "Unable to open file for logging: %s" +msgstr "Не атрымалася адчыніць файл для вядзення часопіса: %s" + +#: commands/instances.go:563 +msgid "Unable to parse URL" +msgstr "Не атрымалася разабраць адрас URL" + +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 +msgid "Uninstalling %s" +msgstr "Выдаленне %s" + +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 +msgid "Uninstalling %s, tool is no more required" +msgstr "Выдаленне %s, інструмент больш не патрабуецца" + +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 +msgid "" +"Uninstalls one or more cores and corresponding tool dependencies if no " +"longer used." +msgstr "" +"Выдаленне аднаго ці некалькі ядраў і адпаведныя інструментальныя залежнасці," +" калі яны больш не ўжываюцца." + +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 +msgid "Uninstalls one or more libraries." +msgstr "Выдаленне адной ці некалькі бібліятэк." + +#: internal/cli/board/list.go:174 +msgid "Unknown" +msgstr "Невядомы" + +#: commands/cmderrors/cmderrors.go:183 +msgid "Unknown FQBN" +msgstr "Невядомы FQBN" + +#: internal/cli/update/update.go:37 +msgid "Updates the index of cores and libraries" +msgstr "Абнаўленне індэксу ядраў і бібліятэк" + +#: internal/cli/update/update.go:38 +msgid "Updates the index of cores and libraries to the latest versions." +msgstr "Абнаўленне спісу ядраў і бібліятэк да апошніх версій." + +#: internal/cli/core/update_index.go:36 +msgid "Updates the index of cores to the latest version." +msgstr "Абнаўленне індэксу ядраў да апошняй версіі." + +#: internal/cli/core/update_index.go:35 +msgid "Updates the index of cores." +msgstr "Абнаўленне індэксу ядраў." + +#: internal/cli/lib/update_index.go:36 +msgid "Updates the libraries index to the latest version." +msgstr "Абнаўленне індэксу бібліятэк да апошняй версіі." + +#: internal/cli/lib/update_index.go:35 +msgid "Updates the libraries index." +msgstr "Абнаўленне бібліятэчнага індэксу." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 +msgid "Upgrade doesn't accept parameters with version" +msgstr "Абнаўленне не прымае параметры, названыя ў версіі" + +#: internal/cli/upgrade/upgrade.go:38 +msgid "Upgrades installed cores and libraries to latest version." +msgstr "Абнаўленне ўсталяваных ядраў і бібліятэк да апошняй версіі." + +#: internal/cli/upgrade/upgrade.go:37 +msgid "Upgrades installed cores and libraries." +msgstr "Абнаўленне ўсталяваных ядраў і бібліятэк." + +#: internal/cli/lib/upgrade.go:35 +msgid "Upgrades installed libraries." +msgstr "Абнаўленне ўсталяваных бібліятэк." + +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 +msgid "Upgrades one or all installed platforms to the latest version." +msgstr "Абнаўленне адной ці ўсех усталяваных платформ да апошняй версіі." + +#: internal/cli/upload/upload.go:56 +msgid "Upload Arduino sketches." +msgstr "Выгрузіць сцэнар Arduino." + +#: internal/cli/upload/upload.go:57 +msgid "" +"Upload Arduino sketches. This does NOT compile the sketch prior to upload." +msgstr "" +"Выгрузіць сцэнар Arduino.\n" +"Пры гэтым сцэна не кампілюецца перад выгрузкай." + +#: internal/cli/arguments/port.go:44 +msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" +msgstr "Адрас порта выгрузкі, напрыклад: COM3 ці /dev/ttyACM2" + +#: commands/service_upload.go:532 +msgid "Upload port found on %s" +msgstr "Порт выгрузкі знойдзены на %s" + +#: internal/cli/arguments/port.go:48 +msgid "Upload port protocol, e.g: serial" +msgstr "Пратакол порта выгрузкі, напрыклад: паслядоўны" + +#: internal/cli/compile/compile.go:123 +msgid "Upload the binary after the compilation." +msgstr "Выгрузіць двайковы файл пасля кампіляцыі." + +#: internal/cli/burnbootloader/burnbootloader.go:49 +msgid "Upload the bootloader on the board using an external programmer." +msgstr "Выгрузіць загрузнік на плату з дапамогай вонкавага праграматара." + +#: internal/cli/burnbootloader/burnbootloader.go:48 +msgid "Upload the bootloader." +msgstr "Выгрузіць загрузнік." + +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 +msgid "" +"Uploading to specified board using %s protocol requires the following info:" +msgstr "" +"Для выгрузкі на паказаную плату з ужываннем пратаколу %s патрабуецца " +"наступная інфармацыя:" + +#: internal/cli/config/init.go:160 +msgid "" +"Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" +"%s" +msgstr "" +"Адрасы URL не могуць утрымліваць косак.\n" +"Падзяліце некалькі адрасоў URL, якія экспартаваныя як env var, прабелам:\n" +"%s" + +#: internal/cli/usage.go:22 +msgid "Usage:" +msgstr "Ужыта:" + +#: internal/cli/usage.go:29 +msgid "Use %s for more information about a command." +msgstr "Ужыць %s для атрымання дадатковай інфармацыі пра каманду." + +#: internal/cli/compile/compile.go:471 +msgid "Used library" +msgstr "Ужытая бібліятэка" + +#: internal/cli/compile/compile.go:486 +msgid "Used platform" +msgstr "Ужытая платформа" + +#: internal/arduino/builder/internal/detector/detector.go:157 +msgid "Used: %[1]s" +msgstr "Ужыта: %[1]s" + +#: commands/service_compile.go:361 +msgid "Using board '%[1]s' from platform in folder: %[2]s" +msgstr "Ужыванне платы '%[1]s' з платформы ў каталог: %[2]s" + +#: internal/arduino/builder/internal/detector/detector.go:351 +msgid "Using cached library dependencies for file: %[1]s" +msgstr "Ужыванне кэшаванай бібліятэкі залежнасцяў для файла: %[1]s" + +#: commands/service_compile.go:362 +msgid "Using core '%[1]s' from platform in folder: %[2]s" +msgstr "Ужыванне ядра '%[1]s' з платформы ў каталог: %[2]s" + +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "Ужыванне канфігурацыі першапачатковага манітора для платы: %s" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" +"Ужыванне стандартнай канфігурацыі манітора.\n" +"Увага: для працы вашай платы могуць спатрэбіцца іншыя налады!\n" + +#: internal/arduino/builder/libraries.go:313 +msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" +msgstr "Ужыванне бібліятэкі %[1]s з версіяй %[2]s у каталогу: %[3]s %[4]s" + +#: internal/arduino/builder/libraries.go:307 +msgid "Using library %[1]s in folder: %[2]s %[3]s" +msgstr "Ужыванне бібліятэкі %[1]s у каталогу: %[2]s %[3]s" + +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 +msgid "Using precompiled core: %[1]s" +msgstr "Ужыванне папярэдне скампіляванага ядра: %[1]s" + +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 +msgid "Using precompiled library in %[1]s" +msgstr "Ужыванне папярэдне скампіляванай бібліятэкі ў %[1]s" + +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 +msgid "Using previously compiled file: %[1]s" +msgstr "Ужыванне раней скампіляванага файла: %[1]s" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +msgid "VERSION" +msgstr "Версія" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "VERSION_NUMBER" +msgstr "Нумар версіі" + +#: internal/cli/monitor/monitor.go:331 +msgid "Values" +msgstr "Значэнні" + +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 +msgid "Verify uploaded binary after the upload." +msgstr "Праверыць загружаны двайковы файл пасля выгрузкі." + +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 +msgid "Version" +msgstr "Версія" + +#: internal/cli/lib/search.go:210 +msgid "Versions: %s" +msgstr "Версіі: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 +msgid "WARNING cannot configure platform: %s" +msgstr "Увага: не атрымалася канфігураваць платформу: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 +msgid "WARNING cannot configure tool: %s" +msgstr "Увага: не атрымалася канфігураваць інструмент: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 +msgid "WARNING cannot run pre_uninstall script: %s" +msgstr "Увага: не атрымалася запусціць сцэнар pre_uninstall: %s" + +#: internal/cli/compile/compile.go:339 +msgid "WARNING: The sketch is compiled using one or more custom libraries." +msgstr "" +"Увага: сцэнар скампіляваны з ужываннем адной ці некалькіх карыстальніцкіх " +"бібліятэк." + +#: internal/arduino/builder/libraries.go:284 +msgid "" +"WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " +"incompatible with your current board which runs on %[3]s architecture(s)." +msgstr "" +"Увага: бібліятэка %[1]s сцвярджае, што працуе на архітэктуры(-ах) %[2]s і " +"можа быць несумяшчальная з вашай бягучай платай, якая працуе на " +"архітэктуры(-ах) %[3]s." + +#: commands/service_upload.go:521 +msgid "Waiting for upload port..." +msgstr "Чаканне порта выгрузкі..." + +#: commands/service_compile.go:367 +msgid "" +"Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" +msgstr "" +"Увага: плата %[1]s не вызначае перавагі %[2]s.\n" +"Аўтаматычна задаецца ў: %[3]s" + +#: internal/cli/lib/search.go:203 +msgid "Website: %s" +msgstr "Вэб-сайт: %s" + +#: internal/cli/config/init.go:45 +msgid "Writes current configuration to a configuration file." +msgstr "Запіс бягучай канфігурацыи ў файл канфігурацыі." + +#: internal/cli/config/init.go:48 +msgid "" +"Writes current configuration to the configuration file in the data " +"directory." +msgstr "Запіс бягучай канфігурацыі ў файл канфігурацыі ў каталогу дадзеных." + +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 +msgid "You cannot use the %s flag while compiling with a profile." +msgstr "Вы не можаце ўжываць аргумент %s пры кампіляцыі з ужываннем профілю." + +#: internal/arduino/resources/checksums.go:79 +msgid "archive hash differs from hash in index" +msgstr "архіўны хэш адрозніваецца ад хэша па індэксе" + +#: internal/arduino/libraries/librariesmanager/install.go:187 +msgid "archive is not valid: multiple files found in zip file top level" +msgstr "" +"архіў несапраўдны: у верхнім узроўні файла zip знойдзена некалькі файлаў" + +#: internal/arduino/libraries/librariesmanager/install.go:190 +msgid "archive is not valid: no files found in zip file top level" +msgstr "архіў несапраўдны: файлы верхняга ўзроўню файла zip не знойдзеныя" + +#: internal/cli/sketch/archive.go:36 +msgid "archivePath" +msgstr "шлях да архіва" + +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 +msgid "arduino-preprocessor pattern is missing" +msgstr "адсутнічае шаблон arduino-preprocessor" + +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" +msgstr "даступна толькі ў тэкставым фармаце" + +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "асноўны пошук па запыту \"аўдыё\"" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "асноўны пошук па \"esp32\" і \"display\" абмежаваны афіцыйным распрацоўшчыкам" + +#: commands/service_upload.go:792 +msgid "binary file not found in %s" +msgstr "двайковы файл не знойдзены ў %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:316 +msgid "board %s not found" +msgstr "плата %s не знойдзеная " + +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 +msgid "boardname" +msgstr "назва платы" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 +msgid "built-in libraries directory not set" +msgstr "каталог убудаваных бібліятэк не зададзены" + +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 +msgid "can't find latest release of %s" +msgstr "не атрымалася знайсці апошнюю версію %s" + +#: commands/instances.go:273 +msgid "can't find latest release of tool %s" +msgstr "не атрымлася знайсці апошнюю версію інструмента %s" + +#: internal/arduino/cores/packagemanager/loader.go:709 +msgid "can't find pattern for discovery with id %s" +msgstr "не атрымалася знайсці шаблон для выяўлення з ідэнтыфікатарам %s" + +#: internal/arduino/builder/internal/detector/detector.go:93 +msgid "candidates" +msgstr "кандыдаты" + +#: commands/service_upload.go:738 commands/service_upload.go:745 +msgid "cannot execute upload tool: %s" +msgstr "не атрымалася запусціць інструмент выгрузкі: %s" + +#: internal/arduino/resources/install.go:48 +msgid "checking local archive integrity" +msgstr "праверка цэласнасці лакальнага архіва" + +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 +msgid "cleaning build path" +msgstr "ачыстка шляху зборкі" + +#: internal/cli/cli.go:90 +msgid "command" +msgstr "каманда" + +#: internal/arduino/monitor/monitor.go:149 +msgid "command '%[1]s' failed: %[2]s" +msgstr "хібная каманда '%[1]s': %[2]s" + +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 +msgid "communication out of sync, expected '%[1]s', received '%[2]s'" +msgstr "паведамленне не сінхранізаванае, чакаецца '%[1]s', атрымана '%[2]s'" + +#: internal/arduino/resources/checksums.go:75 +msgid "computing hash: %s" +msgstr "вылічэнне хэша: %s" + +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "ключ канфігурацыі %s змяшчае недапушчальны знак" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "значэнне канфігурацыі %s змяшчае недапушчальны знак" + +#: internal/arduino/libraries/librariesmanager/install.go:140 +msgid "copying library to destination directory:" +msgstr "капіраванне бібліятэкі ў каталог прызначэння:" + +#: commands/service_upload.go:864 +msgid "could not find a valid build artifact" +msgstr "не атрымалася знайсці дапушчальны артэфакт зборкі" + +#: commands/service_platform_install.go:95 +msgid "could not overwrite" +msgstr "не атрымалася перазапісаць" + +#: commands/service_library_install.go:191 +msgid "could not remove old library" +msgstr "не атрымалася выдаліць старую бібліятэку" + +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 +msgid "could not update sketch project file" +msgstr "не атрымалася абнавіць сцэнар праекту" + +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 +msgid "creating core cache folder: %s" +msgstr "стварэнне асноўнага каталогу кэша: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 +msgid "creating installed.json in %[1]s: %[2]s" +msgstr "стварэнне nstalled.json у %[1]s: %[2]s" + +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 +msgid "creating temp dir for extraction: %s" +msgstr "стварэнне часовага каталогу для выняцця: %s" + +#: internal/arduino/builder/sizer.go:199 +msgid "data section exceeds available space in board" +msgstr "аб'ём секцыі дадзеных перавышае даступную прастору на плаце" + +#: commands/service_library_resolve_deps.go:86 +msgid "dependency '%s' is not available" +msgstr "залежнасць '%s' недаступная" + +#: internal/arduino/libraries/librariesmanager/install.go:93 +msgid "destination dir %s already exists, cannot install" +msgstr "каталог прызначэння %s ужо існуе, усталяваць не атрымалася" + +#: internal/arduino/libraries/librariesmanager/install.go:137 +msgid "destination directory already exists" +msgstr "каталог прызначэння ўжо існуе" + +#: internal/arduino/libraries/librariesmanager/install.go:305 +msgid "directory doesn't exist: %s" +msgstr "каталог не існуе: %s" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "працэс выяўлення %[1]s не запушчаны" + +#: internal/arduino/cores/packagemanager/loader.go:641 +msgid "discovery %s not found" +msgstr "выяўленне %s не знойдзенае" + +#: internal/arduino/cores/packagemanager/loader.go:645 +msgid "discovery %s not installed" +msgstr "выяўленне %s не ўсталяванае" + +#: internal/arduino/cores/packagemanager/package_manager.go:714 +msgid "discovery release not found: %s" +msgstr "выпуск выяўлення не знойдзены: %s" + +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 +msgid "download a specific version (in this case 1.6.9)." +msgstr "спампаваць пэўную версію (у дадзеным выпадку 1.6.9)." + +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 +msgid "download the latest version of Arduino SAMD core." +msgstr "спампаваць апошнюю версію Arduino з тым жа ядром SAMD." + +#: internal/cli/feedback/rpc_progress.go:74 +msgid "downloaded" +msgstr "спампаваны" + +#: commands/instances.go:56 +msgid "downloading %[1]s tool: %[2]s" +msgstr "спампаванне інструмента %[1]s: %[2]s" + +#: pkg/fqbn/fqbn.go:63 +msgid "empty board identifier" +msgstr "пусты ідэнтыфікатар платы" + +#: internal/arduino/sketch/sketch.go:93 +msgid "error loading sketch project file:" +msgstr "памылка пры загрузцы сцэнара праекту:" + +#: internal/arduino/cores/packagemanager/loader.go:612 +msgid "error opening %s" +msgstr "памылка пры адкрыцці %s" + +#: internal/arduino/sketch/profiles.go:250 +msgid "error parsing version constraints" +msgstr "памылка пры разборы абмежаванняў версіі" + +#: commands/service_board_identify.go:203 +msgid "error processing response from server" +msgstr "памылка пры апрацоўцы адказу ад сервера" + +#: commands/service_board_identify.go:183 +msgid "error querying Arduino Cloud Api" +msgstr "памылка пры запыце Arduino Cloud Api" + +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" +msgstr "выманне архіва" + +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" +msgstr "выманне архіва: %s" + +#: internal/arduino/resources/checksums.go:143 +msgid "failed to compute hash of file \"%s\"" +msgstr "не атрымалася вылічыць хэш файла \"%s\"" + +#: commands/service_board_identify.go:178 +msgid "failed to initialize http client" +msgstr "не атрымалася ініцыялізаваць кліент http" + +#: internal/arduino/resources/checksums.go:98 +msgid "fetched archive size differs from size specified in index" +msgstr "" +"памер атрыманага архіва адрозніваецца ад памеру, які названы ў індэксе" + +#: internal/arduino/resources/install.go:132 +msgid "files in archive must be placed in a subdirectory" +msgstr "файлы ў архіве павінны быць змешчаныя ў укладзены каталог" + +#: internal/arduino/cores/packagemanager/loader.go:59 +msgid "finding absolute path of %s" +msgstr "знаходжанне абсалютнага шляху да %s" + +#: internal/cli/cli.go:90 +msgid "flags" +msgstr "аргументы" + +#: internal/arduino/cores/packagemanager/loader.go:98 +msgid "following symlink %s" +msgstr "наступная сімвалічны спасылак %s" + +#: internal/cli/lib/download.go:40 +msgid "for a specific version." +msgstr "для канкрэтнай версіі." + +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 +msgid "for the latest version." +msgstr "для апошняй версіі." + +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 +msgid "for the specific version." +msgstr "для канкрэтнай версіі." + +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "поле FQBN утрымлівае недапушчальны знак" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "стварэнне installation.id" + +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "стварэнне installation.secret" + +#: internal/arduino/resources/download.go:55 +msgid "getting archive file info: %s" +msgstr "атрыманне інфармацыі пра архіўны файл: %s" + +#: internal/arduino/resources/checksums.go:93 +msgid "getting archive info: %s" +msgstr "атрыманне інфармацыі пра архіў: %s" + +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 +msgid "getting archive path: %s" +msgstr "атрыманне шляху да архіва: %" + +#: internal/arduino/cores/packagemanager/package_manager.go:322 +msgid "getting build properties for board %[1]s: %[2]s" +msgstr "атрыманне ўласцівасцяў зборкі для платы %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:106 +msgid "getting discovery dependencies for platform %[1]s: %[2]s" +msgstr "атрыманне залежнасцяў выяўлення для платформы %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:114 +msgid "getting monitor dependencies for platform %[1]s: %[2]s" +msgstr "атрыманне залежнасцяў манітора для платформы %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:99 +msgid "getting tool dependencies for platform %[1]s: %[2]s" +msgstr "атрыманне залежнасцяў інструментаў для платформы %[1]s: %[2]s" + +#: internal/arduino/libraries/librariesmanager/install.go:148 +msgid "install directory not set" +msgstr "каталог для ўсталявання не зададзены" + +#: commands/instances.go:60 +msgid "installing %[1]s tool: %[2]s" +msgstr "усталяванне інструменту %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 +msgid "installing platform %[1]s: %[2]s" +msgstr "усталяванне платформы %[1]s: %[2]s" + +#: internal/cli/feedback/terminal.go:38 +msgid "interactive terminal not supported for the '%s' output format" +msgstr "інтэрактыўны тэрмінал не падтрымліваецца для выхаднога фармату '%s'" + +#: internal/arduino/sketch/profiles.go:248 +msgid "invalid '%s' directive" +msgstr "хібная дырэктыва '%s'" + +#: internal/arduino/resources/checksums.go:44 +msgid "invalid checksum format: %s" +msgstr "хібны фармат кантрольнай сумы: %s" + +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 +msgid "invalid config option: %s" +msgstr "хібная налада канфігурацыі: %s" + +#: internal/cli/arguments/reference.go:92 +msgid "invalid empty core architecture '%s'" +msgstr "хібная пустая архітэктура ядра '%s'" + +#: internal/cli/arguments/reference.go:69 +msgid "invalid empty core argument" +msgstr "хібны пусты аргумент ядра" + +#: internal/cli/arguments/reference.go:89 +msgid "invalid empty core name '%s'" +msgstr "хібная пустая назва ядра '%s'" + +#: internal/cli/arguments/reference.go:74 +msgid "invalid empty core reference '%s'" +msgstr "хібны пусты спасылак ядра '%s'" + +#: internal/cli/arguments/reference.go:79 +msgid "invalid empty core version: '%s'" +msgstr "хібная пустая версія ядра '%s'" + +#: internal/cli/lib/args.go:49 +msgid "invalid empty library name" +msgstr "хібная пустая назва ядра" + +#: internal/cli/lib/args.go:54 +msgid "invalid empty library version: %s" +msgstr "хібная пустая версія адра: %s" + +#: internal/arduino/cores/board.go:144 +msgid "invalid empty option found" +msgstr "знойдзена хібная пустая налада" + +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 +msgid "invalid git url" +msgstr "хібны адрас URL git" + +#: internal/arduino/resources/checksums.go:48 +msgid "invalid hash '%[1]s': %[2]s" +msgstr "хібны хэш '%[1]s': %[2]s" + +#: internal/cli/arguments/reference.go:86 +msgid "invalid item %s" +msgstr "хібны элемент %s" + +#: internal/arduino/sketch/profiles.go:282 +msgid "invalid library directive:" +msgstr "хібная дырэктыва бібліятэкі:" + +#: internal/arduino/libraries/libraries_layout.go:67 +msgid "invalid library layout: %s" +msgstr "хібны макет бібліятэкі: %s" + +#: internal/arduino/libraries/libraries_location.go:90 +msgid "invalid library location: %s" +msgstr "хібнае размяшчэнне бібліятэкі: %s" + +#: internal/arduino/libraries/loader.go:140 +msgid "invalid library: no header files found" +msgstr "хібная бібліятэка: файлы загалоўкаў не знойдзеныя" + +#: internal/arduino/cores/board.go:147 +msgid "invalid option '%s'" +msgstr "хібная налада '%s'" + +#: internal/cli/arguments/show_properties.go:52 +msgid "invalid option '%s'." +msgstr "хібная налада '%s'." + +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "хібны шлях для стварэння каталога канфігурацыі: памылка %[1]s" + +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "хібны шлях для запісу файла інвентарызацыі: памылка %[1]s" + +#: internal/arduino/sketch/profiles.go:252 +msgid "invalid platform identifier" +msgstr "хібны ідэнтыфікатар платформы" + +#: internal/arduino/sketch/profiles.go:262 +msgid "invalid platform index URL:" +msgstr "хібны адрас URL індэкса платформы:" + +#: internal/arduino/cores/packagemanager/loader.go:326 +msgid "invalid pluggable monitor reference: %s" +msgstr "хібны спасылак манітора злучэння: %s" + +#: internal/cli/monitor/monitor.go:176 +msgid "invalid port configuration value for %s: %s" +msgstr "хібнае значэнне канфігурацыі порта для %s: %s" + +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" +msgstr "хібная канфігурацыя порта: %s=%s" + +#: commands/service_upload.go:725 +msgid "invalid recipe '%[1]s': %[2]s" +msgstr "хібны пакет '%[1]s': %[2]s" + +#: commands/service_sketch_new.go:86 +msgid "" +"invalid sketch name \"%[1]s\": the first character must be alphanumeric or " +"\"_\", the following ones can also contain \"-\" and \".\". The last one " +"cannot be \".\"." +msgstr "" +"хібная назва сцэнару \"%[1]s\": першы знак павінен быць літарна-лічбавым ці \"_\", наступныя таксама могуць утрымліваць \"-\" і \".\".\n" +"Апошні знак не можа быць \".\"." + +#: internal/arduino/cores/board.go:151 +msgid "invalid value '%[1]s' for option '%[2]s'" +msgstr "хібнае значэнне '%[1]s' для налады '%[2]s'" + +#: internal/arduino/cores/packagemanager/loader.go:231 +msgid "invalid version directory %s" +msgstr "хібны каталог версій %s" + +#: internal/arduino/sketch/profiles.go:284 +msgid "invalid version:" +msgstr "хібная версія:" + +#: internal/cli/core/search.go:39 +msgid "keywords" +msgstr "ключавыя словы" + +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "бібліятэкі, якія створаныя Даніэлем Гарсіяй" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "" +"бібліятэкі, якія створаныя толькі кампаніяй Adafruit і якія маюць у назве " +"\"gfx\"" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "бібліятэкі, якія залежаць, прынамсі, ад \"IRremote\"" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "бібліятэкі, якія залежаць толькі ад \"IRremote\"" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "бібліятэкі з \"buzzer\" у полі назвы" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "бібліятэкі з назвай, якая дакладна супадае з \"pcf8523\"" + +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" +msgstr "бібліятэка %s ужо ўсталяваная" + +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "бібліятэка несапраўдная" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" +msgstr "загрузка %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "загрузка платы: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 +msgid "loading json index file %[1]s: %[2]s" +msgstr "загрузка індэкснага файла json %[1]s: %[2]s" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 +msgid "loading library from %[1]s: %[2]s" +msgstr "загрузка бібліятэкі з %[1]s: %[2]s" + +#: internal/arduino/libraries/loader.go:55 +msgid "loading library.properties: %s" +msgstr "загрузка library.properties: %s" + +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 +msgid "loading platform release %s" +msgstr "загрузка выпуска платформы %s" + +#: internal/arduino/cores/packagemanager/loader.go:195 +msgid "loading platform.txt" +msgstr "загрузка platform.txt" + +#: internal/arduino/cores/packagemanager/profiles.go:47 +msgid "loading required platform %s" +msgstr "загрузка неабходнай платформы %s" + +#: internal/arduino/cores/packagemanager/profiles.go:63 +msgid "loading required tool %s" +msgstr "загрузка неабходнага інструмента %s" + +#: internal/arduino/cores/packagemanager/loader.go:587 +msgid "loading tool release in %s" +msgstr "загрузка выпуску інструмента ў %s" + +#: internal/arduino/cores/packagemanager/loader.go:188 +msgid "looking for boards.txt in %s" +msgstr "пошук boards.txt у %s" + +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "пошук артэфактаў зборкі" + +#: internal/arduino/sketch/sketch.go:77 +msgid "main file missing from sketch: %s" +msgstr "асноўны файл адсутнічае ў сцэнары: %s" + +#: internal/arduino/sketch/profiles.go:246 +msgid "missing '%s' directive" +msgstr "адсутнічае дырэктыва '%s'" + +#: internal/arduino/resources/checksums.go:40 +msgid "missing checksum for: %s" +msgstr "адсутнічае кантрольная сума для: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:430 +msgid "missing package %[1]s referenced by board %[2]s" +msgstr "адсутнічае пакет %[1]s, на які спасылаецца плата%[2]s" + +#: internal/cli/core/upgrade.go:101 +msgid "missing package index for %s, future updates cannot be guaranteed" +msgstr "" +"адсутнічае індэкс пакета %s, будучыя абнаўленні не могуць быць гарантаваныя" + +#: internal/arduino/cores/packagemanager/package_manager.go:435 +msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" +msgstr "адсутнічае платформа %[1]s: %[2]s на якую спасылаецца плата %[3]s" + +#: internal/arduino/cores/packagemanager/package_manager.go:440 +msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" +msgstr "" +"адсутнічае выпуск платформы %[1]s: %[2]s на які спасылаецца плата %[3]s" + +#: internal/arduino/resources/index.go:153 +msgid "missing signature" +msgstr "адсутнічае сігнатура" + +#: internal/arduino/cores/packagemanager/package_manager.go:725 +msgid "monitor release not found: %s" +msgstr "выпуск маніторынгу не знойдзена: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 +msgid "moving extracted archive to destination dir: %s" +msgstr "перамяшчэнне вынятага архіва ў каталог прызначэння: %s" + +#: commands/service_upload.go:859 +msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" +msgstr "выяўлена некалькі артэфактаў зборкі: '%[1]s' і '%[2]s'" + +#: internal/arduino/sketch/sketch.go:69 +msgid "multiple main sketch files found (%[1]v, %[2]v)" +msgstr "знойдзена некалькі асноўных файлаў сцэнара (%[1]v, %[2]v)" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 +msgid "" +"no compatible version of %[1]s tools found for the current os, try " +"contacting %[2]s" +msgstr "" +"не знойдзена сумяшчальнай версіі інструментаў %[1]s для бягучай аперацыйнай " +"сістэмы, паспрабуйце звязацца з %[2]s" + +#: commands/service_board_list.go:106 +msgid "no instance specified" +msgstr "асобнік не пазначаны" + +#: commands/service_upload.go:814 +msgid "no sketch or build directory/file specified" +msgstr "не паказаны каталог/файл сцэнара або зборкі" + +#: internal/arduino/sketch/sketch.go:56 +msgid "no such file or directory" +msgstr "такога файла ці каталога няма" + +#: internal/arduino/resources/install.go:135 +msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" +msgstr "" +"у архіве няма ўнікальнага каранёвага каталога, знойдзена '%[1]s' і '%[2]s'" + +#: commands/service_upload.go:720 +msgid "no upload port provided" +msgstr "порт загрузкі не пазначаны" + +#: internal/arduino/sketch/sketch.go:279 +msgid "no valid sketch found in %[1]s: missing %[2]s" +msgstr "не знойдзены сапраўдны сцэнар у %[1]s: адсутнічае %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:128 +msgid "no versions available for the current OS, try contacting %s" +msgstr "" +"для бягучай аперацыйнай сістэмы не даступна ні адной версіі, паспрабуйце " +"звязацца з %s" + +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "не з'яўляецца FQBN: %s" + +#: internal/cli/feedback/terminal.go:52 +msgid "not running in a terminal" +msgstr "не працуе ў тэрмінале" + +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 +msgid "opening archive file: %s" +msgstr "адкрыццё файла архіва: %s" + +#: internal/arduino/cores/packagemanager/loader.go:224 +msgid "opening boards.txt" +msgstr "адкрыццё boards.txt" + +#: internal/arduino/security/signatures.go:82 +msgid "opening signature file: %s" +msgstr "адкрыццё файла сігнатуры: %s" + +#: internal/arduino/security/signatures.go:78 +msgid "opening target file: %s" +msgstr "адкрыццё мэтавага файлау: %s" + +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 +msgid "package %s not found" +msgstr "пакет %s не знойдзены" + +#: internal/arduino/cores/packagemanager/package_manager.go:498 +msgid "package '%s' not found" +msgstr "пакет '%s' не знойдзены" + +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 +msgid "parsing fqbn: %s" +msgstr "разбор fqbn: %s" + +#: internal/arduino/libraries/librariesindex/json.go:70 +msgid "parsing library_index.json: %s" +msgstr "разбор library_index.json: %s" + +#: internal/arduino/cores/packagemanager/loader.go:179 +msgid "path is not a platform directory: %s" +msgstr "шлях не з'яўляецца каталогам платформы: %s" + +#: internal/arduino/cores/packagemanager/download.go:80 +msgid "platform %[1]s not found in package %[2]s" +msgstr "платформа %[1]s не знойдзена ў пакеце %[2]s" + +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" +msgstr "платформа %s не ўсталяваная" + +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "платформа недаступная для вашай аперацыйнай сістэмы" + +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 +msgid "platform not installed" +msgstr "платформа не ўсталяваная" + +#: internal/cli/compile/compile.go:142 +msgid "please use --build-property instead." +msgstr "калі ласка, ужывайце --build-property." + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 +msgid "pluggable discovery already added: %s" +msgstr "ужо дададзена выяўленне, якое злучаецца: %s" + +#: internal/cli/board/attach.go:35 +msgid "port" +msgstr "порт" + +#: internal/cli/arguments/port.go:125 +msgid "port not found: %[1]s %[2]s" +msgstr "порт не знойдзены: %[1]s %[2]s" + +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "праграматар" + +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" +msgstr "версія пратаколу не падтрымліваецца: запытана %[1]d, атрымана %[2]d" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 +msgid "reading dir %[1]s: %[2]s" +msgstr "чытанне каталогу %[1]s: %[2]s" + +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "чытанне зместу каталога %[1]s" + +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 +msgid "reading directory %s" +msgstr "чытанне каталогу %s" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" +msgstr "чытанне зместу каталога %s" + +#: internal/arduino/builder/sketch.go:83 +msgid "reading file %[1]s: %[2]s" +msgstr "чытанне файлу %[1]s: %[2]s" + +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "чытанне файлаў" + +#: internal/arduino/libraries/librariesresolver/cpp.go:90 +msgid "reading lib headers: %s" +msgstr "чытанне загалоўкаў бібліятэкі: %s" + +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "чытанне загалоўкаў бібліятэкі: %s" + +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "чытанне зыходнага каталогу бібліятэкі: %s" + +#: internal/arduino/libraries/librariesindex/json.go:64 +msgid "reading library_index.json: %s" +msgstr "чытанне library_index.json: %s" + +#: internal/arduino/resources/install.go:125 +msgid "reading package root dir: %s" +msgstr "чытанне каранёвага каталога пакету: %s" + +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "чытанне файлаў сцэнару" + +#: commands/service_upload.go:714 +msgid "recipe not found '%s'" +msgstr "пакет '%s' не знойдзены" + +#: internal/arduino/cores/packagemanager/package_manager.go:574 +msgid "release %[1]s not found for tool %[2]s" +msgstr "не знойдзены выпуск %[1]s для інструмента %[2]s" + +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 +msgid "release cannot be nil" +msgstr "выпуск не можа быць нулявым" + +#: internal/arduino/resources/download.go:46 +msgid "removing corrupted archive file: %s" +msgstr "выдаленне пашкоджанага архіўнага файла: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:151 +msgid "removing library directory: %s" +msgstr "выдаленне каталогу бібліятэкі: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 +msgid "removing platform files: %s" +msgstr "выдаленне файлаў платформы: %s" + +#: internal/arduino/cores/packagemanager/download.go:87 +msgid "required version %[1]s not found for platform %[2]s" +msgstr "неабходная версія %[1]s для платформы %[2]s не знойдзена" + +#: internal/arduino/security/signatures.go:74 +msgid "retrieving Arduino public keys: %s" +msgstr "выманне адкрытых ключоў Arduino: %s" + +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "чытанне прыкладаў сцэнара" + +#: internal/arduino/resources/install.go:83 +msgid "searching package root dir: %s" +msgstr "пошук у каранёвым каталогу пакета: %s" + +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" +msgstr "" +"скончыўся тэрмін дзеяння сігнатуры: ці правільна зададзены ваш сістэмны " +"гадзіннік?" + +#: commands/service_sketch_new.go:78 +msgid "sketch name cannot be empty" +msgstr "назва сцэнара не можа быць пустым" + +#: commands/service_sketch_new.go:91 +msgid "sketch name cannot be the reserved name \"%[1]s\"" +msgstr "назва сцэнара не можа быць зарэзерваванай назвай \"%[1]s\"" + +#: commands/service_sketch_new.go:81 +msgid "" +"sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" +msgstr "" +"занадта доўгая назва сцэнара (%[1]d знакаў).\n" +"Найбольшая дапушчальная даўжыня складае %[2]d знакаў" + +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 +msgid "sketch path is not valid" +msgstr "няправільны шлях да сцэнара" + +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 +msgid "sketchPath" +msgstr "шлях да сцэнара" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 +msgid "starting discovery %s" +msgstr "пачынанне адкрыцця %s" + +#: internal/arduino/resources/checksums.go:117 +msgid "testing archive checksum: %s" +msgstr "праверка кантрольнай сумы архіва: %s" + +#: internal/arduino/resources/checksums.go:112 +msgid "testing archive size: %s" +msgstr "праверка памеру архіва: %s" + +#: internal/arduino/resources/checksums.go:106 +msgid "testing if archive is cached: %s" +msgstr "праверка, ці кэшаваны архіў: %s" + +#: internal/arduino/resources/install.go:46 +msgid "testing local archive integrity: %s" +msgstr "Праверка цэласнасці лакальнага архіва: %s" + +#: internal/arduino/builder/sizer.go:194 +msgid "text section exceeds available space in board" +msgstr "тэкставы падзел займае больш месца на плаце" + +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 +msgid "the compilation database may be incomplete or inaccurate" +msgstr "база дадзеных для складання можа быць няпоўнай ці недакладнай" + +#: commands/service_board_identify.go:190 +msgid "the server responded with status %s" +msgstr "сервер адказаў паведамленнем пра стан %s" + +#: internal/arduino/monitor/monitor.go:139 +msgid "timeout waiting for message" +msgstr "час чакання паведамлення" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 +msgid "tool %s is not managed by package manager" +msgstr "інструмент %s не кіруецца кіраўніком пакетаў" + +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 +msgid "tool %s not found" +msgstr "інструмент %s не знойдзены" + +#: internal/arduino/cores/packagemanager/package_manager.go:524 +msgid "tool '%[1]s' not found in package '%[2]s'" +msgstr "інструмент '%[1]s не знойдзены ў пакеты '%[2]s'" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 +msgid "tool not installed" +msgstr "інструмент не ўсталяваны" + +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 +msgid "tool release not found: %s" +msgstr "выпуск інструмента не знойдзены: %s" + +#: internal/arduino/cores/status.go:105 +msgid "tool version %s not found" +msgstr "інструмент версіі %s не знойдзена" + +#: commands/service_library_install.go:93 +msgid "" +"two different versions of the library %[1]s are required: %[2]s and %[3]s" +msgstr "патрабуюцца дзве розныя версіі бібліятэкі%[1]s: %[2]s і %[3]s" + +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 +msgid "unable to compute relative path to the sketch for the item" +msgstr "не атрымалася вылічыць адносны шлях да сцэнара элемента" + +#: internal/arduino/builder/sketch.go:45 +msgid "unable to create a folder to save the sketch" +msgstr "не атрымалася стварыць каталог для захавання сцэнара" + +#: internal/arduino/builder/sketch.go:126 +msgid "unable to create the folder containing the item" +msgstr "не атрымалася стварыць каталог, які змяшчае элемент" + +#: internal/cli/config/get.go:85 +msgid "unable to marshal config to YAML: %v" +msgstr "не атрымалася пераўтварыць канфігурацыю ў YAML: %v" + +#: internal/arduino/builder/sketch.go:164 +msgid "unable to read contents of the destination item" +msgstr "не атрымалася прачытаць змест элементу прызначэння" + +#: internal/arduino/builder/sketch.go:137 +msgid "unable to read contents of the source item" +msgstr "не атрымалася прачытаць змест зыходнага элемента" + +#: internal/arduino/builder/sketch.go:147 +msgid "unable to write to destination file" +msgstr "не атрымалася запісаць у файл прызначэння" + +#: internal/arduino/cores/packagemanager/package_manager.go:297 +msgid "unknown package %s" +msgstr "невядомы пакет %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:304 +msgid "unknown platform %s:%s" +msgstr "невядомая платформа %s: %s" + +#: internal/arduino/sketch/sketch.go:137 +msgid "unknown sketch file extension '%s'" +msgstr "невядомае пашырэнне '%s' файлу сцэнара" + +#: internal/arduino/resources/checksums.go:61 +msgid "unsupported hash algorithm: %s" +msgstr "непадтрыманы алгарытм хэшавання: %s" + +#: internal/cli/core/upgrade.go:44 +msgid "upgrade arduino:samd to the latest version" +msgstr "абнаўленне arduino: samd да апошняй версіі" + +#: internal/cli/core/upgrade.go:42 +msgid "upgrade everything to the latest version" +msgstr "абнаўленне ўсяго да апошняй версіі" + +#: commands/service_upload.go:760 +msgid "uploading error: %s" +msgstr "памылка пры загрузцы: %s" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 +msgid "user directory not set" +msgstr "карыстальніцкі каталог не зададзены" + +#: internal/cli/feedback/terminal.go:94 +msgid "user input not supported for the '%s' output format" +msgstr "карыстальніцкі ўвод не падтрымліваецца для выхаднога фармату '%s'" + +#: internal/cli/feedback/terminal.go:97 +msgid "user input not supported in non interactive mode" +msgstr "карыстальніцкі ўвод не падтрымліваецца ў неінтэрактыўных рэжыме" + +#: internal/arduino/cores/packagemanager/profiles.go:175 +msgid "version %s not available for this operating system" +msgstr "версія %s недаступная для дадзенай аперацыйнай сістэмы" + +#: internal/arduino/cores/packagemanager/profiles.go:154 +msgid "version %s not found" +msgstr "версія %s не знойдзена" + +#: commands/service_board_identify.go:208 +msgid "wrong format in server response" +msgstr "няправільны фармат у адказе сервера" diff --git a/internal/locales/data/de.po b/internal/locales/data/de.po new file mode 100644 index 00000000000..93e5c80da8a --- /dev/null +++ b/internal/locales/data/de.po @@ -0,0 +1,3961 @@ +# +# Translators: +# Timo, 2021 +# Dan H, 2021 +# CLI team <prj_cli_team@arduino.cc>, 2022 +# Dee Gee, 2022 +# C A, 2022 +# Luc Ohles, 2023 +# Jannis Lämmle, 2023 +# Jens Wulf, 2023 +# Ralf Krause, 2024 +# Ettore Atalan <atalanttore@googlemail.com>, 2025 +# Per Tillisch <p.tillisch@arduino.cc>, 2025 +# +msgid "" +msgstr "" +"Last-Translator: Per Tillisch <p.tillisch@arduino.cc>, 2025\n" +"Language-Team: German (https://app.transifex.com/arduino-1/teams/108174/de/)\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: internal/version/version.go:56 +msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" +msgstr "%[1]s %[2]s Version: %[3]s Commit: %[4]s Datum: %[5]s" + +#: internal/arduino/builder/internal/detector/detector.go:462 +msgid "%[1]s folder is no longer supported! See %[2]s for more information" +msgstr "" +"Der Ordner %[1]s wird nicht länger unterstützt! Siehe %[2]s für weitere " +"Informationen" + +#: internal/arduino/builder/build_options_manager.go:140 +msgid "%[1]s invalid, rebuilding all" +msgstr "%[1]s ungültig, alles wird neu gebaut" + +#: internal/cli/lib/check_deps.go:125 +msgid "%[1]s is required but %[2]s is currently installed." +msgstr "%[1]s wird benötigt, aber %[2]s ist aktuell installiert." + +#: internal/arduino/builder/builder.go:487 +msgid "%[1]s pattern is missing" +msgstr "Muster %[1]s fehlt" + +#: internal/arduino/resources/download.go:51 +msgid "%s already downloaded" +msgstr "%s bereits heruntergeladen" + +#: commands/service_upload.go:782 +msgid "%s and %s cannot be used together" +msgstr "%s und %s können nicht gemeinsam verwendet werden" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 +msgid "%s installed" +msgstr "%s installiert" + +#: internal/cli/lib/check_deps.go:122 +msgid "%s is already installed." +msgstr "%s ist bereits installiert." + +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 +msgid "%s is not a directory" +msgstr "%s ist kein Verzeichnis" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 +msgid "%s is not managed by package manager" +msgstr "%s wird nicht vom Paketmanager verwaltet" + +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "%s muss >= 1024 sein" + +#: internal/cli/lib/check_deps.go:119 +msgid "%s must be installed." +msgstr "%s muss installiert sein." + +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 +msgid "%s pattern is missing" +msgstr "Muster %s fehlt" + +#: commands/cmderrors/cmderrors.go:818 +msgid "'%s' has an invalid signature" +msgstr "'%s' hat eine ungültige Signatur" + +#: internal/arduino/cores/packagemanager/package_manager.go:416 +msgid "" +"'build.core' and 'build.variant' refer to different platforms: %[1]s and " +"%[2]s" +msgstr "" +"'build.core' und 'build.variant' verweisen auf andere Plattformen: %[1]s and" +" %[2]s" + +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 +msgid "(hidden)" +msgstr "(versteckt)" + +#: internal/arduino/builder/libraries.go:303 +msgid "(legacy)" +msgstr "(veraltet)" + +#: internal/cli/lib/install.go:82 +msgid "" +"--git-url and --zip-path are disabled by default, for more information see: " +"%v" +msgstr "" +"--git-url und --zip-path sind Standardmäßig deaktiviert. Für mehr " +"Informationen sehen Sie hier nach: %v" + +#: internal/cli/lib/install.go:84 +msgid "" +"--git-url and --zip-path flags allow installing untrusted files, use it at " +"your own risk." +msgstr "" +"--git-url und --zip-path flags erlauben das Installieren von nicht " +"vertrauenswürdigen Dateien. Benutzung auf eigene Gefahr." + +#: internal/cli/lib/install.go:87 +msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" +msgstr "" +"--git-url oder --zip-path können nicht mit --install-in-builtin-dir " +"verwendet werden" + +#: commands/service_sketch_new.go:66 +msgid ".ino file already exists" +msgstr ".ino-Datei existiert bereits" + +#: internal/cli/updater/updater.go:30 +msgid "A new release of Arduino CLI is available:" +msgstr "Eine neue Version von Arduino CLI ist verfügbar:" + +#: commands/cmderrors/cmderrors.go:299 +msgid "A programmer is required to upload" +msgstr "Zum Hochladen ist ein Programmer benötigt" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "ARCH" +msgstr "ARCH" + +#: internal/cli/generatedocs/generatedocs.go:80 +msgid "ARDUINO COMMAND LINE MANUAL" +msgstr "Arduino CLI Handbuch" + +#: internal/cli/usage.go:28 +msgid "Additional help topics:" +msgstr "Weitere Hilfethemen:" + +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 +msgid "Adds one or more values to a setting." +msgstr "Fügt einen oder mehrere Werte zu einer Einstellung hinzu." + +#: internal/cli/usage.go:23 +msgid "Aliases:" +msgstr "Decknamen:" + +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "Alle Plattformen sind aktuell" + +#: internal/cli/core/upgrade.go:87 +msgid "All the cores are already at the latest version" +msgstr "Alle Kerne sind bereits auf der neuesten Version" + +#: commands/service_library_install.go:136 +msgid "Already installed %s" +msgstr "Bereits installiert %s" + +#: internal/arduino/builder/internal/detector/detector.go:91 +msgid "Alternatives for %[1]s: %[2]s" +msgstr "Alternativen für %[1]s: %[2]s" + +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 +msgid "An error occurred adding prototypes" +msgstr "Beim Hinzufügen von Prototypen ist ein Fehler aufgetreten" + +#: internal/arduino/builder/internal/detector/detector.go:213 +msgid "An error occurred detecting libraries" +msgstr "Ein Fehler trat beim erkennen der Bibliotheken auf" + +#: internal/cli/daemon/daemon.go:87 +msgid "Append debug logging to the specified file" +msgstr "Debug-Protokollierung an die angegebene Datei anhängen" + +#: internal/cli/lib/search.go:208 +msgid "Architecture: %s" +msgstr "Architektur: %s" + +#: commands/service_sketch_archive.go:69 +msgid "Archive already exists" +msgstr "Archiv existiert bereits" + +#: internal/arduino/builder/core.go:164 +msgid "Archiving built core (caching) in: %[1]s" +msgstr "Gebauter Kern wird archiviert (zwischengespeichert) in: %[1]s" + +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 +msgid "Arduino CLI sketch commands." +msgstr "Arduino CLI Sketch Befehle." + +#: internal/cli/cli.go:88 +msgid "Arduino CLI." +msgstr "Arduino CLI." + +#: internal/cli/cli.go:89 +msgid "Arduino Command Line Interface (arduino-cli)." +msgstr "Arduino Befehlszeilen-Schnittstelle (arduino-cli)." + +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 +msgid "Arduino board commands." +msgstr "Arduino-Platinen-Befehle." + +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 +msgid "Arduino cache commands." +msgstr "Arduino-Cache-Befehle." + +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 +msgid "Arduino commands about libraries." +msgstr "Arduino Befehle für Bibliotheken." + +#: internal/cli/config/config.go:35 +msgid "Arduino configuration commands." +msgstr "Arduino-Konfigurationsbefehle." + +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 +msgid "Arduino core operations." +msgstr "Arduino-Kern-Operationen." + +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 +msgid "Arguments error: %v" +msgstr "Argumentefehler: %v" + +#: internal/cli/board/attach.go:36 +msgid "Attaches a sketch to a board." +msgstr "Ordnet einen Sketch einem Board zu." + +#: internal/cli/lib/search.go:199 +msgid "Author: %s" +msgstr "Autor: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:78 +msgid "" +"Automatic library install can't be performed in this case, please manually " +"remove all duplicates and retry." +msgstr "" +"Automatische Installation der Bibliotheken kann in diesem Fall nicht " +"durchgeführt werden, bitte lösche alle Duplikate und versuche erneut." + +#: commands/service_library_uninstall.go:87 +msgid "" +"Automatic library uninstall can't be performed in this case, please manually" +" remove them." +msgstr "" +"Automatische Desinstallation der Bibliotheken kann in diesem Fall nicht " +"durchgeführt werden, bitte entferne sie manuell." + +#: internal/cli/lib/list.go:138 +msgid "Available" +msgstr "Verfügbar" + +#: internal/cli/usage.go:25 +msgid "Available Commands:" +msgstr "Verfügbare Befehle:" + +#: internal/cli/upload/upload.go:75 +msgid "Binary file to upload." +msgstr "Binärdatei zum Hochladen." + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "Board Name" +msgstr "Platinenname" + +#: internal/cli/board/details.go:139 +msgid "Board name:" +msgstr "Platinenname:" + +#: internal/cli/board/details.go:141 +msgid "Board version:" +msgstr "Platinenversion:" + +#: internal/arduino/builder/sketch.go:245 +msgid "Bootloader file specified but missing: %[1]s" +msgstr "Bootloader-Datei angegeben, aber nicht vorhanden: %[1]s" + +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." +msgstr "" +"Builds von Kernen und Sketches werden in diesem Pfad gespeichert, damit sie " +"zwischengespeichert und wiederverwendet werden können." + +#: internal/arduino/resources/index.go:65 +msgid "Can't create data directory %s" +msgstr "Datenverzeichnis %s kann nicht erstellt werden" + +#: commands/cmderrors/cmderrors.go:511 +msgid "Can't create sketch" +msgstr "Sketch kann nicht erstellt werden" + +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 +msgid "Can't download library" +msgstr "Bibliothek kann nicht heruntergeladen werden" + +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 +msgid "Can't find dependencies for platform %s" +msgstr "Abhängigkeiten für die Plattform %s können nicht gefunden werden" + +#: commands/cmderrors/cmderrors.go:537 +msgid "Can't open sketch" +msgstr "Sketch kann nicht geöffnet werden" + +#: commands/cmderrors/cmderrors.go:524 +msgid "Can't update sketch" +msgstr "Sketch kann nicht aktualisiert werden" + +#: internal/cli/arguments/arguments.go:38 +msgid "Can't use the following flags together: %s" +msgstr "Die folgenden Flags können nicht gemeinsam verwendet werden: %s" + +#: internal/cli/daemon/daemon.go:117 +msgid "Can't write debug log: %s" +msgstr "Debug-Log kann icht geschrieben werden: %s" + +#: commands/service_compile.go:190 commands/service_compile.go:193 +msgid "Cannot create build cache directory" +msgstr "Cache-Verzeichnis kann nicht angelegt werden" + +#: commands/service_compile.go:215 +msgid "Cannot create build directory" +msgstr "Build-Verzeichnis kann nicht angelegt werden" + +#: internal/cli/config/init.go:100 +msgid "Cannot create config file directory: %v" +msgstr "Verzeichnis der Konfigurationsdatei kann nicht erstellt werden: %v" + +#: internal/cli/config/init.go:124 +msgid "Cannot create config file: %v" +msgstr "Konfigurationsdatei kann nicht erstellt werden: %v" + +#: commands/cmderrors/cmderrors.go:781 +msgid "Cannot create temp dir" +msgstr "Temporärer Ordner kann nicht erstellt werden" + +#: commands/cmderrors/cmderrors.go:799 +msgid "Cannot create temp file" +msgstr "Temporäre Datei kann nicht erstellt werden" + +#: internal/cli/config/delete.go:55 +msgid "Cannot delete the key %[1]s: %[2]v" +msgstr "Der Schlüssel %[1]s:%[2]v kann nicht gelöscht werden" + +#: commands/service_debug.go:228 +msgid "Cannot execute debug tool" +msgstr "Das Debug-Werkzeug kann nicht gestartet werden" + +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 +msgid "Cannot find absolute path: %v" +msgstr "Absoluter Pfad %v wurde nicht gefunden" + +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "Der Konfigurationsschlüssel %[1]s kann nicht abgerufen werden: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 +msgid "Cannot install platform" +msgstr "Plattform kann nicht installiert werden" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 +msgid "Cannot install tool %s" +msgstr "Werkzeug %s kann nicht installiert werden" + +#: commands/service_upload.go:544 +msgid "Cannot perform port reset: %s" +msgstr "Port-Reset konnte nicht ausgeführt werden: %s" + +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "Der Konfigurationsschlüssel %[1]s kann nicht entfernt werden: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" +msgstr "Plattform kann nicht upgegraded werden" + +#: internal/cli/lib/search.go:207 +msgid "Category: %s" +msgstr "Kategorie: %s" + +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 +msgid "Check dependencies status for the specified library." +msgstr "Prüfe die die Abhängigkeiten für die angegebene Bibliothek." + +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" +"Prüfung, ob die angegebene Board-/Programmer--Kombination das Debugging " +"unterstützt." + +#: internal/arduino/resources/checksums.go:166 +msgid "Checksum differs from checksum in package.json" +msgstr "Prüfsumme unterscheidet sich von der Prüfsumme in package.json" + +#: internal/cli/board/details.go:190 +msgid "Checksum:" +msgstr "Prüfsumme:" + +#: internal/cli/cache/cache.go:32 +msgid "Clean caches." +msgstr "Caches bereinigen." + +#: internal/cli/cli.go:181 +msgid "Comma-separated list of additional URLs for the Boards Manager." +msgstr "Durch Kommata getrennte Liste mit URLs für die Board-Manager." + +#: internal/cli/board/list.go:56 +msgid "" +"Command keeps running and prints list of connected boards whenever there is " +"a change." +msgstr "" +"Befehl läuft weiter und gibt die Liste der verbundenen Platinen aus, sobald " +"sich eine Änderung ergibt." + +#: commands/service_debug_config.go:178 commands/service_upload.go:452 +msgid "Compiled sketch not found in %s" +msgstr "Kompilierter Sketch wurde nicht in%s gefunden" + +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 +msgid "Compiles Arduino sketches." +msgstr "Kompiliert Arduino-Sketche." + +#: internal/arduino/builder/builder.go:421 +msgid "Compiling core..." +msgstr "Kern wird kompiliert ..." + +#: internal/arduino/builder/builder.go:400 +msgid "Compiling libraries..." +msgstr "Bibliotheken werden kompiliert ..." + +#: internal/arduino/builder/libraries.go:134 +msgid "Compiling library \"%[1]s\"" +msgstr "Bibliothek \"%[1]s\" wird kompiliert" + +#: internal/arduino/builder/builder.go:384 +msgid "Compiling sketch..." +msgstr "Sketch wird kompiliert ..." + +#: internal/cli/config/init.go:94 +msgid "" +"Config file already exists, use --overwrite to discard the existing one." +msgstr "" +"Konfigurationsdatei existiert bereits, verwende --overwrite um diese zu " +"überschreiben." + +#: internal/cli/config/init.go:179 +msgid "Config file written to: %s" +msgstr "Konfigurationsdatei geschrieben nach: %s" + +#: internal/cli/debug/debug.go:250 +msgid "Configuration options for %s" +msgstr "Konfigurationsoptionen für %s" + +#: internal/cli/monitor/monitor.go:78 +msgid "" +"Configure communication port settings. The format is " +"<ID>=<value>[,<ID>=<value>]..." +msgstr "" +"Konfiguriere die Com-Port-Einstellungen. Das Format lautet: " +"<ID>=<value>[,<ID>=<value>]..." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +msgid "Configuring platform." +msgstr "Konfiguriere Plattform" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 +msgid "Configuring tool." +msgstr "Konfiguriere Werkzeug." + +#: internal/cli/board/list.go:198 +msgid "Connected" +msgstr "Verbunden" + +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "Verbindung zu %s wird hergestellt. Abbrechen mit STRG-C." + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Core" +msgstr "Kern" + +#: internal/cli/configuration/network.go:127 +msgid "Could not connect via HTTP" +msgstr "Konnte nicht über HTTP verbinden" + +#: commands/instances.go:487 +msgid "Could not create index directory" +msgstr "Indexverzeichnis konnte nicht erstellt werden" + +#: internal/arduino/builder/core.go:42 +msgid "Couldn't deeply cache core build: %[1]s" +msgstr "Der Core-Build konnte nicht zwischengespeichert werden: %[1]s" + +#: internal/arduino/builder/sizer.go:155 +msgid "Couldn't determine program size" +msgstr "Programmgröße konnte nicht ermittelt werden" + +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 +msgid "Couldn't get current working directory: %v" +msgstr "Das aktuelle Arbeitsverzeichnis konnte nicht gefunden werden: %v " + +#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 +msgid "Create a new Sketch" +msgstr "Einen neuen Sketch erstellen" + +#: internal/cli/compile/compile.go:101 +msgid "Create and print a profile configuration from the build." +msgstr "Erstelle und drucke ein Konfigurations-Profil aus dem Build" + +#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 +msgid "Creates a zip file containing all sketch files." +msgstr "Erstellt eine ZIP-Datei, die alle Sketch-Dateien enthält." + +#: internal/cli/config/init.go:46 +msgid "" +"Creates or updates the configuration file in the data directory or custom " +"directory with the current configuration settings." +msgstr "" +"Erstellt oder aktualisiert die Konfigurationsdatei im Datenverzeichnis oder " +"einem benutzerdefinierten Verzeichnis mit den aktuellen " +"Konfigurationseinstellungen." + +#: internal/cli/compile/compile.go:340 +msgid "" +"Currently, Build Profiles only support libraries available through Arduino " +"Library Manager." +msgstr "" +"Aktuell werden in Build-Profilen nur Bibliotheken aus dem Arduino-" +"Bibliotheksmanager unterstützt." + +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" +msgstr "Benutzerdefinierte Konfigurtion für %s:" + +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 +msgid "DEPRECATED" +msgstr "VERALTET" + +#: internal/cli/daemon/daemon.go:195 +msgid "Daemon is now listening on %s:%s" +msgstr "Daemon überwacht jetzt %s: %s" + +#: internal/cli/debug/debug.go:53 +msgid "Debug Arduino sketches." +msgstr "Arduino-Sketche debuggen" + +#: internal/cli/debug/debug.go:54 +msgid "" +"Debug Arduino sketches. (this command opens an interactive gdb session)" +msgstr "" +"Arduino-Sketche debuggen. (Dieser Befehl öffnet eine interaktive gdb-" +"Sitzung)" + +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 +msgid "Debug interpreter e.g.: %s" +msgstr "Debug-Interpreter z.B.: %s" + +#: commands/service_debug_config.go:215 +msgid "Debugging not supported for board %s" +msgstr "Debugging für Board %s nicht unterstützt" + +#: internal/cli/monitor/monitor.go:331 +msgid "Default" +msgstr "Standard" + +#: internal/cli/board/attach.go:115 +msgid "Default FQBN set to" +msgstr "Standard-FQBN gesetzt auf" + +#: internal/cli/board/attach.go:114 +msgid "Default port set to" +msgstr "Standard-Port gesetzt auf" + +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "Standardmäßiger Programmer ist gesetzt auf" + +#: internal/cli/cache/clean.go:32 +msgid "Delete Boards/Library Manager download cache." +msgstr "Board/Bibliotheks-Manager Download-Cache löschen" + +#: internal/cli/cache/clean.go:33 +msgid "" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "" +"Inhalt des Download-Caches löschen, in dem während der Installation von " +"Bibliotheken und Boards die Archivdateien gespeichert werden." + +#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 +msgid "Deletes a settings key and all its sub keys." +msgstr "" +"Löscht einen Einstellungsschlüssel und alle zugehörigen Unterschlüssel." + +#: internal/cli/lib/search.go:215 +msgid "Dependencies: %s" +msgstr "Abhängigkeiten: %s" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 +msgid "Description" +msgstr "Beschreibung" + +#: internal/arduino/builder/builder.go:314 +msgid "Detecting libraries used..." +msgstr "Verwendete Bibliotheken erkennen ..." + +#: internal/cli/board/list.go:46 +msgid "" +"Detects and displays a list of boards connected to the current computer." +msgstr "" +"Erkennt und zeigt eine Liste von Platinen, die mit dem Computer verbunden " +"sind." + +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 +msgid "Directory containing binaries for debug." +msgstr "Verzeichnis, welches die Binärdateien zum Debuggen enthält." + +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 +msgid "Directory containing binaries to upload." +msgstr "Verzeichnis, welches die Binärdateien zum Hochladen enthält." + +#: internal/cli/generatedocs/generatedocs.go:45 +msgid "" +"Directory where to save generated files. Default is './docs', the directory " +"must exist." +msgstr "" +"Verzeichnis in dem die erzeugten Dateien gespeichert werden. Standardmäßig " +"'./docs', Dieses Verzeichnis muss existieren." + +#: internal/cli/completion/completion.go:44 +msgid "Disable completion description for shells that support it" +msgstr "" +"Vervollständigungsbeschreibung für Shells abschalten, die das unterstützen" + +#: internal/cli/board/list.go:199 +msgid "Disconnected" +msgstr "Verbindung getrennt" + +#: internal/cli/daemon/daemon.go:90 +msgid "Display only the provided gRPC calls" +msgstr "Nur die bereitgestellten gRPC-Aufrufe anzeigen" + +#: internal/cli/lib/install.go:62 +msgid "Do not install dependencies." +msgstr "Abhängigkeiten nicht installieren." + +#: internal/cli/lib/install.go:63 +msgid "Do not overwrite already installed libraries." +msgstr "Bereits installierte Bibliotheken nicht überschreiben." + +#: internal/cli/core/install.go:56 +msgid "Do not overwrite already installed platforms." +msgstr "Bereits installierte Plattformen nicht überschreiben." + +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 +msgid "Do not perform the actual upload, just log out actions" +msgstr "" +"Den eigentlichen Hochladevorgang nicht durchführen, sondern nur die " +"Abmeldeaktionen" + +#: internal/cli/daemon/daemon.go:81 +msgid "Do not terminate daemon process if the parent process dies" +msgstr "Den Daemon-Prozess nicht mit dem Elternprozess beenden." + +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" +"Keine Bibliotheksabhängigkeiten aktualisieren, wenn diese bereits " +"installiert sind." + +#: commands/service_library_download.go:92 +msgid "Downloading %s" +msgstr "%s wird heruntergeladen" + +#: internal/arduino/resources/index.go:137 +msgid "Downloading index signature: %s" +msgstr "Indexsignatur wird heruntergeladen: %s" + +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 +msgid "Downloading index: %s" +msgstr "Index wird heruntergeladen: %s" + +#: commands/instances.go:372 +msgid "Downloading library %s" +msgstr "Bibliothek %s wird heruntergeladen" + +#: commands/instances.go:54 +msgid "Downloading missing tool %s" +msgstr "Fehlendes Werkzeug %s wird heruntergeladen" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 +msgid "Downloading packages" +msgstr "Pakete werden heruntergeladen" + +#: internal/arduino/cores/packagemanager/profiles.go:101 +msgid "Downloading platform %s" +msgstr "Plattform %s wird heruntergeladen" + +#: internal/arduino/cores/packagemanager/profiles.go:177 +msgid "Downloading tool %s" +msgstr "Werkzeug %s wird heruntergeladen" + +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 +msgid "Downloads one or more cores and corresponding tool dependencies." +msgstr "" +"Lädt einen oder mehrere Kerne und die entsprechenden Werkzeugabhängigkeiten " +"herunter." + +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 +msgid "Downloads one or more libraries without installing them." +msgstr "" +"Lädt eine oder mehrere Bibliotheken herunter, ohne sie zu installieren." + +#: internal/cli/daemon/daemon.go:84 +msgid "Enable debug logging of gRPC calls" +msgstr "Debug-Protokollierung von gRPC-Aufrufen aktivieren" + +#: internal/cli/lib/install.go:65 +msgid "Enter a path to zip file" +msgstr "Geben Sie einen Pfad zur ZIP-Datei an" + +#: internal/cli/lib/install.go:64 +msgid "Enter git url for libraries hosted on repositories" +msgstr "Gib eine git-URL mit den Bibliotheken aus Repositories ein" + +#: commands/service_sketch_archive.go:105 +msgid "Error adding file to sketch archive" +msgstr "Fehler beim Hinzufügen einer Datei zum Sketch-Archiv" + +#: internal/arduino/builder/core.go:170 +msgid "Error archiving built core (caching) in %[1]s: %[2]s" +msgstr "Fehler bei speichern des gebauten Kerns (caching) in %[1]s:%[2]s" + +#: internal/cli/sketch/archive.go:85 +msgid "Error archiving: %v" +msgstr "Fehler beim Archivieren: %v" + +#: commands/service_sketch_archive.go:93 +msgid "Error calculating relative file path" +msgstr "Fehler beim Berechnen des relativen Dateipfads" + +#: internal/cli/cache/clean.go:48 +msgid "Error cleaning caches: %v" +msgstr "Fehler beim bereinigen des Caches: %v" + +#: internal/cli/compile/compile.go:225 +msgid "Error converting path to absolute: %v" +msgstr "Fehler beim konvertieren des Pfads zum Absolutpfad: %v" + +#: commands/service_compile.go:420 +msgid "Error copying output file %s" +msgstr "Fehler beim Kopieren der Ausgabedatei %s" + +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "Fehler beim Erstellen der Konfiguration: %v" + +#: internal/cli/instance/instance.go:43 +msgid "Error creating instance: %v" +msgstr "Fehler beim Erstellen der Instanz: %v" + +#: commands/service_compile.go:403 +msgid "Error creating output dir" +msgstr "Fehler beim Erstellen des Ausgabeverzeichnisses" + +#: commands/service_sketch_archive.go:81 +msgid "Error creating sketch archive" +msgstr "Fehler beim Erstellen des Sketch-Archivs" + +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 +msgid "Error creating sketch: %v" +msgstr "Fehler beim Erstellen des Sketches: %v" + +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 +msgid "Error detecting boards: %v" +msgstr "Fehler beim Erkennen von Platinen: %v" + +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 +msgid "Error downloading %[1]s: %[2]v" +msgstr "Fehler beim Herunterladen von %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 +msgid "Error downloading %s" +msgstr "Fehler beim Herunterladen von %s" + +#: commands/instances.go:661 internal/arduino/resources/index.go:83 +msgid "Error downloading index '%s'" +msgstr "Fehler beim Herunterladen des Index '%s'" + +#: internal/arduino/resources/index.go:138 +msgid "Error downloading index signature '%s'" +msgstr "Fehler beim Herunterladen der Indexsignatur '%s'" + +#: commands/instances.go:382 commands/instances.go:388 +msgid "Error downloading library %s" +msgstr "Fehler beim Herunterladen der Bibliothek %s" + +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 +msgid "Error downloading platform %s" +msgstr "Fehler beim Herunterladen der Plattform %s" + +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 +msgid "Error downloading tool %s" +msgstr "Fehler beim Herunterladen des Werkzeugs %s" + +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 +msgid "Error during Debug: %v" +msgstr "Fehler beim Debuggen: %v" + +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 +msgid "Error during JSON encoding of the output: %v" +msgstr "Fehler beim Generieren der JSON-Ausgabe: %v" + +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 +msgid "Error during Upload: %v" +msgstr "Fehler während dem Hochladen: %v" + +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" +msgstr "Fehler bei der Board-Erkennung" + +#: internal/cli/compile/compile.go:394 +msgid "Error during build: %v" +msgstr "Fehler beim Build: %v" + +#: internal/cli/core/install.go:81 +msgid "Error during install: %v" +msgstr "Fehler während dem Installieren: %v" + +#: internal/cli/core/uninstall.go:75 +msgid "Error during uninstall: %v" +msgstr "Fehler während der Deinstallation: %v" + +#: internal/cli/core/upgrade.go:136 +msgid "Error during upgrade: %v" +msgstr "Fehler beim Upgrade %v" + +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 +msgid "Error extracting %s" +msgstr "Fehler beim Extrahieren von %s" + +#: commands/service_upload.go:449 +msgid "Error finding build artifacts" +msgstr "Fehler beim finden der Build-Artifacts" + +#: internal/cli/debug/debug.go:139 +msgid "Error getting Debug info: %v" +msgstr "Fehler beim ermitteln der Debug-Information: %v" + +#: commands/service_sketch_archive.go:57 +msgid "Error getting absolute path of sketch archive" +msgstr "Fehler beim Abrufen des absoluten Pfads des Sketch-Archivs" + +#: internal/cli/board/details.go:74 +msgid "Error getting board details: %v" +msgstr "Fehler beim Abrufen von Platinendetails: %v" + +#: internal/arduino/builder/internal/compilation/database.go:82 +msgid "Error getting current directory for compilation database: %s" +msgstr "" +"Fehler beim ermitteln des Verzeichnisses für die Kompilier-Datenbank: %s" + +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" +"Fehler beim ermitteln des Standard-Ports aus 'sketch.yaml' Prüfe, ob di im " +"richtigen Sketch-Verzeichnis bist oder verwende das --port Attribut: %s" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 +msgid "Error getting information for library %s" +msgstr "Fehler beim Abrufen von Informationen für die Bibliothek %s" + +#: internal/cli/lib/examples.go:75 +msgid "Error getting libraries info: %v" +msgstr "Fehler beim Abrufen von Bibliotheksinformationen: %v" + +#: internal/cli/arguments/fqbn.go:96 +msgid "Error getting port metadata: %v" +msgstr "Fehler beim Abrufen von Port-Metadaten: %v" + +#: internal/cli/monitor/monitor.go:154 +msgid "Error getting port settings details: %s" +msgstr "Fehler beim Abrufen von Details zu Port-Einstellungen: %s" + +#: internal/cli/upload/upload.go:169 +msgid "Error getting user input" +msgstr "Fehler beim lesen der Benutzereingaben." + +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 +msgid "Error initializing instance: %v" +msgstr "Fehler beim Initialisieren der Instanz: %v" + +#: internal/cli/lib/install.go:148 +msgid "Error installing %s: %v" +msgstr "Fehler beim Installieren von %s: %v" + +#: internal/cli/lib/install.go:122 +msgid "Error installing Git Library: %v" +msgstr "Fehler beim Installieren der Git-Bibliothek: %v" + +#: internal/cli/lib/install.go:100 +msgid "Error installing Zip Library: %v" +msgstr "Fehler beim Installieren der Zip-Bibliothek: %v" + +#: commands/instances.go:398 +msgid "Error installing library %s" +msgstr "Fehler beim Installieren der Bibliothek %s" + +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 +msgid "Error installing platform %s" +msgstr "Fehler beim Installieren der Plattform %s" + +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 +msgid "Error installing tool %s" +msgstr "Fehler beim Installieren des Werkzeugs %s" + +#: internal/cli/board/listall.go:66 +msgid "Error listing boards: %v" +msgstr "Fehler beim Auflisten von Platinen: %v" + +#: internal/cli/lib/list.go:91 +msgid "Error listing libraries: %v" +msgstr "Fehler beim Auflisten der Bibliotheken: %v" + +#: internal/cli/core/list.go:69 +msgid "Error listing platforms: %v" +msgstr "Fehler beim Auflisten von Plattformen: %v" + +#: commands/cmderrors/cmderrors.go:424 +msgid "Error loading hardware platform" +msgstr "Fehler beim Laden der Hardware-Plattform" + +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 +msgid "Error loading index %s" +msgstr "Fehler beim Laden des Index %s" + +#: internal/arduino/resources/index.go:99 +msgid "Error opening %s" +msgstr "Fehler beim Öffnen von %s" + +#: internal/cli/daemon/daemon.go:111 +msgid "Error opening debug logging file: %s" +msgstr "Fehler beim Öffnen der Debug-Protokollierungsdatei: %s" + +#: internal/cli/compile/compile.go:196 +msgid "Error opening source code overrides data file: %v" +msgstr "Fehler, öffnen der Quellcodes überschreibt die Datendatei: %v" + +#: internal/cli/compile/compile.go:209 +msgid "Error parsing --show-properties flag: %v" +msgstr "Fehler bei der Auswertung des --show-Property Attributs: %v" + +#: commands/service_compile.go:412 +msgid "Error reading build directory" +msgstr "Fehler bel Lesen des Build-Verzechnisses" + +#: commands/service_sketch_archive.go:75 +msgid "Error reading sketch files" +msgstr "Fehler beim Lesen von Sketch-Dateien" + +#: internal/cli/lib/check_deps.go:72 +msgid "Error resolving dependencies for %[1]s: %[2]s" +msgstr "Fehler beim Auflösen von Abhängigkeiten für %[1]s: %[2]s" + +#: internal/cli/core/upgrade.go:68 +msgid "Error retrieving core list: %v" +msgstr "Fehler beim Abrufen der Kernliste: %v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 +msgid "Error rolling-back changes: %s" +msgstr "Fehler beim Rückgängmachen der Änderungen: %s" + +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 +msgid "Error saving downloaded index" +msgstr "Fehler beim Speichern des heruntergeladenen Index" + +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 +msgid "Error saving downloaded index signature" +msgstr "Fehler beim Speichern der heruntergeladenen Indexsignatur" + +#: internal/cli/board/search.go:63 +msgid "Error searching boards: %v" +msgstr "Fehler bei der Suche nach Platinen: %v" + +#: internal/cli/lib/search.go:126 +msgid "Error searching for Libraries: %v" +msgstr "Fehler beim Suchen der Bibliotheken: %v" + +#: internal/cli/core/search.go:82 +msgid "Error searching for platforms: %v" +msgstr "Fehler bei der Suche nach Plattformen: %v" + +#: internal/arduino/builder/internal/compilation/database.go:67 +msgid "Error serializing compilation database: %s" +msgstr "Fehler bei der Serialisierung der Kompilierungsdatenbank: %s" + +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "Fehler beim Setzen des \"Raw-Mode\": %s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "Fehler beim Einstellen des Wertes: %v" + +#: internal/cli/board/list.go:86 +msgid "Error starting discovery: %v" +msgstr "Fehler beim starten der Suche: %v" + +#: internal/cli/lib/uninstall.go:67 +msgid "Error uninstalling %[1]s: %[2]v" +msgstr "Fehler beim Deinstallieren von %[1]s: %[2]v" + +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 +msgid "Error updating library index: %v" +msgstr "Fehler beim Aktualisieren des Bibliotheksindex: %v" + +#: internal/cli/lib/upgrade.go:75 +msgid "Error upgrading libraries" +msgstr "Fehler beim Upgraden der Bibliothken" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 +msgid "Error upgrading platform: %s" +msgstr "Fehler beim Upgraden der Plattform: %s" + +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 +msgid "Error verifying signature" +msgstr "Fehler beim Verifizieren der Signatur" + +#: internal/arduino/builder/internal/detector/detector.go:369 +msgid "Error while detecting libraries included by %[1]s" +msgstr "Fehler beim Ermitteln der in %[1]s eingebundenen Bibliotheken" + +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 +msgid "Error while determining sketch size: %s" +msgstr "Fehler während der Bestimmung der Sketch-Größe: %s" + +#: internal/arduino/builder/internal/compilation/database.go:70 +msgid "Error writing compilation database: %s" +msgstr "Fehler beim Schreiben der Kompilierungsdatenbank: %s" + +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "Fehler beim Schreiben in die Datei: %v" + +#: internal/cli/completion/completion.go:56 +msgid "Error: command description is not supported by %v" +msgstr "Fehler: Befehlsbeschreibung wird nicht unterstützt von %v" + +#: internal/cli/compile/compile.go:202 +msgid "Error: invalid source code overrides data file: %v" +msgstr "Fehler: ungültiger Quellcode überschreibt die Daten-Datei: %v" + +#: internal/cli/board/list.go:104 +msgid "Event" +msgstr "Ereignis" + +#: internal/cli/lib/examples.go:123 +msgid "Examples for library %s" +msgstr "Beispiele für Bibliothek %s" + +#: internal/cli/usage.go:24 +msgid "Examples:" +msgstr "Beispiele:" + +#: internal/cli/debug/debug.go:233 +msgid "Executable to debug" +msgstr "Ausführbare Datei zum Debuggen" + +#: commands/service_debug_config.go:181 commands/service_upload.go:455 +msgid "Expected compiled sketch in directory %s, but is a file instead" +msgstr "" +"Kompilierter Sketch wurde im Verzeichnis %s erwartet, aber eine Datei " +"gefunden." + +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "FQBN" +msgstr "FQBN" + +#: internal/cli/board/details.go:140 +msgid "FQBN:" +msgstr "FQBN:" + +#: commands/service_upload.go:578 +msgid "Failed chip erase" +msgstr "Chip-Löschung fehlgeschlagen" + +#: commands/service_upload.go:585 +msgid "Failed programming" +msgstr "Fehlgeschlagene Programmierung" + +#: commands/service_upload.go:581 +msgid "Failed to burn bootloader" +msgstr "Schreiben des Bootloaders fehlgeschlagen" + +#: commands/instances.go:88 +msgid "Failed to create data directory" +msgstr "Erzeugen des Datenverzeichnisses fehlgeschlagen" + +#: commands/instances.go:77 +msgid "Failed to create downloads directory" +msgstr "Erzeugen des Download-Verzeichnisses fehlgeschlagen" + +#: internal/cli/daemon/daemon.go:150 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." +msgstr "" +"Fehler beim Überwachen von TCP-Port: %[1]s. %[2]s ist ein ungültiger Port." + +#: internal/cli/daemon/daemon.go:145 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." +msgstr "" +"Fehler beim Überwachen von TCP-Port: %[1]s. %[2]s ist ein unbekannter Name." + +#: internal/cli/daemon/daemon.go:157 +msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" +msgstr "" +"Fehler beim Überwachen von TCP-Port: %[1]s. Unerwarteter Fehler: %[2]v" + +#: internal/cli/daemon/daemon.go:155 +msgid "Failed to listen on TCP port: %s. Address already in use." +msgstr "" +"Fehler beim Überwachen von TCP-Port: %s. Adresse wird bereits benutzt." + +#: commands/service_upload.go:589 +msgid "Failed uploading" +msgstr "Fehlgeschlagenes Hochladen" + +#: internal/cli/board/details.go:188 +msgid "File:" +msgstr "Datei:" + +#: commands/service_compile.go:163 +msgid "" +"Firmware encryption/signing requires all the following properties to be " +"defined: %s" +msgstr "" +"Die Verschlüsselung/Signierung der Firmware erfordert die Festlegung der " +"folgenden Eigenschaften: %s" + +#: commands/service_debug.go:187 +msgid "First message must contain debug request, not data" +msgstr "" +"Die erste Nachricht muss eine Debug-Anforderung enthalten, keine Daten." + +#: internal/cli/arguments/arguments.go:49 +msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" +msgstr "Attribut %[1]s ist in Verbindung mit %[2]s vorgeschrieben." + +#: internal/cli/usage.go:26 +msgid "Flags:" +msgstr "Attribute:" + +#: internal/cli/arguments/pre_post_script.go:38 +msgid "" +"Force run of post-install scripts (if the CLI is not running interactively)." +msgstr "" +"Ausführung der Post-Install-Scripts erzwingen (wenn die CLI nicht interaktiv" +" läuft)" + +#: internal/cli/arguments/pre_post_script.go:40 +msgid "" +"Force run of pre-uninstall scripts (if the CLI is not running " +"interactively)." +msgstr "" +"Ausführung der Pre-Uninstall-Scripts erzwingen (wenn die CLI nicht " +"interaktiv läuft)" + +#: internal/cli/arguments/pre_post_script.go:39 +msgid "" +"Force skip of post-install scripts (if the CLI is running interactively)." +msgstr "" +"Ausführung der Post-Install-Scripts überspringen (wenn die CLI nicht " +"interaktiv läuft)" + +#: internal/cli/arguments/pre_post_script.go:41 +msgid "" +"Force skip of pre-uninstall scripts (if the CLI is running interactively)." +msgstr "" +"Ausführung der Pre-Uninstall-Scripts überspringen (wenn die CLI nicht " +"interaktiv läuft)" + +#: commands/cmderrors/cmderrors.go:839 +msgid "Found %d platforms matching \"%s\": %s" +msgstr "%d Platformen passend zu \"%s\":%s gefunden" + +#: internal/cli/arguments/fqbn.go:39 +msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" +msgstr "Vollständig qualifizierter Platinenname, z.B.: arduino:avr:uno" + +#: commands/service_debug.go:321 +msgid "GDB server '%s' is not supported" +msgstr "GDB-Server '%s' wird nicht unterstützt" + +#: internal/cli/generatedocs/generatedocs.go:38 +#: internal/cli/generatedocs/generatedocs.go:39 +msgid "Generates bash completion and command manpages." +msgstr "Generiert Bash-Komplettierungen und Manpages für die Befehle" + +#: internal/cli/completion/completion.go:38 +msgid "Generates completion scripts" +msgstr "Erzeugt Komplettierungs-Skripte" + +#: internal/cli/completion/completion.go:39 +msgid "Generates completion scripts for various shells" +msgstr "Erzeugt Komplettierungs-Skripte für verschiedene Shells" + +#: internal/arduino/builder/builder.go:334 +msgid "Generating function prototypes..." +msgstr "Funktionsprototypen werden generiert ..." + +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "Einstellungsschlüsselwert abrufen" + +#: internal/cli/usage.go:27 +msgid "Global Flags:" +msgstr "Globale Attribute:" + +#: internal/arduino/builder/sizer.go:166 +msgid "" +"Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " +"bytes for local variables. Maximum is %[2]s bytes." +msgstr "" +"Globale Variablen verwenden %[1]s Bytes (%[3]s%%) des dynamischen Speichers," +" %[4]s Bytes für lokale Variablen verbleiben. Das Maximum sind %[2]s Bytes." + +#: internal/arduino/builder/sizer.go:172 +msgid "Global variables use %[1]s bytes of dynamic memory." +msgstr "Globale Variablen verwenden %[1]s Bytes des dynamischen Speichers." + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 +msgid "ID" +msgstr "ID" + +#: internal/cli/board/details.go:111 +msgid "Id" +msgstr "Id" + +#: internal/cli/board/details.go:154 +msgid "Identification properties:" +msgstr "Identifikationseigenschaften:" + +#: internal/cli/compile/compile.go:135 +msgid "If set built binaries will be exported to the sketch folder." +msgstr "" +"Wenn gesetzt werden die erzeugten Binärdateien in das Sketch-Verzeichnis " +"exportiert." + +#: internal/cli/core/list.go:46 +msgid "" +"If set return all installable and installed cores, including manually " +"installed." +msgstr "" +"Wenn gesetzt gib alle installierten und installierbaren Kerne inklusive der " +"selbst installierten zurück." + +#: internal/cli/lib/list.go:55 +msgid "Include built-in libraries (from platforms and IDE) in listing." +msgstr "" +"Eingebaute Bibliotheken (von Plattformen und IDE) in die Auflistung " +"einbeziehen." + +#: internal/cli/sketch/archive.go:51 +msgid "Includes %s directory in the archive." +msgstr "Verzeichnis %s in das Archiv einbinden" + +#: internal/cli/lib/install.go:66 +msgid "Install libraries in the IDE-Builtin directory" +msgstr "Bibliotheken in das IDE-Standardverzeichnis installieren" + +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 +msgid "Installed" +msgstr "Installiert" + +#: commands/service_library_install.go:201 +msgid "Installed %s" +msgstr "%s installiert" + +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 +msgid "Installing %s" +msgstr "%s wird installiert" + +#: commands/instances.go:396 +msgid "Installing library %s" +msgstr "Bibliothek %s wird installiert" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 +msgid "Installing platform %s" +msgstr "Plattform %s wird installiert" + +#: internal/arduino/cores/packagemanager/profiles.go:185 +msgid "Installing tool %s" +msgstr "Werkzeug %s wird installiert" + +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 +msgid "Installs one or more cores and corresponding tool dependencies." +msgstr "" +"Installiert einen oder mehrere Kerne und die entsprechenden " +"Werkzeugabhängigkeiten." + +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 +msgid "Installs one or more specified libraries into the system." +msgstr "Installiert eine oder mehrere angegebene Bibliotheken in das System." + +#: internal/arduino/builder/internal/detector/detector.go:394 +msgid "Internal error in cache" +msgstr "Interner Fehler im Cache" + +#: commands/cmderrors/cmderrors.go:377 +msgid "Invalid '%[1]s' property: %[2]s" +msgstr "Ungültige '%[1]s' Eigenschaft: %[2]s" + +#: commands/cmderrors/cmderrors.go:60 +msgid "Invalid FQBN" +msgstr "Ungültiger FQBN" + +#: internal/cli/daemon/daemon.go:168 +msgid "Invalid TCP address: port is missing" +msgstr "Ungültige TCP-Adresse: Port fehlt" + +#: commands/cmderrors/cmderrors.go:78 +msgid "Invalid URL" +msgstr "Ungültige URL" + +#: commands/instances.go:184 +msgid "Invalid additional URL: %v" +msgstr "Ungültige zusätzliche URL: %v" + +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "Ungültiges Archiv: Datei %[1]s nicht im Archiv %[2]s gefunden" + +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 +msgid "Invalid argument passed: %v" +msgstr "Ungültiges Argument übergeben: %v" + +#: commands/service_compile.go:282 +msgid "Invalid build properties" +msgstr "Ungültige Build-Eigenschaften" + +#: internal/arduino/builder/sizer.go:253 +msgid "Invalid data size regexp: %s" +msgstr "Ungültige Datengröße regexp: %s" + +#: internal/arduino/builder/sizer.go:259 +msgid "Invalid eeprom size regexp: %s" +msgstr "Ungültige EEPROM-Größe: %s" + +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "Ungültige Index-URL: %s" + +#: commands/cmderrors/cmderrors.go:46 +msgid "Invalid instance" +msgstr "Ungültige Instanz" + +#: internal/cli/core/upgrade.go:114 +msgid "Invalid item %s" +msgstr "Ungültiges Element %s" + +#: commands/cmderrors/cmderrors.go:96 +msgid "Invalid library" +msgstr "Ungültige Bibliothek" + +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "Ungültiger Protokoll-Level: %s" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "Ungültige Netzwerk-Konfiguration: %s" + +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "Ungültiger network.proxy '%[1]s':%[2]s" + +#: internal/cli/cli.go:222 +msgid "Invalid output format: %s" +msgstr "Ungültiges Ausgabeformat: %s" + +#: commands/instances.go:581 +msgid "Invalid package index in %s" +msgstr "Ungültiger Paketindex in %s" + +#: internal/cli/core/uninstall.go:63 +msgid "Invalid parameter %s: version not allowed" +msgstr "Ungültiger Parameter %s: Version nicht erlaubt" + +#: commands/service_board_identify.go:169 +msgid "Invalid pid value: '%s'" +msgstr "Ungültiger pid-Wert: '%s'" + +#: commands/cmderrors/cmderrors.go:220 +msgid "Invalid profile" +msgstr "Ungültiges Profil" + +#: commands/service_monitor.go:270 +msgid "Invalid recipe in platform.txt" +msgstr "Ungültige Vorlage in platform.txt" + +#: internal/arduino/builder/sizer.go:243 +msgid "Invalid size regexp: %s" +msgstr "Ungültige Größe regexp: %s" + +#: main.go:86 +msgid "Invalid value in configuration" +msgstr "Ungültiger Wert in der Konfiguration" + +#: commands/cmderrors/cmderrors.go:114 +msgid "Invalid version" +msgstr "Ungültige Version" + +#: commands/service_board_identify.go:166 +msgid "Invalid vid value: '%s'" +msgstr "Ungültiger vid-Wert:'%s'" + +#: internal/cli/compile/compile.go:132 +msgid "" +"Just produce the compilation database, without actually compiling. All build" +" commands are skipped except pre* hooks." +msgstr "" +"Nur die Kompilier-Datenbank erzeugen ohne zu kompilieren. Alle Build-Befehle" +" werden übersprungen außer pre* " + +#: internal/cli/lib/list.go:39 +msgid "LIBNAME" +msgstr "BIBLIOTHEKSNAME" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "LIBRARY" +msgstr "BIBLIOTHEK" + +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 +msgid "LIBRARY_NAME" +msgstr "BIBLIOTHEKSNAME" + +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 +msgid "Latest" +msgstr "Neueste" + +#: internal/arduino/builder/libraries.go:92 +msgid "Library %[1]s has been declared precompiled:" +msgstr "Bibliothek %[1]s wurde als vorkompiliert angegeben:" + +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 +msgid "" +"Library %[1]s is already installed, but with a different version: %[2]s" +msgstr "" +"Bibliothek %[1]s ist bereits installiert, aber mit einer anderen Version: " +"%[2]s" + +#: commands/service_library_upgrade.go:137 +msgid "Library %s is already at the latest version" +msgstr "Bibliothek %s ist bereits die neueste Version" + +#: commands/service_library_uninstall.go:63 +msgid "Library %s is not installed" +msgstr "Bibliothek %s ist nicht installiert" + +#: commands/instances.go:375 +msgid "Library %s not found" +msgstr "Bibliothek %s nicht gefunden" + +#: commands/cmderrors/cmderrors.go:445 +msgid "Library '%s' not found" +msgstr "Bibliothek '%s' nicht gefunden" + +#: internal/arduino/builder/internal/detector/detector.go:471 +msgid "" +"Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." +msgstr "" +"Die Bibliothek kann nicht die Verzeichnisse '%[1]s' und '%[2]s' gleichzeitig" +" verwenden. Prüfe nochmal in '%[3]s'" + +#: commands/cmderrors/cmderrors.go:574 +msgid "Library install failed" +msgstr "Installation der Bibliothek fehlgeschlagen" + +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 +msgid "Library installed" +msgstr "Bibliothek installiert" + +#: internal/cli/lib/search.go:205 +msgid "License: %s" +msgstr "Lizenz: %s" + +#: internal/arduino/builder/builder.go:437 +msgid "Linking everything together..." +msgstr "Alles zusammenlinken..." + +#: internal/cli/board/listall.go:40 +msgid "" +"List all boards that have the support platform installed. You can search\n" +"for a specific board if you specify the board name" +msgstr "" +"Lists alle Boards mit installierter Support-Plattform. Du kannst nach einem " +"bestimmten Board suchen, indem du den Namen angibst" + +#: internal/cli/board/listall.go:39 +msgid "List all known boards and their corresponding FQBN." +msgstr "Liste alle bekannte Boards und ihre respektive FQBNs auf" + +#: internal/cli/board/list.go:45 +msgid "List connected boards." +msgstr "Verbundene Platinen auflisten." + +#: internal/cli/arguments/fqbn.go:44 +msgid "" +"List of board options separated by commas. Or can be used multiple times for" +" multiple options." +msgstr "" +"Komma-getrennte Liste der Boardoptionen. Kann auch mehrfach für mehrere " +"Optinen verwendet werden." + +#: internal/cli/compile/compile.go:110 +msgid "" +"List of custom build properties separated by commas. Or can be used multiple" +" times for multiple properties." +msgstr "" +"Komma-getrennte Liste der benutzereigenen Build-Optionen. Kann auch mehrfach" +" für mehrere Optinen verwendet werden." + +#: internal/cli/lib/list.go:57 +msgid "List updatable libraries." +msgstr "Aktualisierbare Bibliotheken auflisten." + +#: internal/cli/core/list.go:45 +msgid "List updatable platforms." +msgstr "Aktualisierbare Plattformen auflisten." + +#: internal/cli/board/board.go:32 +msgid "Lists all connected boards." +msgstr "Listet alle verbundenen Platinen auf." + +#: internal/cli/outdated/outdated.go:41 +msgid "Lists cores and libraries that can be upgraded" +msgstr "Auflisten der upgradebaren Cores und Bibliotheken" + +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 +msgid "Loading index file: %v" +msgstr "Indexdatei wird geladen: %v" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 +msgid "Location" +msgstr "Ort" + +#: internal/arduino/builder/sizer.go:208 +msgid "Low memory available, stability problems may occur." +msgstr "" +"Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten." + +#: internal/cli/lib/search.go:200 +msgid "Maintainer: %s" +msgstr "Betreuer %s" + +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" +"Maximale Anzahl paralleler Compiler-Prozesse. Wenn der Wert auf 0 gesetzt " +"ist, wird die Anzahl der verfügbaren CPU-Kerne verwendet." + +#: internal/cli/arguments/discovery_timeout.go:32 +msgid "Max time to wait for port discovery, e.g.: 30s, 1m" +msgstr "Maximale Wartezeit für Portermittlung z.B. 30s, 1m" + +#: internal/cli/cli.go:170 +msgid "" +"Messages with this level and above will be logged. Valid levels are: %s" +msgstr "" +"Nachrichten mit diesem Level oder drüber werden geloggt. Mögliche Level " +"sind: %s" + +#: internal/arduino/builder/internal/detector/detector.go:466 +msgid "Missing '%[1]s' from library in %[2]s" +msgstr "'%[1]s' aus der Bibliothek in %[2]s fehlt" + +#: commands/cmderrors/cmderrors.go:169 +msgid "Missing FQBN (Fully Qualified Board Name)" +msgstr "Fehlender FQBN (Fully Qualified Board Name)" + +#: commands/cmderrors/cmderrors.go:260 +msgid "Missing port" +msgstr "Fehlender Port" + +#: commands/cmderrors/cmderrors.go:236 +msgid "Missing port address" +msgstr "Fehlende Port-Adresse" + +#: commands/cmderrors/cmderrors.go:248 +msgid "Missing port protocol" +msgstr "Fehlendes Port-Protokoll" + +#: commands/cmderrors/cmderrors.go:286 +msgid "Missing programmer" +msgstr "Fehlender Programmer" + +#: internal/cli/upload/upload.go:162 +msgid "Missing required upload field: %s" +msgstr "Fehlendes benötigtes Upload-Feld: %s" + +#: internal/arduino/builder/sizer.go:247 +msgid "Missing size regexp" +msgstr "Fehlende Größe regexp" + +#: commands/cmderrors/cmderrors.go:497 +msgid "Missing sketch path" +msgstr "Fehlender Sketch-Pfad" + +#: commands/cmderrors/cmderrors.go:358 +msgid "Monitor '%s' not found" +msgstr "Monitor '%s' wurde nicht gefunden" + +#: internal/cli/monitor/monitor.go:261 +msgid "Monitor port settings:" +msgstr "Porteinstellunegn für Monitor:" + +#: internal/arduino/builder/internal/detector/detector.go:156 +msgid "Multiple libraries were found for \"%[1]s\"" +msgstr "Mehrere Bibliotheken wurden für \"%[1]s\" gefunden" + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 +msgid "Name" +msgstr "Name" + +#: internal/cli/lib/search.go:179 +msgid "Name: \"%s\"" +msgstr "Name '%s'" + +#: internal/cli/upload/upload.go:238 +msgid "New upload port: %[1]s (%[2]s)" +msgstr "Neuer Upload-Port: %[1]s (%[2]s)" + +#: internal/cli/board/list.go:132 +msgid "No boards found." +msgstr "Keine Platinen gefunden." + +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "Kein standardmäßiger Port, FQBN oder Programmer gesetzt" + +#: internal/cli/lib/examples.go:108 +msgid "No libraries found." +msgstr "Keine Bibliotheken gefunden." + +#: internal/cli/lib/list.go:130 +msgid "No libraries installed." +msgstr "Keine Bibliotheken installiert." + +#: internal/cli/lib/search.go:168 +msgid "No libraries matching your search." +msgstr "Keine Bibliotheken stimmen mit Ihrer Suche überein." + +#: internal/cli/lib/search.go:174 +msgid "" +"No libraries matching your search.\n" +"Did you mean...\n" +msgstr "" +"Keine Bibliotheken stimmen mit Ihrer Suche überein.\n" +"Meinten Sie ...\n" + +#: internal/cli/lib/list.go:128 +msgid "No libraries update is available." +msgstr "Kein Bibliotheksupdate verfügbar" + +#: commands/cmderrors/cmderrors.go:274 +msgid "No monitor available for the port protocol %s" +msgstr "Kein Monitor für das Port-Protokoll %s verfügbar" + +#: internal/cli/outdated/outdated.go:95 +msgid "No outdated platforms or libraries found." +msgstr "Keine veralteten Plattformen oder Bibliotheken gefunden" + +#: internal/cli/core/list.go:114 +msgid "No platforms installed." +msgstr "Keine Plattformen installiert." + +#: internal/cli/core/search.go:113 +msgid "No platforms matching your search." +msgstr "Die Suche fand keine passenden Plattformen" + +#: commands/service_upload.go:534 +msgid "No upload port found, using %s as fallback" +msgstr "Kein Upload-Port gefunden, verwende %s stattdessen" + +#: commands/cmderrors/cmderrors.go:464 +msgid "No valid dependencies solution found" +msgstr "Keine gültige Auflösung der Abhängigkeiten gefunden" + +#: internal/arduino/builder/sizer.go:198 +msgid "Not enough memory; see %[1]s for tips on reducing your footprint." +msgstr "" +"Nicht genug Arbeitsspeicher; unter %[1]s finden sich Hinweise, um die Größe " +"zu verringern." + +#: internal/arduino/builder/internal/detector/detector.go:159 +msgid "Not used: %[1]s" +msgstr "Nicht benutzt: %[1]s" + +#: internal/cli/board/details.go:187 +msgid "OS:" +msgstr "BS:" + +#: internal/cli/board/details.go:145 +msgid "Official Arduino board:" +msgstr "Offizielles Arduino-Board:" + +#: internal/cli/lib/search.go:98 +msgid "" +"Omit library details far all versions except the latest (produce a more " +"compact JSON output)." +msgstr "" +"Alle Bibliotheksdetails überspringen, außer für die aktuelle Version\n" +"(Die JSON-Ausgabe wird kompakter)." + +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 +msgid "Open a communication port with a board." +msgstr "Einen Kommunikations-Port mit einer Platine öffnen." + +#: internal/cli/board/details.go:200 +msgid "Option:" +msgstr "Option:" + +#: internal/cli/compile/compile.go:120 +msgid "" +"Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." +msgstr "" +"Optional, kann %s sein. Verwendet, um den Warnungslevel für gcc festzulegen " +"(-W Option)" + +#: internal/cli/compile/compile.go:133 +msgid "Optional, cleanup the build folder and do not use any cached build." +msgstr "" +"Optional, leere den Build-Ordner und verwende keinen zwischengespeicherten " +"Build." + +#: internal/cli/compile/compile.go:130 +msgid "" +"Optional, optimize compile output for debugging, rather than for release." +msgstr "" +"Optional, optimiere das Kompilat zum Debuggen, nicht für den " +"Produktiveinsatz" + +#: internal/cli/compile/compile.go:122 +msgid "Optional, suppresses almost every output." +msgstr "Optional, vermeidet fast alle Ausgaben" + +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 +msgid "Optional, turns on verbose mode." +msgstr "Optional, schaltet umfangreiche Ausgaben ein" + +#: internal/cli/compile/compile.go:136 +msgid "" +"Optional. Path to a .json file that contains a set of replacements of the " +"sketch source code." +msgstr "" +"Optional, Pfad zu einer .json-Datei mit Ersetzungen für den Sketch-Quellcode" + +#: internal/cli/compile/compile.go:112 +msgid "" +"Override a build property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Übersteuert eine Build-Option mit einem benutzerdefinierten Wert. Kann " +"mehrfach für mehrere Optionen verwendet werden." + +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Eine Debug-Eigenschaft mit einem eigenen Wert außer Kraft setzen. Kann " +"mehrfach für mehrere Eigenschaften verwendet werden." + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Eine Hochladeeigenschaft mit einem eigenen Wert außer Kraft setzen. Kann " +"mehrfach für mehrere Eigenschaften verwendet werden." + +#: internal/cli/config/init.go:62 +msgid "Overwrite existing config file." +msgstr "Überschreibt bestehende Konfigurationsdatei." + +#: internal/cli/sketch/archive.go:52 +msgid "Overwrites an already existing archive" +msgstr "Überschreibt ein bestehendes Archiv" + +#: internal/cli/sketch/new.go:46 +msgid "Overwrites an existing .ino sketch." +msgstr "Überschreibt einen bestehenden .ino-Sketch." + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "PACKAGER" +msgstr "PAKETIERER" + +#: internal/cli/board/details.go:165 +msgid "Package URL:" +msgstr "Paket-URL:" + +#: internal/cli/board/details.go:164 +msgid "Package maintainer:" +msgstr "Paket-Betreuer" + +#: internal/cli/board/details.go:163 +msgid "Package name:" +msgstr "Paketname:" + +#: internal/cli/board/details.go:167 +msgid "Package online help:" +msgstr "Online-Hilfe für das Paket:" + +#: internal/cli/board/details.go:166 +msgid "Package website:" +msgstr "Webseite für das Paket:" + +#: internal/cli/lib/search.go:202 +msgid "Paragraph: %s" +msgstr "Absatz: %s" + +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 +msgid "Path" +msgstr "Pfad" + +#: internal/cli/compile/compile.go:129 +msgid "" +"Path to a collection of libraries. Can be used multiple times or entries can" +" be comma separated." +msgstr "" +"Pfad zu einer Bibliothekssammlung. Kann mehrfach verwendet werden oder die " +"Einträge können durch Kommata getrennt werden." + +#: internal/cli/compile/compile.go:127 +msgid "" +"Path to a single library’s root folder. Can be used multiple times or " +"entries can be comma separated." +msgstr "" +"Pfad zum Wurzelverzeichnis einer einzelnen Bibliothek. Kann mehrfach " +"verwendet werden oder die Einträge können durch Kommata getrennt werden." + +#: internal/cli/cli.go:172 +msgid "Path to the file where logs will be written." +msgstr "Pfad in welchem die Log-Dateien abgelegt werden sollen." + +#: internal/cli/compile/compile.go:108 +msgid "" +"Path where to save compiled files. If omitted, a directory will be created " +"in the default temporary path of your OS." +msgstr "" +"Pfad für die kompilierten Dateien. Wenn nicht festgelegt, dann wird ein " +"Verzeichnis im Standard-Temp-Verzeichnis des Betriebssystems erstellt." + +#: commands/service_upload.go:515 +msgid "Performing 1200-bps touch reset on serial port %s" +msgstr "Ein 1200bps-Reset wird auf dem seriellen Port %s durchgeführt" + +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 +msgid "Platform %s already installed" +msgstr "Plattform %s bereits installiert" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 +msgid "Platform %s installed" +msgstr "Plattform %s installiert" + +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 +msgid "" +"Platform %s is not found in any known index\n" +"Maybe you need to add a 3rd party URL?" +msgstr "" +"Plattform %s in keinem bekannten Index gefunden. Eventuell muss eine 3rd-" +"Party URL hinzugfügt werden?" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 +msgid "Platform %s uninstalled" +msgstr "Plattform %s deinstalliert" + +#: commands/cmderrors/cmderrors.go:482 +msgid "Platform '%s' is already at the latest version" +msgstr "Plattform '%s' ist bereits aktuell" + +#: commands/cmderrors/cmderrors.go:406 +msgid "Platform '%s' not found" +msgstr "Plattform '%s' nicht gefunden" + +#: internal/cli/board/search.go:85 +msgid "Platform ID" +msgstr "Plattform ID" + +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 +msgid "Platform ID is not correct" +msgstr "Plattform ID ist nicht korrekt" + +#: internal/cli/board/details.go:173 +msgid "Platform URL:" +msgstr "Plattform-URL:" + +#: internal/cli/board/details.go:172 +msgid "Platform architecture:" +msgstr "Plattformarchitektur:" + +#: internal/cli/board/details.go:171 +msgid "Platform category:" +msgstr "Plattformkategorie:" + +#: internal/cli/board/details.go:178 +msgid "Platform checksum:" +msgstr "Plattform-Prüfsumme:" + +#: internal/cli/board/details.go:174 +msgid "Platform file name:" +msgstr "Plattformdateiname:" + +#: internal/cli/board/details.go:170 +msgid "Platform name:" +msgstr "Plattformname:" + +#: internal/cli/board/details.go:176 +msgid "Platform size (bytes):" +msgstr "Plattformgröße (Bytes):" + +#: commands/cmderrors/cmderrors.go:153 +msgid "" +"Please specify an FQBN. Multiple possible boards detected on port %[1]s with" +" protocol %[2]s" +msgstr "" +"Bitte gib ein FQBN an. Mehrere mögliche Boards wurden an Port %[1]s mit " +"Protokoll %[2]s entdeckt" + +#: commands/cmderrors/cmderrors.go:133 +msgid "" +"Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" +" identified" +msgstr "" +"Bitte gib ein FQBN an. Das Board an Port %[1]s mit Protokoll %[2]s kann " +"nicht identifiziert werden" + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Port" +msgstr "Port" + +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 +msgid "Port closed: %v" +msgstr "Port geschlossen: %v" + +#: commands/cmderrors/cmderrors.go:668 +msgid "Port monitor error" +msgstr "Port-Monitor-Fehler" + +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 +msgid "Precompiled library in \"%[1]s\" not found" +msgstr "Vorkompilierte Bibliothek in \"%[1]s\" nicht gefunden" + +#: internal/cli/board/details.go:42 +msgid "Print details about a board." +msgstr "Details zu dem Board ausgeben" + +#: internal/cli/compile/compile.go:103 +msgid "Print preprocessed code to stdout instead of compiling." +msgstr "Gebe den vorverarbeiteten Code aus anstatt zu kompilieren." + +#: internal/cli/cli.go:166 internal/cli/cli.go:168 +msgid "Print the logs on the standard output." +msgstr "Gebe die logs auf der Standardausgabe aus." + +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "Ausgabe im JSON-Format schreiben" + +#: internal/cli/config/dump.go:31 +msgid "Prints the current configuration" +msgstr "Gibt die aktuelle Konfiguration aus." + +#: internal/cli/config/dump.go:32 +msgid "Prints the current configuration." +msgstr "Gibt die aktuelle Konfiguration aus." + +#: commands/cmderrors/cmderrors.go:202 +msgid "Profile '%s' not found" +msgstr "Profil '%s' nicht gefunden" + +#: commands/cmderrors/cmderrors.go:339 +msgid "Programmer '%s' not found" +msgstr "Programmer '%s' nicht gefunden" + +#: internal/cli/board/details.go:111 +msgid "Programmer name" +msgstr "Programmer Name" + +#: internal/cli/arguments/programmer.go:35 +msgid "Programmer to use, e.g: atmel_ice" +msgstr "Zu verwendender Programmer, z.B. atmel_ice" + +#: internal/cli/board/details.go:216 +msgid "Programmers:" +msgstr "Programmers:" + +#: commands/cmderrors/cmderrors.go:391 +msgid "Property '%s' is undefined" +msgstr "Eigenschaft '%s' ist nicht definiert" + +#: internal/cli/board/list.go:142 +msgid "Protocol" +msgstr "Protokoll" + +#: internal/cli/lib/search.go:212 +msgid "Provides includes: %s" +msgstr "Stellt die Includes %s zur Verfügung" + +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 +msgid "Removes one or more values from a setting." +msgstr "Entfernt einen oder mehrere Werte aus der Einstellung." + +#: commands/service_library_install.go:188 +msgid "Replacing %[1]s with %[2]s" +msgstr "Ersetze %[1]s durch %[2]s " + +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 +msgid "Replacing platform %[1]s with %[2]s" +msgstr "Ersetze die Plattform durch %[1]sdurch %[2]s" + +#: internal/cli/board/details.go:184 +msgid "Required tool:" +msgstr "Erforderliches Werkzeug:" + +#: internal/cli/monitor/monitor.go:79 +msgid "Run in silent mode, show only monitor input and output." +msgstr "Starten im stillen Modus, zeige nur die Monitorein- und -ausgaben" + +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "Arduino-CLI als gRPC-Daemon ausführen" + +#: internal/arduino/builder/core.go:43 +msgid "Running normal build of the core..." +msgstr "Starte normalen Kern-Build..." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 +msgid "Running pre_uninstall script." +msgstr "Starte das pre_uninstall Skript" + +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "SUCH_TERM" + +#: internal/cli/debug/debug.go:238 +msgid "SVD file path" +msgstr "SVD Verzeichnis" + +#: internal/cli/compile/compile.go:106 +msgid "Save build artifacts in this directory." +msgstr "Build-Artifakte in diesem Verzeichnis speichern." + +#: internal/cli/board/search.go:39 +msgid "Search for a board in the Boards Manager using the specified keywords." +msgstr "" +"Suche nach einem Board im Board-Manager mit den gegebenen Suchbegriffen." + +#: internal/cli/board/search.go:38 +msgid "Search for a board in the Boards Manager." +msgstr "Suche nach einem Board im Board-Manager" + +#: internal/cli/core/search.go:41 +msgid "Search for a core in Boards Manager using the specified keywords." +msgstr "" +"Suche nach einem Kern im Board-Manager mit den gegebenen Suchbegriffen." + +#: internal/cli/core/search.go:40 +msgid "Search for a core in Boards Manager." +msgstr "Suche nach einem Kern im Board-Manager" + +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"Suche nach Bibliotheken, die keinem oder mehr Suchbegriffen entsprechen.\n" +"\n" +"Bei allen Suchvorgängen wird die Groß-/Kleinschreibung nicht beachtet. Bei mehreren Suchbegriffen werden nur Bibliotheken zurückgegeben, die mit allen Begriffen übereinstimmen.\n" +"\n" +"Suchbegriffe, die nicht mit der unten beschriebenen QV-Syntax übereinstimmen, sind einfache Suchanfragen\n" +"Begriffe und sucht nach Bibliotheken, die den Begriff an einer beliebigen Stelle in folgenden Feldern enthalten:\n" +"- Autor\n" +"- Name\n" +"- Absatz\n" +"- stellt zur Verfügung\n" +"- Satz\n" +"\n" +"Eine spezielle Syntax namens Qualifier-Value (QV) gibt an, dass ein Suchbegriff nur mit einem Feld jedes Bibliotheksindexeintrags verglichen werden soll. Die Syntax verwendet den Namen eines Indexfelds (ohne Berücksichtigung der Groß-/Kleinschreibung), ein Gleichheitszeichen (=)\n" +"oder ein Doppelpunkt (:) und ein Wert, z.B. 'name=ArduinoJson' oder 'provides:tinyusb.h'.\n" +"\n" +"QV-Suchbegriffe, die ein Doppelpunkttrennzeichen verwenden, finden alle Bibliotheken mit dem Wert an einer beliebigen Stelle im benannten Feld und QV-Suchbegriffe, die ein Gleichheitszeichen verwenden finden nur die Bibliotheken, die genau den angegebenen Wert im benannten Feld haben.\n" +"QV-Suchbegriffe können eingebettete Leerzeichen mit doppelten Anführungszeichen (\") um den Wert oder den gesamten Ausdruck enthalten, z.B. 'category=\"Data Processing\"' und '\"category=Data Processing“' sind gleichwertig. Ein QV-Begriff kann ein doppelte Anführungszeichen enthalten, indem ein Backslash (\\) vorangestellt wird.\n" +"\n" +"HINWEIS: QV-Suchbegriffe mit doppelten Anführungszeichen oder Backslash-Zeichen die als Befehlszeilenargumente übergeben werden, erfordern möglicherweise Anführungszeichen oder Escapezeichen, um zu verhindern dass die Shell diese Zeichen interpretiert.\n" +"\n" +"Zusätzlich zu den oben aufgeführten Feldern können QV-Begriffe die folgenden Merkmale verwenden:\n" +"- Architekturen\n" +"- Kategorie\n" +"- Abhängigkeiten\n" +"- Lizenz\n" +"- Betreuer\n" +"- Typen\n" +"- Ausführung\n" +"- Webseite" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "" +"Sucht nach einer oder mehrerer Bibliottheken die zu einer Suchanfrage " +"passen." + +#: internal/cli/lib/search.go:201 +msgid "Sentence: %s" +msgstr "Satz: %s" + +#: internal/cli/debug/debug.go:246 +msgid "Server path" +msgstr "Server-Pfad" + +#: internal/arduino/httpclient/httpclient.go:61 +msgid "Server responded with: %s" +msgstr "Server hat mit: %s geantwortet" + +#: internal/cli/debug/debug.go:245 +msgid "Server type" +msgstr "Server-Typ" + +#: internal/cli/upload/upload.go:83 +msgid "Set a value for a field required to upload." +msgstr "Setze einen Wert für ein zum Upload benötigtes Feld." + +#: internal/cli/monitor/monitor.go:76 +msgid "Set terminal in raw mode (unbuffered)." +msgstr "Aktiviere den Raw-Modus im Terminal (ungepuffert)" + +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 +msgid "Sets a setting value." +msgstr "Legt einen Einstellungswert fest." + +#: internal/cli/cli.go:189 +msgid "" +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." +msgstr "" +"Legt das Standard-Datenverzeichnis fest (Arduino CLI sucht die " +"Konfigurationsdatei in diesem Verzeichnis)." + +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" +"Standardwerte für Port und FQBN festlegen. Wenn kein Port, FQBN oder " +"Programmer angegeben sind, werden der aktuelle Standardport, FQBN und " +"Programmer angezeigt." + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" +"Legt die maximale Nachrichtengröße in Bytes fest, die der Daemon empfangen " +"kann" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 +msgid "Sets where to save the configuration file." +msgstr "Legt fest, wo die Konfigurationsdatei gespeichert werden soll." + +#: internal/cli/monitor/monitor.go:331 +msgid "Setting" +msgstr "Einstellung" + +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" +"Eine Hilfemeldung sollte angezeigt werden, ist aber nur im TEXT-Modus " +"verfügbar." + +#: internal/cli/core/search.go:48 +msgid "Show all available core versions." +msgstr "Zeige alle verfügbare Core-Versionen." + +#: internal/cli/monitor/monitor.go:77 +msgid "Show all the settings of the communication port." +msgstr "Zeige alle Einstellungen des Kommunikations-Ports." + +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 +msgid "Show also boards marked as 'hidden' in the platform" +msgstr "" +"Zeige auch Boards an, die in der Plattform als \"versteckt\" markiert sind" + +#: internal/cli/arguments/show_properties.go:60 +msgid "" +"Show build properties. The properties are expanded, use \"--show-" +"properties=unexpanded\" if you want them exactly as they are defined." +msgstr "" +"Build-Eigenschaften anzeigen. Die Eigenschaften werden erweitert. Verwende " +"\"--show-properties=unexpanded\", wenn du sie genau so haben willst, wie sie" +" definiert sind." + +#: internal/cli/board/details.go:52 +msgid "Show full board details" +msgstr "Vollständige Platinendetails anzeigen" + +#: internal/cli/board/details.go:43 +msgid "" +"Show information about a board, in particular if the board has options to be" +" specified in the FQBN." +msgstr "" +"Zeige Informationen über ein Board, im Besonderen wenn das Board die Option " +"hat, im FQBN angegeben zu werden." + +#: internal/cli/lib/search.go:97 +msgid "Show library names only." +msgstr "Nur Namen der Bibliotheken anzeigen." + +#: internal/cli/board/details.go:53 +msgid "Show list of available programmers" +msgstr "Zeige alle verfügbare Programmer" + +#: internal/cli/debug/debug.go:73 +msgid "" +"Show metadata about the debug session instead of starting the debugger." +msgstr "" +"Zeige Metadaten über die Debug-Sitzung an, anstatt den Debugger zu starten." + +#: internal/cli/update/update.go:45 +msgid "Show outdated cores and libraries after index update" +msgstr "Veraltete Kerne und Bibliotheken nach Indexaktualisierung anzeigen" + +#: internal/cli/lib/list.go:40 +msgid "Shows a list of installed libraries." +msgstr "Zeige die Liste mit den installierten Bibliotheken." + +#: internal/cli/lib/list.go:41 +msgid "" +"Shows a list of installed libraries.\n" +"\n" +"If the LIBNAME parameter is specified the listing is limited to that specific\n" +"library. By default the libraries provided as built-in by platforms/core are\n" +"not listed, they can be listed by adding the --all flag." +msgstr "" +"Zeigt eine Liste der installierten Bibliotheken an.\n" +"\n" +"Wenn der Parameter LIBNAME angegeben wird, beschränkt sich die Liste auf diese bestimmte Bibliothek. Standardmäßig werden die Bibliotheken, die von platforms/core bereitgestellt werden, nicht aufgelistet; sie können mit dem Flag --all aufgelistet werden." + +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 +msgid "Shows the list of installed platforms." +msgstr "Zeigt die Liste der installierten Plattformen an." + +#: internal/cli/lib/examples.go:44 +msgid "Shows the list of the examples for libraries." +msgstr "Zeigt die Liste der Beispiele für Bibliotheken an." + +#: internal/cli/lib/examples.go:45 +msgid "" +"Shows the list of the examples for libraries. A name may be given as " +"argument to search a specific library." +msgstr "" +"Zeigt die Liste der Beispiele für Bibliotheken an. Um eine bestimmte " +"Bibliothek zu suchen, kann ein Name als Argument angegeben werden." + +#: internal/cli/version/version.go:37 +msgid "" +"Shows the version number of Arduino CLI which is installed on your system." +msgstr "" +"Zeigt die Versionsnummer des Arduino CLI an, welchese auf deinem System " +"installiert ist." + +#: internal/cli/version/version.go:36 +msgid "Shows version number of Arduino CLI." +msgstr "Zeigt die Versionsnummer des Arduino CLI an." + +#: internal/cli/board/details.go:189 +msgid "Size (bytes):" +msgstr "Größe (Bytes):" + +#: commands/service_compile.go:286 +msgid "" +"Sketch cannot be located in build path. Please specify a different build " +"path" +msgstr "" +"Sketch kann nicht im Build-Pfad gefunden werden. Bitte gib einen anderen " +"Build-Pfad an" + +#: internal/cli/sketch/new.go:98 +msgid "Sketch created in: %s" +msgstr "Sketch erstellt in: %s" + +#: internal/cli/arguments/profiles.go:33 +msgid "Sketch profile to use" +msgstr "Zu verwendendes Sketch-Profil" + +#: internal/arduino/builder/sizer.go:193 +msgid "Sketch too big; see %[1]s for tips on reducing it." +msgstr "" +"Der Sketch ist zu groß; unter %[1]s finden sich Hinweise, um die Größe zu " +"verringern." + +#: internal/arduino/builder/sizer.go:160 +msgid "" +"Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" +" bytes." +msgstr "" +"Der Sketch verwendet %[1]s Bytes (%[3]s%%) des Programmspeicherplatzes. Das " +"Maximum sind %[2]s Bytes." + +#: internal/cli/feedback/warn_deprecated.go:39 +msgid "" +"Sketches with .pde extension are deprecated, please rename the following " +"files to .ino:" +msgstr "" +"Skizzen mit der Endung .pde sind veraltet, bitte benenne die folgenden " +"Dateien in .ino um:" + +#: internal/arduino/builder/linker.go:31 +msgid "Skip linking of final executable." +msgstr "Überspringe das Linken der endgültigen ausführbaren Datei." + +#: commands/service_upload.go:508 +msgid "Skipping 1200-bps touch reset: no serial port selected!" +msgstr "" +"Überspringen des 1200-bps-Touch-Resets: keine serielle Schnittstelle " +"ausgewählt!" + +#: internal/arduino/builder/archive_compiled_files.go:28 +msgid "Skipping archive creation of: %[1]s" +msgstr "Überspringe die Archiv-Erstellung von: %[1]s" + +#: internal/arduino/builder/compilation.go:184 +msgid "Skipping compile of: %[1]s" +msgstr "Überspringe die Kompilierung von: %[1]s" + +#: internal/arduino/builder/internal/detector/detector.go:414 +msgid "Skipping dependencies detection for precompiled library %[1]s" +msgstr "" +"Überspringe die Abhängigkeitserkennung für vorkompilierte Bibliotheken %[1]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 +msgid "Skipping platform configuration." +msgstr "Überspringe die Plattformkonfiguration." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 +msgid "Skipping pre_uninstall script." +msgstr "Überspringe das pre_uninstall Skript." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 +msgid "Skipping tool configuration." +msgstr "Überspringe die Werkzeugkonfiguration." + +#: internal/arduino/builder/recipe.go:48 +msgid "Skipping: %[1]s" +msgstr "Wird übersprungen: %[1]s" + +#: commands/instances.go:634 +msgid "Some indexes could not be updated." +msgstr "Einige Indizes konnten nicht aktualisiert werden." + +#: internal/cli/core/upgrade.go:141 +msgid "Some upgrades failed, please check the output for details." +msgstr "" +"Einige Upgrades sind fehlgeschlagen, bitte überprüfe die Ausgabe für " +"Details." + +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" +msgstr "TCP-Port, der vom Daemon überwacht wird" + +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" +"Das Ausgabeformat für Befehle kann sein:\n" +"%s " + +#: internal/cli/cli.go:187 +msgid "The custom config file (if not specified the default will be used)." +msgstr "" +"Die benutzerdefinierte Konfigurationsdatei (wenn nicht angegeben, wird der " +"Standardwert verwendet)." + +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" +"Das Flag --build-cache-path ist veraltet. Bitte nur --build-path allein " +"verwenden oder den Build-Cache-Pfad in den Arduino CLI-Einstellungen " +"konfigurieren." + +#: internal/cli/daemon/daemon.go:103 +msgid "The flag --debug-file must be used with --debug." +msgstr "Das Flag --debug-file muss mit --debug benutzt werden." + +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" +"Die angegebene Board-/Programmer-Konfiguration unterstützt kein Debugging." + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" +"Die angegebene Board-/Programmer-Konfiguration unterstützt das Debugging." + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "Die Instanz ist nicht mehr gültig und muss neu initialisiert werden." + +#: internal/cli/config/add.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't add to it.\n" +"Maybe use '%[2]s'?" +msgstr "" +"Der Schlüssel \"%[1]v\" ist keine Liste von Teilen, er kann nicht hinzugefügt werden.\n" +"Vielleicht kann \"%[2]s\" verwendet werden?" + +#: internal/cli/config/remove.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't remove from it.\n" +"Maybe use '%[2]s'?" +msgstr "" +"Der Schlüssel \"%[1]v\" ist keine Liste von Teilen, er kann nicht entfernt werden.\n" +"Vielleicht kann \"%[2]s\" verwendet werden?" + +#: commands/cmderrors/cmderrors.go:858 +msgid "The library %s has multiple installations:" +msgstr "Die Bibliothek %s hat mehrere Installationen:" + +#: internal/cli/compile/compile.go:118 +msgid "" +"The name of the custom encryption key to use to encrypt a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" +"Der Name des benutzerdefinierten Schlüssels, der zur Verschlüsselung einer " +"Binärdatei während des Kompilierungsprozesses verwendet wird. Wird nur von " +"den Plattformen verwendet, die ihn unterstützen." + +#: internal/cli/compile/compile.go:116 +msgid "" +"The name of the custom signing key to use to sign a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" +"Der Name des benutzerdefinierten Schlüssels, der zum Signieren einer " +"Binärdatei während des Kompilierungsprozesses verwendet wird. Wird nur von " +"den Plattformen verwendet, die ihn unterstützen." + +#: internal/cli/cli.go:174 +msgid "The output format for the logs, can be: %s" +msgstr "Das Ausgabeformat für die Logs kann %s sein" + +#: internal/cli/compile/compile.go:114 +msgid "" +"The path of the dir to search for the custom keys to sign and encrypt a " +"binary. Used only by the platforms that support it." +msgstr "" +"Das Verzeichnis, in dem nach den benutzerdefinierten Schlüsseln zum " +"Signieren und Verschlüsseln einer Binärdatei gesucht wird. Wird nur von den " +"Plattformen verwendet, die dies unterstützen." + +#: internal/arduino/builder/libraries.go:152 +msgid "The platform does not support '%[1]s' for precompiled libraries." +msgstr "" +"Die Plattform unterstützt '%[1]s' für vorkompilierte Bibliotheken nicht." + +#: internal/cli/lib/upgrade.go:36 +msgid "" +"This command upgrades an installed library to the latest available version. " +"Multiple libraries can be passed separated by a space. If no arguments are " +"provided, the command will upgrade all the installed libraries where an " +"update is available." +msgstr "" +"Dieser Befehl aktualisiert eine installierte Bibliothek auf die neueste " +"verfügbare Version. Es können mehrere Bibliotheken durch ein Leerzeichen " +"getrennt übergeben werden. Wenn keine Argumente angegeben werden, " +"aktualisiert der Befehl alle installierten Bibliotheken, für die ein Update " +"verfügbar ist." + +#: internal/cli/outdated/outdated.go:42 +msgid "" +"This commands shows a list of installed cores and/or libraries\n" +"that can be upgraded. If nothing needs to be updated the output is empty." +msgstr "" +"Dieser Befehl zeigt eine Liste der installierten Kerne und/oder Bibliotheken\n" +"die aktualisiert werden können. Wenn nichts aktualisiert werden muss, ist die Ausgabe leer." + +#: internal/cli/monitor/monitor.go:80 +msgid "Timestamp each incoming line." +msgstr "Markiere jede ankommende Zeile mit einem Zeitstempel." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 +msgid "Tool %s already installed" +msgstr "Werkzeug %s bereits installiert" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 +msgid "Tool %s uninstalled" +msgstr "Werkzeug %s deinstalliert" + +#: commands/service_debug.go:277 +msgid "Toolchain '%s' is not supported" +msgstr "Toolchain '%s' wird nicht unterstützt" + +#: internal/cli/debug/debug.go:235 +msgid "Toolchain path" +msgstr "Toolchain-Pfad" + +#: internal/cli/debug/debug.go:236 +msgid "Toolchain prefix" +msgstr "Toolchain-Prefix" + +#: internal/cli/debug/debug.go:234 +msgid "Toolchain type" +msgstr "Toolchain-Typ" + +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 +msgid "Try running %s" +msgstr "Versuche %s zu starten" + +#: internal/cli/burnbootloader/burnbootloader.go:63 +msgid "Turns on verbose mode." +msgstr "Schaltet den ausführlichen Modus ein." + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Type" +msgstr "Typ" + +#: internal/cli/lib/search.go:209 +msgid "Types: %s" +msgstr "Typen: %s" + +#: internal/cli/board/details.go:191 +msgid "URL:" +msgstr "URL:" + +#: internal/arduino/builder/core.go:166 +msgid "" +"Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" +msgstr "" +"Der Kern kann nicht gecached werden. Bitte sag den %[1]s Maintainern, dass " +"sie %[2]sfolgen sollen. " + +#: internal/cli/configuration/configuration.go:95 +msgid "Unable to get Documents Folder: %v" +msgstr "Der Dokumentenordner kann nicht abgerufen werden: %v" + +#: internal/cli/configuration/configuration.go:70 +msgid "Unable to get Local App Data Folder: %v" +msgstr "Lokaler App-Datenordner kann nicht abgerufen werden: %v" + +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 +msgid "Unable to get user home dir: %v" +msgstr "Das Home-Verzeichnis des Benutzers kann nicht abgerufen werden: %v" + +#: internal/cli/cli.go:252 +msgid "Unable to open file for logging: %s" +msgstr "Die Datei kann nicht für die Protokollierung geöffnet werden: %s" + +#: commands/instances.go:563 +msgid "Unable to parse URL" +msgstr "URL kann nicht geparst werden" + +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 +msgid "Uninstalling %s" +msgstr "%s wird deinstalliert" + +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 +msgid "Uninstalling %s, tool is no more required" +msgstr "%s wird deinstalliert, das Werkzeug wird nicht mehr gebraucht" + +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 +msgid "" +"Uninstalls one or more cores and corresponding tool dependencies if no " +"longer used." +msgstr "" +"Deinstalliert einen oder mehrere Kerne und die entsprechenden Tool-" +"Abhängigkeiten, wenn sie nicht mehr verwendet werden." + +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 +msgid "Uninstalls one or more libraries." +msgstr "Deinstalliert eine oder mehrere Bibliotheken." + +#: internal/cli/board/list.go:174 +msgid "Unknown" +msgstr "Unbekannt" + +#: commands/cmderrors/cmderrors.go:183 +msgid "Unknown FQBN" +msgstr "Unbekannter FQBN" + +#: internal/cli/update/update.go:37 +msgid "Updates the index of cores and libraries" +msgstr "Aktualisiert den Index der Kerne und Bibliotheken" + +#: internal/cli/update/update.go:38 +msgid "Updates the index of cores and libraries to the latest versions." +msgstr "" +"Aktualisiert den Index der Kerne und Bibliotheken auf die neuesten " +"Versionen." + +#: internal/cli/core/update_index.go:36 +msgid "Updates the index of cores to the latest version." +msgstr "Aktualisiert den Index der Kerne auf die neueste Version." + +#: internal/cli/core/update_index.go:35 +msgid "Updates the index of cores." +msgstr "Aktualisiert den Index der Kerne." + +#: internal/cli/lib/update_index.go:36 +msgid "Updates the libraries index to the latest version." +msgstr "Aktualisiert den Bibliotheksindex auf die neueste Version." + +#: internal/cli/lib/update_index.go:35 +msgid "Updates the libraries index." +msgstr "Aktualisiert den Bibliotheksindex." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 +msgid "Upgrade doesn't accept parameters with version" +msgstr "Upgrade akzeptiert keine Parameter mit Version" + +#: internal/cli/upgrade/upgrade.go:38 +msgid "Upgrades installed cores and libraries to latest version." +msgstr "" +"Aktualisiert die installierten Kerne und Bibliotheken auf die neueste " +"Version." + +#: internal/cli/upgrade/upgrade.go:37 +msgid "Upgrades installed cores and libraries." +msgstr "Aktualisiert die installierten Kerne und Bibliotheken." + +#: internal/cli/lib/upgrade.go:35 +msgid "Upgrades installed libraries." +msgstr "Aktualisiert die installierten Bibliotheken." + +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 +msgid "Upgrades one or all installed platforms to the latest version." +msgstr "" +"Aktualisiert eine oder alle installierten Plattformen auf die neueste " +"Version." + +#: internal/cli/upload/upload.go:56 +msgid "Upload Arduino sketches." +msgstr "Lade Arduino-Sketche hoch." + +#: internal/cli/upload/upload.go:57 +msgid "" +"Upload Arduino sketches. This does NOT compile the sketch prior to upload." +msgstr "" +"Arduino-Sketche hochladen. Dabei wird der Sketch vor dem Hochladen NICHT " +"kompiliert." + +#: internal/cli/arguments/port.go:44 +msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" +msgstr "Adresse des Upload-Ports, z. B.: COM3 oder /dev/ttyACM2" + +#: commands/service_upload.go:532 +msgid "Upload port found on %s" +msgstr "Upload-Port gefunden auf %s" + +#: internal/cli/arguments/port.go:48 +msgid "Upload port protocol, e.g: serial" +msgstr "Upload-Port-Protokoll, z.B.: seriell" + +#: internal/cli/compile/compile.go:123 +msgid "Upload the binary after the compilation." +msgstr "Lade die Binärdatei nach der Kompilierung hoch." + +#: internal/cli/burnbootloader/burnbootloader.go:49 +msgid "Upload the bootloader on the board using an external programmer." +msgstr "" +"Lade den Bootloader mit einem externen Programmiergerät auf das Board hoch." + +#: internal/cli/burnbootloader/burnbootloader.go:48 +msgid "Upload the bootloader." +msgstr "Lade den Bootloader hoch." + +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 +msgid "" +"Uploading to specified board using %s protocol requires the following info:" +msgstr "" +"Für das Hochladen auf das angegebene Board mit dem Protokoll %s sind " +"folgende Informationen erforderlich:" + +#: internal/cli/config/init.go:160 +msgid "" +"Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" +"%s" +msgstr "" +"Urls dürfen keine Kommas enthalten. Trenne mehrere Urls, die als Umgebungsvariable exportiert werden, durch ein Leerzeichen:\n" +"%s" + +#: internal/cli/usage.go:22 +msgid "Usage:" +msgstr "Verwendung:" + +#: internal/cli/usage.go:29 +msgid "Use %s for more information about a command." +msgstr "Benutze %s für mehr Informationen über einen Befehl." + +#: internal/cli/compile/compile.go:471 +msgid "Used library" +msgstr "Benutzte Bibliothek" + +#: internal/cli/compile/compile.go:486 +msgid "Used platform" +msgstr "Verwendete Plattform" + +#: internal/arduino/builder/internal/detector/detector.go:157 +msgid "Used: %[1]s" +msgstr "Benutzt: %[1]s" + +#: commands/service_compile.go:361 +msgid "Using board '%[1]s' from platform in folder: %[2]s" +msgstr "Verwende das Board '%[1]s' von der Plattform im Ordner: %[2]s" + +#: internal/arduino/builder/internal/detector/detector.go:351 +msgid "Using cached library dependencies for file: %[1]s" +msgstr "" +"Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die " +"Datei: %[1]s" + +#: commands/service_compile.go:362 +msgid "Using core '%[1]s' from platform in folder: %[2]s" +msgstr "Verwendung des Kerns '%[1]s' von Platform im Ordner: %[2]s" + +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" +"Standardmäßige Monitorkonfiguration für das Board verwenden:\n" +"%s" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" +"Die Monitorkonfiguration ist unspezifisch.\n" +"HINWEIS: Dein Board erfordert möglicherweise andere Einstellungen!\n" + +#: internal/arduino/builder/libraries.go:313 +msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" +msgstr "" +"Bibliothek %[1]s in Version %[2]s im Ordner: %[3]s %[4]s wird verwendet" + +#: internal/arduino/builder/libraries.go:307 +msgid "Using library %[1]s in folder: %[2]s %[3]s" +msgstr "Bibliothek %[1]s im Ordner: %[2]s %[3]s wird verwendet" + +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 +msgid "Using precompiled core: %[1]s" +msgstr "Verwendung des vorkompilierten Kerns: %[1]s" + +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 +msgid "Using precompiled library in %[1]s" +msgstr "Benutze vorkompilierte Bibliothek in %[1]s" + +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 +msgid "Using previously compiled file: %[1]s" +msgstr "Zuvor kompilierte Datei wird verwendet: %[1]s" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +msgid "VERSION" +msgstr "VERSION" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "VERSION_NUMBER" +msgstr "VERSION_NUMMER" + +#: internal/cli/monitor/monitor.go:331 +msgid "Values" +msgstr "Werte" + +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 +msgid "Verify uploaded binary after the upload." +msgstr "Überprüfe die hochgeladene Binärdatei nach dem Upload." + +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 +msgid "Version" +msgstr "Version" + +#: internal/cli/lib/search.go:210 +msgid "Versions: %s" +msgstr "Versionen: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 +msgid "WARNING cannot configure platform: %s" +msgstr "WARNUNG, die Plattform %s kann nicht konfiguriert werden " + +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 +msgid "WARNING cannot configure tool: %s" +msgstr "WARNUNG, das Tool %s kann nicht konfiguriert werden " + +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 +msgid "WARNING cannot run pre_uninstall script: %s" +msgstr "WARNUNG, kann das pre_uninstall Skript %s nicht ausführen: " + +#: internal/cli/compile/compile.go:339 +msgid "WARNING: The sketch is compiled using one or more custom libraries." +msgstr "" +"WARNUNG: Der Sketch wurde mit einer oder mehreren benutzerdefinierten " +"Bibliotheken kompiliert." + +#: internal/arduino/builder/libraries.go:284 +msgid "" +"WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " +"incompatible with your current board which runs on %[3]s architecture(s)." +msgstr "" +"WARNUNG: Bibliothek %[1]s behauptet auf %[2]s Architektur(en) ausgeführt " +"werden zu können und ist möglicherweise inkompatibel mit Ihrer derzeitigen " +"Platine, welche auf %[3]s Architektur(en) ausgeführt wird." + +#: commands/service_upload.go:521 +msgid "Waiting for upload port..." +msgstr "Warten auf Upload-Port ..." + +#: commands/service_compile.go:367 +msgid "" +"Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" +msgstr "" +"Warnung: Board %[1]s definiert keine %[2]s Präferenz. Automatisch gesetzt " +"auf: %[3]s" + +#: internal/cli/lib/search.go:203 +msgid "Website: %s" +msgstr "Webseite: %s" + +#: internal/cli/config/init.go:45 +msgid "Writes current configuration to a configuration file." +msgstr "Schreibt die aktuelle Konfiguration in eine Konfigurationsdatei." + +#: internal/cli/config/init.go:48 +msgid "" +"Writes current configuration to the configuration file in the data " +"directory." +msgstr "" +"Schreibt die aktuelle Konfiguration in die Konfigurationsdatei im " +"Datenverzeichnis." + +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 +msgid "You cannot use the %s flag while compiling with a profile." +msgstr "" +"Du kannst das %s Flag nicht verwenden, wenn du mit einem Profil kompilierst." + +#: internal/arduino/resources/checksums.go:79 +msgid "archive hash differs from hash in index" +msgstr "Archiv-Hash unterscheidet sich von Hash im Index" + +#: internal/arduino/libraries/librariesmanager/install.go:187 +msgid "archive is not valid: multiple files found in zip file top level" +msgstr "" +"Archiv ist nicht gültig: mehrere Dateien in der obersten Ebene der Zip-Datei" +" gefunden" + +#: internal/arduino/libraries/librariesmanager/install.go:190 +msgid "archive is not valid: no files found in zip file top level" +msgstr "" +"Archiv ist nicht gültig: keine Dateien in der obersten Ebene der Zip-Datei " +"gefunden" + +#: internal/cli/sketch/archive.go:36 +msgid "archivePath" +msgstr "Archiv-Pfad" + +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 +msgid "arduino-preprocessor pattern is missing" +msgstr "Arduino-Preprocessor Muster fehlt" + +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" +msgstr "Nur im Textformat verfügbar" + +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "Einfache Suche nach \"Audio\"" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" +"Einfache Suche nach \"esp32\" und \"display\" beschränkt auf offizielle " +"Betreuer" + +#: commands/service_upload.go:792 +msgid "binary file not found in %s" +msgstr "Binärdatei wurde nicht in %s gefunden " + +#: internal/arduino/cores/packagemanager/package_manager.go:316 +msgid "board %s not found" +msgstr "Platine %s nicht gefunden" + +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 +msgid "boardname" +msgstr "Platinenname" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 +msgid "built-in libraries directory not set" +msgstr "Verzeichnis der eingebauten Bibliotheken nicht festgelegt" + +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 +msgid "can't find latest release of %s" +msgstr "Die neueste Version von %s wurde nicht gefunden" + +#: commands/instances.go:273 +msgid "can't find latest release of tool %s" +msgstr "Die neueste Version des Tools %s wurde nicht gefunden" + +#: internal/arduino/cores/packagemanager/loader.go:709 +msgid "can't find pattern for discovery with id %s" +msgstr "Kann kein Muster für die Suche mit id %s finden " + +#: internal/arduino/builder/internal/detector/detector.go:93 +msgid "candidates" +msgstr "Kandidaten" + +#: commands/service_upload.go:738 commands/service_upload.go:745 +msgid "cannot execute upload tool: %s" +msgstr "Das Upload-Tool %s konnte nicht ausgeführt werden " + +#: internal/arduino/resources/install.go:48 +msgid "checking local archive integrity" +msgstr "Überprüfung der Integrität des lokalen Archivs" + +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 +msgid "cleaning build path" +msgstr "Build-Pfad bereinigen" + +#: internal/cli/cli.go:90 +msgid "command" +msgstr "Befehl" + +#: internal/arduino/monitor/monitor.go:149 +msgid "command '%[1]s' failed: %[2]s" +msgstr "Der Befehl '%[1]s' ist fehlgeschlagen: %[2]s" + +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 +msgid "communication out of sync, expected '%[1]s', received '%[2]s'" +msgstr "Kommunikation nicht synchron, erwartet '%[1]s', empfangen '%[2]s'" + +#: internal/arduino/resources/checksums.go:75 +msgid "computing hash: %s" +msgstr "Hash berechnen: %s" + +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "Konfigurationsschlüssel %s enthält ein ungültiges Zeichen" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "Konfigurationswert %s enthält ein ungültiges Zeichen" + +#: internal/arduino/libraries/librariesmanager/install.go:140 +msgid "copying library to destination directory:" +msgstr "kopiere Bibliothek in Zielordner:" + +#: commands/service_upload.go:864 +msgid "could not find a valid build artifact" +msgstr "Gültiges Build-Artefakt wurde nicht gefunden" + +#: commands/service_platform_install.go:95 +msgid "could not overwrite" +msgstr "Überschreiben nicht möglich" + +#: commands/service_library_install.go:191 +msgid "could not remove old library" +msgstr "konnte alte Bibliothek nicht entfernen" + +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 +msgid "could not update sketch project file" +msgstr "Sketch-Projektdatei konnte nicht aktualisiert werden" + +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 +msgid "creating core cache folder: %s" +msgstr "Erstellen des Kern-Cache-Ordners: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 +msgid "creating installed.json in %[1]s: %[2]s" +msgstr "install.json in %[1]s erstellen: %[2]s" + +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 +msgid "creating temp dir for extraction: %s" +msgstr "Erstellen eines temporären Verzeichnisses für die Extraktion: %s" + +#: internal/arduino/builder/sizer.go:199 +msgid "data section exceeds available space in board" +msgstr "Datenbereich überschreitet den verfügbaren Platz auf der Platine" + +#: commands/service_library_resolve_deps.go:86 +msgid "dependency '%s' is not available" +msgstr "Abhängigkeit '%s' ist nicht verfügbar" + +#: internal/arduino/libraries/librariesmanager/install.go:93 +msgid "destination dir %s already exists, cannot install" +msgstr "Zielverzeichnis %s existiert bereits, kann nicht installiert werden" + +#: internal/arduino/libraries/librariesmanager/install.go:137 +msgid "destination directory already exists" +msgstr "Zielordner existiert bereits" + +#: internal/arduino/libraries/librariesmanager/install.go:305 +msgid "directory doesn't exist: %s" +msgstr "Verzeichnis existiert nicht: %s" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "Erkennungsprozess %[1]s nicht gestartet" + +#: internal/arduino/cores/packagemanager/loader.go:641 +msgid "discovery %s not found" +msgstr "Discovery %s wurde nicht gefunden" + +#: internal/arduino/cores/packagemanager/loader.go:645 +msgid "discovery %s not installed" +msgstr "Discovery %s wurde nicht installiert" + +#: internal/arduino/cores/packagemanager/package_manager.go:714 +msgid "discovery release not found: %s" +msgstr "Discovery-Release %s wurde nicht gefunden" + +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 +msgid "download a specific version (in this case 1.6.9)." +msgstr "eine bestimmte Version herunterladen (in diesem Fall 1.6.9)." + +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 +msgid "download the latest version of Arduino SAMD core." +msgstr "Lade die neueste Version des Arduino SAMD-Kerns herunter." + +#: internal/cli/feedback/rpc_progress.go:74 +msgid "downloaded" +msgstr "heruntergeladen" + +#: commands/instances.go:56 +msgid "downloading %[1]s tool: %[2]s" +msgstr "Werkzeug %[1]s wird heruntergeladen: %[2]s" + +#: pkg/fqbn/fqbn.go:63 +msgid "empty board identifier" +msgstr "leerer Platinenidentifikator" + +#: internal/arduino/sketch/sketch.go:93 +msgid "error loading sketch project file:" +msgstr "Fehler beim Laden der Sketch-Projektdatei:" + +#: internal/arduino/cores/packagemanager/loader.go:612 +msgid "error opening %s" +msgstr "Fehler beim Öffnen von %s" + +#: internal/arduino/sketch/profiles.go:250 +msgid "error parsing version constraints" +msgstr "Fehler beim Parsen von Versionsbeschränkungen" + +#: commands/service_board_identify.go:203 +msgid "error processing response from server" +msgstr "Fehler bei der Verarbeitung der Serverantwort" + +#: commands/service_board_identify.go:183 +msgid "error querying Arduino Cloud Api" +msgstr "Fehler bei der Abfrage der Arduino Cloud Api" + +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" +msgstr "Archiv entpacken" + +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" +msgstr "Archiv wird extrahiert: %s" + +#: internal/arduino/resources/checksums.go:143 +msgid "failed to compute hash of file \"%s\"" +msgstr "Der Hash der Datei \"%s\" konnte nicht berechnet werden." + +#: commands/service_board_identify.go:178 +msgid "failed to initialize http client" +msgstr "Http-Client konnte nicht initialisiert werden" + +#: internal/arduino/resources/checksums.go:98 +msgid "fetched archive size differs from size specified in index" +msgstr "" +"Die Größe des abgerufenen Archivs unterscheidet sich von der im Index " +"angegebenen Größe" + +#: internal/arduino/resources/install.go:132 +msgid "files in archive must be placed in a subdirectory" +msgstr "Die Archivdateien müssen in einem Unterverzeichnis abgelegt werden" + +#: internal/arduino/cores/packagemanager/loader.go:59 +msgid "finding absolute path of %s" +msgstr "Suche den absoluten Pfad zu %s" + +#: internal/cli/cli.go:90 +msgid "flags" +msgstr "Flags" + +#: internal/arduino/cores/packagemanager/loader.go:98 +msgid "following symlink %s" +msgstr "Folge dem Symlink %s" + +#: internal/cli/lib/download.go:40 +msgid "for a specific version." +msgstr "für eine bestimmte Version." + +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 +msgid "for the latest version." +msgstr "für die neueste Version." + +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 +msgid "for the specific version." +msgstr "für die jeweilige Version." + +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "FQBN-Feld %s enthält ein ungültiges Zeichen" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "Installations-ID generieren" + +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "Installations-Secret generieren" + +#: internal/arduino/resources/download.go:55 +msgid "getting archive file info: %s" +msgstr "Hole Info zur Archivdatei: %s" + +#: internal/arduino/resources/checksums.go:93 +msgid "getting archive info: %s" +msgstr "Hole Archiv-Info: %s" + +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 +msgid "getting archive path: %s" +msgstr "Hole Archiv-Pfad: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:322 +msgid "getting build properties for board %[1]s: %[2]s" +msgstr "Build-Eigenschaften für das Board %[1]s : %[2]s abrufen" + +#: internal/arduino/cores/packagemanager/download.go:106 +msgid "getting discovery dependencies for platform %[1]s: %[2]s" +msgstr "Discovery-Abhängigkeiten für die Plattform %[1]s abrufen: %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:114 +msgid "getting monitor dependencies for platform %[1]s: %[2]s" +msgstr "Monitor-Abhängigkeiten für die Plattform %[1]s : %[2]s abrufen" + +#: internal/arduino/cores/packagemanager/download.go:99 +msgid "getting tool dependencies for platform %[1]s: %[2]s" +msgstr "Abrufen von Tool-Abhängigkeiten für die Plattform %[1]s: %[2]s" + +#: internal/arduino/libraries/librariesmanager/install.go:148 +msgid "install directory not set" +msgstr "Installationsverzeichnis nicht festgelegt" + +#: commands/instances.go:60 +msgid "installing %[1]s tool: %[2]s" +msgstr "Werkzeug %[1]s wird installiert: %[2]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 +msgid "installing platform %[1]s: %[2]s" +msgstr "Plattform %[1]s wird installiert: %[2]s" + +#: internal/cli/feedback/terminal.go:38 +msgid "interactive terminal not supported for the '%s' output format" +msgstr "" +"Interaktives Terminal wird für das Ausgabeformat '%s' nicht unterstützt" + +#: internal/arduino/sketch/profiles.go:248 +msgid "invalid '%s' directive" +msgstr "Ungültige '%s' Richtlinie" + +#: internal/arduino/resources/checksums.go:44 +msgid "invalid checksum format: %s" +msgstr "Ungültiges Prüfsummenformat: %s" + +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 +msgid "invalid config option: %s" +msgstr "ungültige Konfigurationsoption: %s" + +#: internal/cli/arguments/reference.go:92 +msgid "invalid empty core architecture '%s'" +msgstr "Ungültige leere Kernarchitektur '%s'" + +#: internal/cli/arguments/reference.go:69 +msgid "invalid empty core argument" +msgstr "Ungültiges leeres Kernargument" + +#: internal/cli/arguments/reference.go:89 +msgid "invalid empty core name '%s'" +msgstr "Ungültiger leerer Kernname '%s'" + +#: internal/cli/arguments/reference.go:74 +msgid "invalid empty core reference '%s'" +msgstr "Ungültige leere Kernreferenz '%s'" + +#: internal/cli/arguments/reference.go:79 +msgid "invalid empty core version: '%s'" +msgstr "Ungültige leere Kernversion: '%s'" + +#: internal/cli/lib/args.go:49 +msgid "invalid empty library name" +msgstr "ungültiger, leerer Bibliotheksname" + +#: internal/cli/lib/args.go:54 +msgid "invalid empty library version: %s" +msgstr "ungültige, leere Bibliotheksversion: %s" + +#: internal/arduino/cores/board.go:144 +msgid "invalid empty option found" +msgstr "Ungültige leere Option gefunden" + +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 +msgid "invalid git url" +msgstr "Ungültige Git-URL" + +#: internal/arduino/resources/checksums.go:48 +msgid "invalid hash '%[1]s': %[2]s" +msgstr "Ungültiger Hash '%[1]s': %[2]s" + +#: internal/cli/arguments/reference.go:86 +msgid "invalid item %s" +msgstr "ungültiges Element %s" + +#: internal/arduino/sketch/profiles.go:282 +msgid "invalid library directive:" +msgstr "Ungültige Bibliotheksrichtlinie:" + +#: internal/arduino/libraries/libraries_layout.go:67 +msgid "invalid library layout: %s" +msgstr "Ungültiges Bibliothekslayout: %s" + +#: internal/arduino/libraries/libraries_location.go:90 +msgid "invalid library location: %s" +msgstr "Ungültiger Ort für Bibliothek: %s" + +#: internal/arduino/libraries/loader.go:140 +msgid "invalid library: no header files found" +msgstr "ungültige Bibliothek: keine Header-Dateien gefunden" + +#: internal/arduino/cores/board.go:147 +msgid "invalid option '%s'" +msgstr "Ungültige Option '%s'" + +#: internal/cli/arguments/show_properties.go:52 +msgid "invalid option '%s'." +msgstr "Ungültige Option '%s'." + +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "" +"Fehler. Ungültiger Pfad beim Erstellen des Konfigurationsverzeichnisses: " +"%[1]s" + +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "Fehler. Ungültiger Pfad beim Schreiben der Inventardatei: %[1]s" + +#: internal/arduino/sketch/profiles.go:252 +msgid "invalid platform identifier" +msgstr "ungültiger Plattformidentifikator" + +#: internal/arduino/sketch/profiles.go:262 +msgid "invalid platform index URL:" +msgstr "Ungültige Plattform-Index-URL:" + +#: internal/arduino/cores/packagemanager/loader.go:326 +msgid "invalid pluggable monitor reference: %s" +msgstr "Ungültige hinzufügbare Monitor-Referenz: %s" + +#: internal/cli/monitor/monitor.go:176 +msgid "invalid port configuration value for %s: %s" +msgstr "Ungültiger Port-Konfigurationswert für %s: %s" + +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" +msgstr "ungültige Port-Konfiguration: %s=%s" + +#: commands/service_upload.go:725 +msgid "invalid recipe '%[1]s': %[2]s" +msgstr "Ungültiges Rezept '%[1]s': %[2]s" + +#: commands/service_sketch_new.go:86 +msgid "" +"invalid sketch name \"%[1]s\": the first character must be alphanumeric or " +"\"_\", the following ones can also contain \"-\" and \".\". The last one " +"cannot be \".\"." +msgstr "" +"Ungültiger Sketchname \"%[1]s\": Das erste Zeichen muss alphanumerisch oder " +"\"_\" sein, die folgenden können auch \"-\" und \".\" enthalten. Das letzte " +"Zeichen darf nicht \".\" sein." + +#: internal/arduino/cores/board.go:151 +msgid "invalid value '%[1]s' for option '%[2]s'" +msgstr "Ungültiger Wert '%[1]s' für Option '%[2]s'" + +#: internal/arduino/cores/packagemanager/loader.go:231 +msgid "invalid version directory %s" +msgstr "Ungültiges Versionsverzeichnis %s" + +#: internal/arduino/sketch/profiles.go:284 +msgid "invalid version:" +msgstr "ungültige Version:" + +#: internal/cli/core/search.go:39 +msgid "keywords" +msgstr "Schlüsselwörter" + +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "Bibliotheken verfasst von Daniel Garcia" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "Nur von Adafruit erstellte Bibliotheken mit \"gfx\" im Namen" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "Bibliotheken, die mindestens von \"IRremote\" abhängen" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "Bibliotheken, die nur von \"IRremote\" abhängen" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "Bibliotheken mit \"buzzer\" im Feld Name" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "Bibliotheken mit einem Namen, der genau mit \"pcf8523\" übereinstimmt" + +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" +msgstr "Bibliothek %s bereits installiert" + +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "Bibliothek nicht gültig" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" +msgstr "lade %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "Platinen werden geladen: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 +msgid "loading json index file %[1]s: %[2]s" +msgstr "json-Indexdatei laden %[1]s: %[2]s" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 +msgid "loading library from %[1]s: %[2]s" +msgstr "lade Bibliothek von %[1]s: %[2]s" + +#: internal/arduino/libraries/loader.go:55 +msgid "loading library.properties: %s" +msgstr "lade library.porperties: %s" + +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 +msgid "loading platform release %s" +msgstr "Lade Plattform-Release %s" + +#: internal/arduino/cores/packagemanager/loader.go:195 +msgid "loading platform.txt" +msgstr "lade platform.txt" + +#: internal/arduino/cores/packagemanager/profiles.go:47 +msgid "loading required platform %s" +msgstr "Lade erforderliche Plattform %s" + +#: internal/arduino/cores/packagemanager/profiles.go:63 +msgid "loading required tool %s" +msgstr "Lade erforderliches Tool %s" + +#: internal/arduino/cores/packagemanager/loader.go:587 +msgid "loading tool release in %s" +msgstr "Lade Tool-Release in %s" + +#: internal/arduino/cores/packagemanager/loader.go:188 +msgid "looking for boards.txt in %s" +msgstr "suche nach boards.txt in %s" + +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "Suche nach Build-Artefakten" + +#: internal/arduino/sketch/sketch.go:77 +msgid "main file missing from sketch: %s" +msgstr "Hauptdatei fehlt im Sketch: %s" + +#: internal/arduino/sketch/profiles.go:246 +msgid "missing '%s' directive" +msgstr "Fehlende '%s' Richtlinie" + +#: internal/arduino/resources/checksums.go:40 +msgid "missing checksum for: %s" +msgstr "Fehlende Prüfsumme für: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:430 +msgid "missing package %[1]s referenced by board %[2]s" +msgstr "Fehlendes Paket %[1]s referenziert von Board %[2]s" + +#: internal/cli/core/upgrade.go:101 +msgid "missing package index for %s, future updates cannot be guaranteed" +msgstr "" +"Fehlender Paketindex für %s, zukünftige Updates können nicht garantiert " +"werden" + +#: internal/arduino/cores/packagemanager/package_manager.go:435 +msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" +msgstr "Fehlende Plattform %[1]s:%[2]s referenziert von Board %[3]s" + +#: internal/arduino/cores/packagemanager/package_manager.go:440 +msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" +msgstr "Fehlende Plattformfreigabe %[1]s:%[2]s referenziert von Board %[3]s" + +#: internal/arduino/resources/index.go:153 +msgid "missing signature" +msgstr "Fehlende Signatur" + +#: internal/arduino/cores/packagemanager/package_manager.go:725 +msgid "monitor release not found: %s" +msgstr "Monitor-Freigabe nicht gefunden: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 +msgid "moving extracted archive to destination dir: %s" +msgstr "Verschieben des extrahierten Archivs in das Zielverzeichnis: %s" + +#: commands/service_upload.go:859 +msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" +msgstr "Mehrere Build-Artefakte gefunden: '%[1]s' und '%[2]s'" + +#: internal/arduino/sketch/sketch.go:69 +msgid "multiple main sketch files found (%[1]v, %[2]v)" +msgstr "Mehrere Haupt-Sketchdateien gefunden (%[1]v, %[2]v)" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 +msgid "" +"no compatible version of %[1]s tools found for the current os, try " +"contacting %[2]s" +msgstr "" +"Keine kompatible Version von %[1]s Tools für das aktuelle Betriebssystem " +"gefunden wurde, kontaktiere bitte %[2]s" + +#: commands/service_board_list.go:106 +msgid "no instance specified" +msgstr "Keine Instanz angegeben" + +#: commands/service_upload.go:814 +msgid "no sketch or build directory/file specified" +msgstr "Kein Sketch oder Build-Verzeichnis/Datei angegeben" + +#: internal/arduino/sketch/sketch.go:56 +msgid "no such file or directory" +msgstr "Verzeichnis oder Datei nicht vorhanden" + +#: internal/arduino/resources/install.go:135 +msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" +msgstr "" +"Kein eindeutiges Stammverzeichnis im Archiv, gefunden wurde: '%[1]s' und " +"'%[2]s'" + +#: commands/service_upload.go:720 +msgid "no upload port provided" +msgstr "Kein Upload-Port vorhanden" + +#: internal/arduino/sketch/sketch.go:279 +msgid "no valid sketch found in %[1]s: missing %[2]s" +msgstr "Kein gültiger Sketch in %[1]s gefunden : es fehlt %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:128 +msgid "no versions available for the current OS, try contacting %s" +msgstr "" +"Keine Versionen für das aktuelle Betriebssystem verfügbar. Kontaktiere bitte" +" %s" + +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "kein FQBN: %s" + +#: internal/cli/feedback/terminal.go:52 +msgid "not running in a terminal" +msgstr "Läuft nicht in einem Terminal" + +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 +msgid "opening archive file: %s" +msgstr "Archivdatei öffnen: %s" + +#: internal/arduino/cores/packagemanager/loader.go:224 +msgid "opening boards.txt" +msgstr "boards.txt wird geöffnet" + +#: internal/arduino/security/signatures.go:82 +msgid "opening signature file: %s" +msgstr "Öffne Signaturdatei: %s" + +#: internal/arduino/security/signatures.go:78 +msgid "opening target file: %s" +msgstr "Öffne Zieldatei: %s" + +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 +msgid "package %s not found" +msgstr "Paket %s nicht gefunden" + +#: internal/arduino/cores/packagemanager/package_manager.go:498 +msgid "package '%s' not found" +msgstr "Paket '%s' nicht gefunden" + +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 +msgid "parsing fqbn: %s" +msgstr "parse FQBN: %s" + +#: internal/arduino/libraries/librariesindex/json.go:70 +msgid "parsing library_index.json: %s" +msgstr "parse library_index.json: %s" + +#: internal/arduino/cores/packagemanager/loader.go:179 +msgid "path is not a platform directory: %s" +msgstr "Pfad ist kein Plattformverzeichnis: %s" + +#: internal/arduino/cores/packagemanager/download.go:80 +msgid "platform %[1]s not found in package %[2]s" +msgstr "Plattform %[1]s nicht im Paket %[2]s gefunden " + +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" +msgstr "Plattform %s ist nicht installiert" + +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "Plattform ist für dieses Betriebssystem nicht verfügbar" + +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 +msgid "platform not installed" +msgstr "Plattform nicht installiert" + +#: internal/cli/compile/compile.go:142 +msgid "please use --build-property instead." +msgstr "Bitte verwende stattdessen --build-property." + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 +msgid "pluggable discovery already added: %s" +msgstr "Pluggable discovery bereits hinzugefügt: %s" + +#: internal/cli/board/attach.go:35 +msgid "port" +msgstr "Port" + +#: internal/cli/arguments/port.go:125 +msgid "port not found: %[1]s %[2]s" +msgstr "Port nicht gefunden: %[1]s %[2]s" + +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "Programmer" + +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" +msgstr "Protokollversion nicht unterstützt, gefordert: %[1]d, erhalten %[2]d" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 +msgid "reading dir %[1]s: %[2]s" +msgstr "Verzeichnis %[1]s wird gelesen: %[2]s" + +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "Verzeichnisinhalt lesen %[1]s" + +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 +msgid "reading directory %s" +msgstr "Verzeichnis %s wird gelesen" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" +msgstr "Verzeichnisinhalt lesen %s" + +#: internal/arduino/builder/sketch.go:83 +msgid "reading file %[1]s: %[2]s" +msgstr "Datei %[1]s wird gelesen: %[2]s" + +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "Dateien lesen" + +#: internal/arduino/libraries/librariesresolver/cpp.go:90 +msgid "reading lib headers: %s" +msgstr "Lese Bibliotheks-Header: %s" + +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "Bibliotheks-Header lesen" + +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "Bibliotheksquellverzeichnis lesen %s" + +#: internal/arduino/libraries/librariesindex/json.go:64 +msgid "reading library_index.json: %s" +msgstr "lese library_index.json: %s" + +#: internal/arduino/resources/install.go:125 +msgid "reading package root dir: %s" +msgstr "Lese Paketstammverzeichnis: %s" + +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "Sketch-Dateien lesen" + +#: commands/service_upload.go:714 +msgid "recipe not found '%s'" +msgstr "Rezept nicht gefunden '%s'" + +#: internal/arduino/cores/packagemanager/package_manager.go:574 +msgid "release %[1]s not found for tool %[2]s" +msgstr "Freigabe %[1]s für Werkzeug %[2]s nicht gefunden " + +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 +msgid "release cannot be nil" +msgstr "Freigabe kann nicht null sein" + +#: internal/arduino/resources/download.go:46 +msgid "removing corrupted archive file: %s" +msgstr "Entfernen der beschädigten Archivdatei: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:151 +msgid "removing library directory: %s" +msgstr "Entferne das Bibliotheksverzeichnis: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 +msgid "removing platform files: %s" +msgstr "Entferne die Plattformdateien: %s" + +#: internal/arduino/cores/packagemanager/download.go:87 +msgid "required version %[1]s not found for platform %[2]s" +msgstr "Erforderliche Version %[1]s für Plattform %[2]s nicht gefunden " + +#: internal/arduino/security/signatures.go:74 +msgid "retrieving Arduino public keys: %s" +msgstr "Abrufen der öffentlichen Arduino-Schlüssel: %s" + +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "Sketch-Beispiele durchsuchen" + +#: internal/arduino/resources/install.go:83 +msgid "searching package root dir: %s" +msgstr "Suche im Stammverzeichnis des Pakets: %s" + +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" +msgstr "Signatur abgelaufen: Ist deine Systemuhr richtig eingestellt?" + +#: commands/service_sketch_new.go:78 +msgid "sketch name cannot be empty" +msgstr "Sketchname darf nicht leer sein" + +#: commands/service_sketch_new.go:91 +msgid "sketch name cannot be the reserved name \"%[1]s\"" +msgstr "Der Sketchname darf nicht der reservierte Name \"%[1]s\" sein." + +#: commands/service_sketch_new.go:81 +msgid "" +"sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" +msgstr "" +"Sketchname zu lang (%[1]d Zeichen). Die maximal zulässige Länge ist %[2]d" + +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 +msgid "sketch path is not valid" +msgstr "Der Sketch-Pfad ist ungültig" + +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 +msgid "sketchPath" +msgstr "Sketch-Pfad" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 +msgid "starting discovery %s" +msgstr "Starte Discovery %s" + +#: internal/arduino/resources/checksums.go:117 +msgid "testing archive checksum: %s" +msgstr "Prüfung der Archivprüfsumme: %s" + +#: internal/arduino/resources/checksums.go:112 +msgid "testing archive size: %s" +msgstr "Archivgröße wird getestet: %s" + +#: internal/arduino/resources/checksums.go:106 +msgid "testing if archive is cached: %s" +msgstr "Prüfe, ob das Archiv zwischengespeichert ist: %s" + +#: internal/arduino/resources/install.go:46 +msgid "testing local archive integrity: %s" +msgstr "Prüfung der Integrität des lokalen Archivs: %s" + +#: internal/arduino/builder/sizer.go:194 +msgid "text section exceeds available space in board" +msgstr "Textbereich überschreitet den verfügbaren Platz auf der Platine" + +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 +msgid "the compilation database may be incomplete or inaccurate" +msgstr "Die Kompilierdatenbank kann unvollständig oder ungenau sein" + +#: commands/service_board_identify.go:190 +msgid "the server responded with status %s" +msgstr "Der Server antwortete mit dem Status %s" + +#: internal/arduino/monitor/monitor.go:139 +msgid "timeout waiting for message" +msgstr "Timeout beim Warten auf Nachricht" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 +msgid "tool %s is not managed by package manager" +msgstr "Das Tool %s wird nicht vom Paketmanager verwaltet." + +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 +msgid "tool %s not found" +msgstr "Tool %s nicht gefunden" + +#: internal/arduino/cores/packagemanager/package_manager.go:524 +msgid "tool '%[1]s' not found in package '%[2]s'" +msgstr "Tool '%[1]s' nicht in Paket '%[2]s' gefunden" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 +msgid "tool not installed" +msgstr "Werkzeug nicht installiert" + +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 +msgid "tool release not found: %s" +msgstr "Werkzeugfreigabe nicht gefunden: %s" + +#: internal/arduino/cores/status.go:105 +msgid "tool version %s not found" +msgstr "Werkzeugversion %s nicht gefunden" + +#: commands/service_library_install.go:93 +msgid "" +"two different versions of the library %[1]s are required: %[2]s and %[3]s" +msgstr "" +"zwei verschiedene Versionen der Bibliothek %[1]s sind erforderlich: %[2]s " +"und %[3]s" + +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 +msgid "unable to compute relative path to the sketch for the item" +msgstr "" +"Relativer Pfad zum Sketch konnte für das Element nicht berechnet werden" + +#: internal/arduino/builder/sketch.go:45 +msgid "unable to create a folder to save the sketch" +msgstr "Konnte keinen Ordner zum Speichern des Sketchs erstellen" + +#: internal/arduino/builder/sketch.go:126 +msgid "unable to create the folder containing the item" +msgstr "Konnte Ordner, der das Objekt enthält, nicht erstellen" + +#: internal/cli/config/get.go:85 +msgid "unable to marshal config to YAML: %v" +msgstr "Konnte die Konfiguration nicht in YAML umwandeln: %v" + +#: internal/arduino/builder/sketch.go:164 +msgid "unable to read contents of the destination item" +msgstr "Inhalt des Zielobjekts konnte nicht gelesen werden" + +#: internal/arduino/builder/sketch.go:137 +msgid "unable to read contents of the source item" +msgstr "Inhalt der Quelle konnte nicht gelesen werden" + +#: internal/arduino/builder/sketch.go:147 +msgid "unable to write to destination file" +msgstr "Schreiben in Zieldatei unmöglich" + +#: internal/arduino/cores/packagemanager/package_manager.go:297 +msgid "unknown package %s" +msgstr "unbekanntes Paket %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:304 +msgid "unknown platform %s:%s" +msgstr "unbekannte Plattform %s:%s" + +#: internal/arduino/sketch/sketch.go:137 +msgid "unknown sketch file extension '%s'" +msgstr "Unbekannte Sketch-Dateierweiterung '%s'" + +#: internal/arduino/resources/checksums.go:61 +msgid "unsupported hash algorithm: %s" +msgstr "Nicht unterstützter Hash-Algorithmus: %s" + +#: internal/cli/core/upgrade.go:44 +msgid "upgrade arduino:samd to the latest version" +msgstr "Aktualisiere arduino:samd auf die neueste Version" + +#: internal/cli/core/upgrade.go:42 +msgid "upgrade everything to the latest version" +msgstr "Aktualisiere alles auf die neueste Version" + +#: commands/service_upload.go:760 +msgid "uploading error: %s" +msgstr "Hochladefehler: %s" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 +msgid "user directory not set" +msgstr "Benutzerverzeichnis nicht gesetzt" + +#: internal/cli/feedback/terminal.go:94 +msgid "user input not supported for the '%s' output format" +msgstr "Benutzereingaben werden für das Ausgabeformat '%s' nicht unterstützt." + +#: internal/cli/feedback/terminal.go:97 +msgid "user input not supported in non interactive mode" +msgstr "Benutzereingaben werden im nicht interaktiven Modus nicht unterstützt" + +#: internal/arduino/cores/packagemanager/profiles.go:175 +msgid "version %s not available for this operating system" +msgstr "Version %s ist für dieses Betriebssystem nicht verfügbar" + +#: internal/arduino/cores/packagemanager/profiles.go:154 +msgid "version %s not found" +msgstr "Version %s nicht gefunden" + +#: commands/service_board_identify.go:208 +msgid "wrong format in server response" +msgstr "falsches Format in der Serverantwort" diff --git a/i18n/data/en.po b/internal/locales/data/en.po similarity index 100% rename from i18n/data/en.po rename to internal/locales/data/en.po diff --git a/i18n/data/es.po b/internal/locales/data/es.po similarity index 55% rename from i18n/data/es.po rename to internal/locales/data/es.po index bb7b86937fb..856ec306596 100644 --- a/i18n/data/es.po +++ b/internal/locales/data/es.po @@ -7,104 +7,93 @@ # Sachonidas, 2022 # Iago, 2022 # Gonzalo Martínez, 2023 -# Gaia Castronovo <g.castronovo@arduino.cc>, 2023 +# Diego Castro, 2023 +# Gaia Castronovo <g.castronovo@arduino.cc>, 2025 # msgid "" msgstr "" -"Last-Translator: Gaia Castronovo <g.castronovo@arduino.cc>, 2023\n" +"Last-Translator: Gaia Castronovo <g.castronovo@arduino.cc>, 2025\n" "Language-Team: Spanish (https://app.transifex.com/arduino-1/teams/108174/es/)\n" "Language: es\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "¡%[1]s ya no es compatible con la carpeta! %[2]s Para más información" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s inválido, reconstruyendo todo" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s es requerido pero %[2]s está actualmente instalado." -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "No se encuentra patrón %[1]s" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, mensaje: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, puerto: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, puertos: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, versión del protocolo: %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s ya está descargado" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "%s y %s no se pueden usar juntos" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%s instalado" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "%s ya está instalado." -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "%s no es un directorio" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "%s no es manejado por el administrador de paquetes" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "%s debe ser >= 1024" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "%s debe ser instalado." -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "Falta el patrón %s " -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s' tiene una firma inválida" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(oculto)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "(legado)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" @@ -112,7 +101,7 @@ msgstr "" "--git-url y --zip-path están deshabilitados por defecto, para más " "información mira: %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." @@ -120,24 +109,24 @@ msgstr "" "las banderas --git-url y --zip-path permiten instalar archivos no " "verificados, úsalo bajo tu propio riesgo." -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "El archivo .ino ya existe" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "Una nueva versión de Arduino CLI está disponible:" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "Se requiere un programador para subir." -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARQUITECTURA" @@ -145,115 +134,119 @@ msgstr "ARQUITECTURA" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "MANUAL DE LA LINEA DE COMANDOS DE ARDUINO" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "Temas de ayuda adicionales:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "Agrega uno o más valores a una configuración." -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "Alias:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "Todos los núcleos están en su última versión" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "Ya está instalado %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "Alternativas para %[1]s: %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "Ocurrió un error añadiendo prototipos" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "Ocurrió un error detectando librerías" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "Registro de depuración añadido al archivo especificado" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "Arquitectura: %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "El archivo ya existe" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "Archivando el núcleo construido (cacheado) en: %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Comandos de sketch de Arduino CLI." -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Interfaz de la línea de comandos de Arduino (arduino-cli)." -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Comandos de la placa Arduino." -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Comandos de cache de Arduino" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Comandos sobre librerías de Arduino" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Commandos de configuración de Arduino" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Operaciones del núcleo Arduino" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "Errores en los argumentos: %v " -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "Conecta una tabla al sketch." -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "Autor: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "Disponible" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "Comandos disponibles:" @@ -261,152 +254,156 @@ msgstr "Comandos disponibles:" msgid "Binary file to upload." msgstr "Archivo binario para cargar." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "Nombre de la placa" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "Nombre de la placa:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "Versión de la placa:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "Fichero Bootloader especificado pero ausente: %[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -"La compilaciones de 'core.a' e guardan en esta ruta para ser cacheadas y " -"reusadas" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "No se puede crear el directorio de datos %s" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "No se puede crear el sketch" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "No fue posible descargar la librería" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "No puedo encontrar las dependencias para la plataforma %s" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "No es posible abrir el sketch" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "No se puede establecer multiples valores a un mismo índice %v" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "No se puede escribir el archivo de configuración: %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "No se puede crear el directorio de caché de compilación" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "No se puede crear el directorio de caché de compilación" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "No se puede crear el directorio de archivos de configuración: %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "No se puede crear el archivo de configuración: %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "No se puede crear un directorio temporal" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "No se puede crear un archivo temporal" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "No se puede ejecutar la herramienta de depuración" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "No se puede encontrar la ruta absoluta: %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "No se puede instalar la plataforma" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "No se puede instalar la herramienta %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "No se puede realizar el reinicio del puerto: %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 msgid "Cannot upgrade platform" msgstr "No se puede actualizar la plataforma" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "Categoría: %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "Comprueba el estado de las dependencias de la librería especificada." -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "El checksum difiere del checksum en package.json" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "Checksum:" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "Limpiando caches." -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" "Lista separada por comas de URLs adicionales para el Gestor de Tarjetas." -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." @@ -414,88 +411,88 @@ msgstr "" "El comando sigue ejecutándose e imprime la lista de placas conectadas cada " "vez que hay un cambio." -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "Proyecto compilado no encontrado en %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "Compila los sketch de Arduino" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "Compilando el núcleo..." -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "Compilando librerías..." -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "Compilando librería \"%[1]s\"" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "Compilando el sketch..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" "El archivo de configuración ya existe, utilice --overwrite para descartar el" " existente." -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "Archivo de configuración escrito en: %s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "Opciones de configuración para %s" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "Configurando plataforma." -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "Conectado" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "¡Conectado a %s! Pulse CTRL-C para salir." +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "Núcleo" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "No se pudo conectar vía HTTP" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "No se ha podido crear el directorio índice." -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "No se pudo determinar el tamaño del programa" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "No se ha podido obtener el directorio de trabajo actual: %v" @@ -503,7 +500,7 @@ msgstr "No se ha podido obtener el directorio de trabajo actual: %v" msgid "Create a new Sketch" msgstr "Crear un nuevo Sketch" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "" @@ -511,7 +508,7 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "Crea un archivo zip conteniendo todos los archivos del sketch." -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." @@ -519,95 +516,95 @@ msgstr "" "Crea o actualiza el archivo de configuración en el directorio de datos o " "directorio personalizado con los ajustes actuales." -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "OBSOLETO" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "Depurar sketches de Arduino." -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "Intérprete de depuración e.j.: %s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "Depuración no soportada para la tarjeta: %s" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "Debugging soportado:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "Por defecto" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "Elimina una llave de configuraciones y sus sub-llaves." -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "Dependencias: %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "Descripción" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "Detectando las librerías usadas..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" "Detecta y muestra una lista de placas conectadas al computador actual." -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "La carpeta contiene archivos binarios para la depuración." -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "La carpeta contiene archivos binarias para subir." @@ -623,249 +620,260 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "Desconectado" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "No instale dependencias." -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "No sobrescribir librerías ya instaladas." -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "No sobrescribir plataformas ya instaladas." -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "Descargando %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "Descargando el índice: %s" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "Descargando la librería %s" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "Descargando herramienta perdida %s" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "Descargando paquetes" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "Descargando la plataforma %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "Descargando la herramienta%s" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" "Descarga uno o más núcleos y sus dependencias de herramienta " "correspondientes." -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "Descarga una o más librerías sin instalarlas." -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "Introduzca una ruta para el archivo zip" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "Introducir la url de git para librerías alojadas en repositorios" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "Error añadiendo sketch al archivo de sketch" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "Error calculando la ruta de archivo relativa" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "Error limpiando caches: %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "Error copiando el archivo de salida %s" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "Error creando la instancia: %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "Error al crear el directorio de salida" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "Error creando el archivo de sketch" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "Error creando el sketch: %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "Error detectando placas: %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "Error al descargar %[1]s: %[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "Error descargando %s" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "Error descargando el índice '%s'" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "Error descargando el índice de firmas '%s'" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "Error descargando la librería %s" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "Error descargando la plataforma %s" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "Error descargando la herramienta %s" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "Error durante la carga: %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" msgstr "" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "Error durante la instalación: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "Error durante la desinstalacion: %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "Error durante la actualización: %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "Error extrayendo %s" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "Error obteniendo la ruta absoluta del archivo de sketch" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "Error obteniendo los detalles de la placa: %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" "Error obteniendo el directorio actual para la base de datos de compilación%s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "Error obteniendo información para la librería %s" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "Error obteniendo información de las librerías: %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "" @@ -873,42 +881,42 @@ msgstr "" msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "Error instalando la plataforma %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "Error instalando la herramienta %s" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "Error listando las placas: %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -916,44 +924,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "Error listando las plataformas: %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "Error al leer el archivo de configuración: %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "Error leyendo los archivos del sketch" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -961,203 +965,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "Error al revertir los cambios: %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "Error en la búsqueda de placas: %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "Error al desinstalar %[1]s: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "Ejemplos:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "Borrado del chip fallida" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "Archivo:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "Banderas:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "" @@ -1174,15 +1193,19 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "Banderas globales:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1190,298 +1213,302 @@ msgstr "" "Las variables Globales usan %[1]s bytes (%[3]s%%) de la memoria dinámica, " "dejando %[4]s bytes para las variables locales. El máximo es %[2]s bytes." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Variables globales usan %[1]s bytes de memoria dinamica." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "Propiedades de identificación:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Instalado" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "Instalado %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "Instalando %s" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "Instalando la librería %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "Instalando la plataforma %s" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "Instalando la herramienta %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "Error interno en la cache" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "FQBN inválido" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "URL inválida" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "URL adicional inválida: %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "Instancia inválida" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "Librería inválida" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "Parámetro inválido %s: versión no compatible" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "Perfil inválido" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" +#: main.go:86 +msgid "Invalid value in configuration" msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "Versión inválida" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "LIBNAME" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "LIBRERÍA" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "Última" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" "La librería %[1]s ya está instalada, pero en una versión diferente: %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "La librería %s ya se encuentra en la versión más reciente" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "La librería %s no está instalada" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "Librería %s no encontrada" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "La librería '%s' no fue encontrada" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "La instalación de la librería no fue exitosa" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "Librería instalada" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "Licencia: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "Listar las placas conectadas." -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "Enumera las librerías actualizables." -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "Enumera las plataformas actualizables." -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "Enumera todas las placas conectadas." @@ -1489,54 +1516,60 @@ msgstr "Enumera todas las placas conectadas." msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "Ubicación" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "" "Hay poca memoria disponible; pueden producirse problemas de estabilidad." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "Falta '%[1]s' de la biblioteca en %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "Falta el puerto" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "No se encuentra la dirección del puerto " -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "Falta el protocolo del puerto" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" @@ -1544,61 +1577,61 @@ msgstr "" msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "Monitor '%s' no encontrado" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Se encontraron varias bibliotecas para \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "Nombre" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "Nombre: \"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "No se encontraron placas." -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "No se encontraron las librerías." -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "No hay librerías instaladas." -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "Ninguna librería concuerda con tu búsqueda." -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1606,273 +1639,292 @@ msgstr "" "Ninguna librería concuerda con tu búsqueda.\n" "Querías decir...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "No hay plataformas que coincidan con su búsqueda." -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "No hay suficiente memoria, ver %[1]s para obtener consejos sobre cómo " "optimizar su código." -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "No utilizado: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "OS:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "Placa oficial de Arduino:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "Abre un puerto de comunicación con una placa." -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "Opción:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "La plataforma %s ya está instalada" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "Plataforma %s instalada" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "Plataforma %s desinstalada" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "La plataforma '%s' ya se encuentra en su versión más reciente" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "Puerto" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "Puerto cerrado: %v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1881,194 +1933,245 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "Perfil '%s' no encontrado" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "Programadores:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "La propiedad '%s' no está definida" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "Protocolo" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" -msgstr "" +msgstr "Reemplazando %[1]s con %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" -msgstr "" +msgstr "Reemplazando plataforma %[1]s con %[2]s" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "Herramienta requerida:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" "Busca un núcleo in el Manager de Tarjetas usando las palabras clave " "especificadas." -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "Busca un núcleo in el Manager de Tarjetas." -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "Sentencia: %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "El servidor respondió con: %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "Muestra todos los núcleos disponibles." -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "Mostrar solo los nombres de la librería." -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2079,11 +2182,11 @@ msgstr "" "Muestra los núcleos y librerías obsoletas después de una actualización de " "índice" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2092,52 +2195,52 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "Mostrar la lista de plataformas instaladas." -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "Muestra la lista de ejemplos para las librerías." -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "Tamaño (bytes):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "Programa muy grando: visite %[1]s para ver cómo reducirlo." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2145,116 +2248,134 @@ msgstr "" "El Sketch usa %[1]s bytes (%[3]s%%) del espacio de almacenamiento de " "programa. El máximo es %[2]s bytes." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2270,91 +2391,92 @@ msgstr "" "Este comando muestra una lista de los núcleos o librerías instaladas\n" "que pueden ser actualizadas. Si ninguno necesita ser actualizado no se mostrará nada." -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "La herramienta %s ya está instalada" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "La herramienta %s se desinstaló" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "Habilitar el modo verbose." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "Tipo" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "Tipos: %s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "URL:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "No es posible abrir el archivo para el logging: %s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "Desinstalando %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "Desinstalando %s, la herramienta ya no es requerida" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." @@ -2362,15 +2484,15 @@ msgstr "" "Desinstalar uno o más núcleos y sus herramientas correspondientes si ya no " "son usadas." -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "Desinstalar una o más librerías." -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2382,23 +2504,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2410,155 +2532,166 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "Subir el binario después de la compilación." -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "Cargar el bootloader en la placa usando un programador externo." -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "Cargar el bootloader." -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "Uso:" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "Use %spara más información acerca de un comando." -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Usado: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "Usando librería %[1]s con versión %[2]s en la carpeta: %[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "Utilizando biblioteca %[1]s en carpeta: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "Utilizando archivo previamente compilado: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "VERSIÓN" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2567,46 +2700,42 @@ msgstr "" "y puede ser incompatible con tu actual tarjeta la cual corre sobre " "arquitectura(s) %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "Sitio web: %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2614,370 +2743,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" msgstr "" -#: commands/upload/upload.go:700 +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "Candidatos" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "comando" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "comando fallido: %s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "identificador de placa vacío" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "banderas" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2989,343 +3089,348 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "ítem inválido %s" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "Palabras clave" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "Listando los puertos seriales" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" @@ -3333,291 +3438,277 @@ msgstr "" msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "versión %s no encontrada" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "Error de formato en la respuesta del servidor" diff --git a/i18n/data/fr.po b/internal/locales/data/fr.po similarity index 52% rename from i18n/data/fr.po rename to internal/locales/data/fr.po index 0490294be64..38095b20456 100644 --- a/i18n/data/fr.po +++ b/internal/locales/data/fr.po @@ -11,126 +11,114 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" "le dossier %[1]sn'est plus supporté ! Consulter%[2]s pour plus " "d'informations" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "%[1]s est un schéma manquant" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s déjà téléchargé" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "%set%sne peuvent pas être téléchargé." -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "(héritage)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -138,115 +126,119 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "Manuel d'Arduino Command Line" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "Aide supplémentaire sur les sujets :" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "Ajouter une autre valeur à un réglage." -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "Alias :" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "Tous les cœurs sont à jours vers la dernière version." -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "Déjà installé %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "Alternative pour %[1]s: %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "Architecture : %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "L'archive existe déjà" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "Archivage du noyau construit (mise en cache) dans: %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Arduino CLI croquis commandes." -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" @@ -254,234 +246,240 @@ msgstr "" msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "Fichier du bootloader spécifié mais absent: %[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "Impossible de créer le dossier temporaire" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "Impossible de créer le fichier temporaire" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "Croquis compilé introuvable %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "Compilation des croquis Arduino." -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "Compilation du croquis..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "Configuration de la plateforme." -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "Connecté" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -489,7 +487,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "" @@ -497,100 +495,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "Défaut" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "" @@ -604,246 +602,257 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "Téléchargement %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "Téléchargement des paquets" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" msgstr "" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "" @@ -851,42 +860,42 @@ msgstr "" msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "Erreur lors de l'installation de la librairie Zip : %v" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "Erreur lors de l'installation de la plateforme %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "Erreur lors de l’installation de l'outil %s." -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -894,44 +903,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -939,203 +944,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "" @@ -1152,15 +1172,19 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1169,297 +1193,301 @@ msgstr "" "dynamique, ce qui laisse %[4]s octets pour les variables locales. Le maximum" " est de %[2]s octets." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Les variables globales utilisent %[1]s octets de mémoire dynamique." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Installé" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" +#: main.go:86 +msgid "Invalid value in configuration" msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1467,55 +1495,61 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "" "La mémoire disponible faible, des problèmes de stabilité pourraient " "survenir." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "Fichier manquant '%[1]s' de la bibliothèque dans %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" @@ -1523,333 +1557,352 @@ msgstr "" msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Plusieurs bibliothèque trouvées pour \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "Mémore insuffisante; consulter la page %[1]s pour obtenir des astuces sur " "comment le réduire." -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "Non utilisé: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "Port" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1858,192 +1911,243 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2052,11 +2156,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2065,52 +2169,52 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "Croquis trop gros; vois %[1]s pour des conseils de réduction." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2118,116 +2222,134 @@ msgstr "" "Le croquis utilise %[1]s octets (%[3]s%%) de l'espace de stockage de " "programmes. Le maximum est de %[2]s octets." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2241,105 +2363,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2351,23 +2474,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2379,158 +2502,169 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Utilisé: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" "Utilisation de la bibliothèque %[1]s version %[2]s dans le dossier: %[3]s " "%[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "" "Utilisation de la bibliothèque %[1]s prise dans le dossier: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "Utilisation du fichier déjà compilé: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2539,46 +2673,42 @@ msgstr "" "architecture(s) %[2]s et peut être incompatible avec votre carte actuelle " "qui s'exécute sur %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2586,370 +2716,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" msgstr "" -#: commands/upload/upload.go:700 +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2961,343 +3062,348 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" @@ -3305,291 +3411,277 @@ msgstr "" msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "impossible d’écrire dans le fichier de destination." -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "paquet inconnu %s" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "plateforme inconnue %s:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "extension de croquis inconnue '%s' " -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "algorithme de hachage non supporté" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "mise à jour de arduino:samd vers la dernière version" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "tout mettre à jour tout vers la dernière version" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/he.po b/internal/locales/data/he.po similarity index 51% rename from i18n/data/he.po rename to internal/locales/data/he.po index 20309bd90d7..fc280357c5c 100644 --- a/i18n/data/he.po +++ b/internal/locales/data/he.po @@ -7,126 +7,114 @@ msgstr "" "Last-Translator: rel_m3, 2022\n" "Language-Team: Hebrew (https://app.transifex.com/arduino-1/teams/108174/he/)\n" "Language: he\n" -"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" +"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s%[2]s גרסה: %[3]s קומיט: %[4]sתאריך: %[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "%[1]s תבנית חסרה" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, הערה: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, פורט: %[2]s " - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, גרסאת פרוטוקול: %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%s מותקן" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "%s אינו תיקייה" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "%s אינו מנוהל על ידי מנהל ההתקנות" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(מוסתר)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -134,115 +122,119 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "ארכיטקטורה: %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "פקודות סקיצה בשורת הפקודה של ארדואינו." -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "שורת הפקודה של ארדואינו." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "פקודות לוח של ארדואינו." -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" @@ -250,234 +242,240 @@ msgstr "" msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -485,7 +483,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "" @@ -493,100 +491,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "" @@ -600,246 +598,257 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" msgstr "" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "" @@ -847,42 +856,42 @@ msgstr "" msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -890,44 +899,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -935,203 +940,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "" @@ -1148,311 +1168,319 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" +#: main.go:86 +msgid "Invalid value in configuration" msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1460,53 +1488,59 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" @@ -1514,331 +1548,350 @@ msgstr "" msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1847,192 +1900,243 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2041,11 +2145,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2054,167 +2158,185 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2228,105 +2350,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2338,23 +2461,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2366,200 +2489,207 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2567,370 +2697,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2942,343 +3043,348 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" @@ -3286,291 +3392,277 @@ msgstr "" msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/it_IT.po b/internal/locales/data/it_IT.po similarity index 62% rename from i18n/data/it_IT.po rename to internal/locales/data/it_IT.po index 08764032efe..dac2f53d1db 100644 --- a/i18n/data/it_IT.po +++ b/internal/locales/data/it_IT.po @@ -7,92 +7,80 @@ # Gabriel F., 2022 # CLI team <prj_cli_team@arduino.cc>, 2022 # Gaia Castronovo <g.castronovo@arduino.cc>, 2023 -# Giovanni Scafora <scafora.giovanni@gmail.com>, 2023 +# Giovanni Scafora <scafora.giovanni@gmail.com>, 2024 # msgid "" msgstr "" -"Last-Translator: Giovanni Scafora <scafora.giovanni@gmail.com>, 2023\n" +"Last-Translator: Giovanni Scafora <scafora.giovanni@gmail.com>, 2024\n" "Language-Team: Italian (Italy) (https://app.transifex.com/arduino-1/teams/108174/it_IT/)\n" "Language: it_IT\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s %[2]s Versione: %[3]s Commit: %[4]s Data: %[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" "La cartella %[1]s non è più supportata! Vedere %[2]s per maggiori " "informazioni" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s non è valido, ricompilo tutto" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s è richiesto ma %[2]s risulta attualmente installato." -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "Manca il pattern %[1]s" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, messaggio: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, porta: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, porte: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, versione protocollo: %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr " %s già scaricato" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "%s e %s non possono essere usati insieme" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%s installato" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "%s è già installato." -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "%s non è una directory" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "%s non è gestito dal gestore pacchetti" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "%s deve essere >= 1024" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "%s deve essere installato." -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "Manca il pattern %s" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s' ha una firma invalida" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" @@ -100,15 +88,15 @@ msgstr "" "'build.core' e 'build.variant' fanno riferimento a piattaforme diverse: " "%[1]s and %[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(nascosto)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "(ereditato)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" @@ -116,7 +104,7 @@ msgstr "" "--git-url e --zip-path sono disabilitati per impostazione predefinita, per " "maggiori informazioni vedere: %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." @@ -124,25 +112,25 @@ msgstr "" "I flag --git-url e --zip-path consentono l'installazione di file non " "attendibili, utilizzateli a vostro rischio e pericolo." -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" "--git-url o --zip-path non possono essere usate con --install-in-builtin-dir" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "il file .ino è già presente" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "È disponibile una nuova versione di Arduino CLI:" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "Per caricare è necessario un programmatore" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARCH" @@ -150,99 +138,103 @@ msgstr "ARCH" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "MANUALE DELLA LINEA DI COMANDO DI ARDUINO" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "Informazioni aggiuntive:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "Aggiunge uno o più valori a un'impostazione." -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "Alias:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "Tutte le piattaforme sono aggiornate." + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "Tutti i core sono già all'ultima versione" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "Già installato %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "Alternative per %[1]s: %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "Si è verificato un errore durante l'aggiunta di un prototipo" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "Si è verificato un errore durante il rilevamento delle librerie" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "Aggiungi il log di debug in coda al file specificato" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "Architettura: %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "L'archivio è già presente" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "Archivio il core compilato (caching) in: %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Comandi degli sketch di Arduino CLI." -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Interfaccia a linea di comando di Arduino (arduino-cli)." -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Comandi delle schede Arduino." -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Comandi della cache Arduino." -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Comandi Arduino riguardo le librerie." -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Comandi di configurazione Arduino." -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Operazioni core Arduino" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "Errore di argomenti: %v" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "Collega uno sketch ad una scheda." -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "Autore: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." @@ -250,7 +242,7 @@ msgstr "" "Non è possibile eseguire l'installazione automatica della libreria, " "rimuovere manualmente tutti i duplicati e riprovare." -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." @@ -258,11 +250,11 @@ msgstr "" "La disinstallazione automatica delle librerie non può essere eseguita, " "rimuovile manualmente." -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "Disponibile" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "Comandi disponibili:" @@ -270,153 +262,160 @@ msgstr "Comandi disponibili:" msgid "Binary file to upload." msgstr "File binario da caricare." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "Nome scheda" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "Nome scheda:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "Versione scheda:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "Il file del bootloader specificato è inesistente: %[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -"Le build di 'core.a' vengono salvate in questo percorso per essere " -"memorizzate nella cache e riutilizzate." +"Le build di core e degli sketch vengono salvate in questo percorso per " +"essere poi memorizzate nella cache e riutilizzate." -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "Non è possibile creare la directory dei dati %s" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "Non è possibile creare lo sketch" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "Non è possibile scaricare la libreria" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "Impossibile trovare le dipendenze per la piattaforma %s" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "Non è possibile aprire lo sketch" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "Non è possibile impostare valori multipli nella chiave %v" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "Impossibile aggiornare lo sketch" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "Non è possibile utilizzare insieme i seguenti flag: %s" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "Non è possibile salvare il file di configurazione: %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "Non è possibile scrivere il log di debug: %s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "Non è possibile creare la directory di build della cache." -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "Non è possibile creare la directory per la build" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" "Non è stato possibile creare la directory del file di configurazione: %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "Non è possibile creare il file di configurazione: %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "Non è possibile creare la cartella temporanea" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "Non è possibile creare il file temporaneo" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "Impossibile eliminare la chiave %[1]s: %[2]v" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "Non è possibile eseguire lo strumento di debug" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "Percorso assoluto non trovato: %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "Impossibile ottenere la chiave di configurazione %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "Non è possibile installare la piattaforma" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "Non è possibile installare il tool %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "Non è possibile effettuare il reset della porta: %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "Impossibile rimuovere la chiave di configurazione %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 msgid "Cannot upgrade platform" msgstr "Non è possibile aggiornare la piattaforma" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "Impossibile scrivere il file %[1]s: %[2]v" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "Categoria: %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "Controllare lo stato delle dipendenze per la libreria specificata." -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" +"Controlla se la combinazione fornita scheda/programmatore supporta il debug." + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "Il checksum è diverso da quello presente in package.json" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "Checksum:" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "Pulire le cache." -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" "Elenco separato da virgole degli URL aggiuntivi per il Boards Manager." -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." @@ -424,46 +423,46 @@ msgstr "" "Il comando continua a funzionare e stampa l'elenco delle schede collegate " "ogni volta che viene apportata una modifica." -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "Sketch compilato non trovato in %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "Compila gli sketch di Arduino." -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "Compilazione del core in corso..." -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "Compilazione delle librerie in corso..." -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "Compilazione della libreria \"%[1]s\"" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "Compilazione dello sketch in corso..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" "Il file di configurazione esiste già, usa --overwrite per sovrascrivere " "quello esistente." -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "File di configurazione scritto in: %s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "Opzioni di configurazione per %s" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." @@ -471,44 +470,44 @@ msgstr "" "Configura le impostazioni della porta di comunicazione. Il formato è " "<ID>=<value>[,<ID>=<value>]..." -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "Configurazione della piattaforma." -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "Strumento di configurazione." -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "Connesso" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "Connesso a %s! Premere CTRL-C per uscire." +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "Connessione in corso a %s. Premere CTRL-C per uscire." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "Core" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "Non è possibile connettersi via HTTP" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "Impossibile creare la directory dell'indice" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" "Non è stato possibile creare una cache profonda della build core: %[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "Non è possibile determinare la dimensione del programma" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "Impossibile ottenere la cartella di lavoro corrente: %v" @@ -516,7 +515,7 @@ msgstr "Impossibile ottenere la cartella di lavoro corrente: %v" msgid "Create a new Sketch" msgstr "Crea un nuovo Sketch" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "Crea e stampa una configurazione del profilo dalla build." @@ -524,7 +523,7 @@ msgstr "Crea e stampa una configurazione del profilo dalla build." msgid "Creates a zip file containing all sketch files." msgstr "Crea un file zip contenente tutti gli sketch." -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." @@ -532,7 +531,7 @@ msgstr "" "Crea o aggiorna il file di configurazione nella directory dei dati o nella " "directory personalizzata con le impostazioni di configurazione correnti." -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." @@ -540,94 +539,94 @@ msgstr "" "Attualmente, i profili di compilazione supportano solo le librerie " "disponibili tramite Arduino Library Manager." -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "Configurazione personalizzata del plugin IDE cortex-debug:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" +msgstr "Configurazione personalizzata di %s:" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "DEPRECATO" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "Deamon è ora in ascolto su %s:%s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "Eseguire il debug degli sketch di Arduino" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" "Eseguire il debug degli sketch di Arduino. (questo comando apre una sessione" " gdb interattiva)" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "Interprete di debug, ad esempio: %s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "Debugging non supportato per la scheda %s" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "Debugging supportato:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "Predefinito" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "FQBN predefinito impostato su" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "Porta predefinita impostata su" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "Programmatore predefinito impostato su" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "Elimina la cache delle Schede/Gestire di download delle Librerie" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" -"Elimina il contenuto della cartella directories.downloads, dove i file di " -"archivio sono organizzati durante l'installazione delle librerie e delle " -"schede. " +"Cancella il contenuto della cartella cache dei download, in cui i file di " +"archivio sono collocati durante l'installazione delle librerie e delle " +"piattaforme delle schede." #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" "Elimina una chiave delle impostazioni e tutte le sue chiavi secondarie." -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "Dipendenze: %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "Descrizione" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "Rilevamento delle librerie utilizzate in corso..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "Rileva e visualizza un elenco di schede collegate al computer." -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "Directory contenente i binari per il debug." -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "Directory contenente i file binari da caricare." @@ -644,269 +643,286 @@ msgid "Disable completion description for shells that support it" msgstr "" "Disabilita la descrizione del completamento per le shell che la supportano." -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "Disconnesso" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "Visualizza solo le chiamate gRPC fornite" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "Non installare le dipendenze." -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "Non sovrascrivere le librerie già installate." -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "Non sovrascrivere le piattaforme già installate." -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "" "Non eseguire il caricamento vero e proprio, ma solo le azioni di logout." -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "Non terminare il processo del demone se il processo principale muore" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" +"Non tentare di aggiornare le dipendenze delle librerie se sono già " +"installate." + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "Sto scaricando %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "Sto scaricando la firma dell'indice: %s" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "Sto scaricando l'indice: %s" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "Sto scaricando la libreria %s" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "Sto scaricando il tool mancante %s" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "Sto scaricando i pacchetti" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "Sto scaricando la piattaforma %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "Sto scaricando il tool %s" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "Scarica uno o più core e le corrispondenti dipendenze dei tool." -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "Scarica uno o più librerie, senza installarle." -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "Abilita il debug logging delle chiamate gRPC" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "Immettere il percorso del file zip" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "Immettere l'url del git delle librerie ospitate nei repository" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" "Si è verificato un errore durante l'aggiunta del file all'archivio dello " "sketch" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" "Si è verificato un errore durante l'archiviazione del core compilato " "(caching) in %[1]s: %[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "Errore durante l'archiviazione: %v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" "Si è verificato un errore durante il calcolo del percorso relativo del file" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "Si è verificato un errore durante la pulizia della cache: %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "" "Si è verificato un errore durante la conversione del percorso in assoluto:: " "%v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "Si è verificato un errore durante la copia del file di output %s" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" +"Si è verificato un errore durante la creazione della configurazione: %v" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "Si è verificato un errore durante la creazione dell'istanza: %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "" "Si è verificato un errore durante la creazione della cartella di output" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" "Si è verificato un errore durante la creazione dell'archivio dello sketch" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "Errore durante la creazione dello sketch: %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "Si è verificato un errore durante il rilevamento delle schede: %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "Si è verificato un errore durante lo scaricamento di %[1]s:%[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "Si è verificato un errore durante lo scaricamento di %s" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "Si è verificato un errore durante lo scaricamento dell'indice '%s'" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" "Si è verificato un errore durante lo scaricamento della firma dell'indice " "'%s'" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "Errore durante il download della libreria %s" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "Errore durante il download della piattaforma %s" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "Errore durante il download del tool %s" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "Errore durante il debug: %v" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "Si è verificato un errore durante il rilevamento FQBN: %v" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "Si è verificato un errore durante la codifica JSON dell'output: %v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "Errore durante il caricamento di: %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "Si è verificato un errore durante la codifica YAML dell'output: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" +msgstr "Si è verificato un errore durante il rilevamento della scheda" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "Si è verificato un errore durante la compilazione: %v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "Errore durante l'installazione: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "Si è verificato un errore durante la disintallazione: %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "Si è verificato un errore durante l'aggiornamento: %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "Si è verificato un errore durante l'estrazione di %s" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "" "Si è verificato un errore durante la ricerca degli artefatti di compilazione" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "" "Si è verificato un errore durante l'acquisizione delle informazioni di " "debug: %v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" "Si è verificato un errore nell'acquisizione del percorso assoluto " "dell'archivio degli sketch" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "Impossibile ottenere i dettagli della scheda: %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" "Si è verificato un errore durante l'acquisizione della directory corrente " "per il database di compilazione: %s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" +"Si è verificato un errore durante la rilevazione della porta predefinita da " +"`sketch.yaml`. Controllare se la cartella degli sketch è corretta oppure " +"utilizzare il flag --port:: %s" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" "Si è verificato un errore durante l'acquisizione delle informazioni della " "libreria %s" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "Impossibile ottenere le informazioni sulle librerie: %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "" "Si è verificato un errore durante l'acquisizione dei metadati della porta: " "%v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "" "Si è verificato un errore durante l'acquisizione dei dettagli delle " @@ -918,46 +934,46 @@ msgstr "" "Si è verificato un errore durante la ricezione dell'input da parte " "dell'utente" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "Si è verificato un errore durante l'inizializzazione dell'istanza: %v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "Errore durante l'installazione %s: %v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "Errore durante l'installazione della libreria Git: %v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" "Si è verificato un errore durante l'installazione della libreria zip: %v" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "Si è verificato un errore durante l'installazione della libreria %s" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" "Si è verificato un errore durante l'installazione della piattaforma %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "Errore durante l'installazione del tool %s" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" "Si è verificato un errore durante la visualizzazione dell'elenco delle " "schede: %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "Errore nell'elenco delle librerie: %v" @@ -967,50 +983,46 @@ msgstr "" "Si è verificato un errore durante la visualizzazione dell'elenco delle " "piattaforme: %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" "Si è verificato un errore durante il caricamento della piattaforma hardware" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "Si è verificato un errore durante il caricamento dell'indice %s" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "Si è verificato un errore durante l'apertura di %s" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "" "Si è verificato un errore durante l'apertura del file di log di debug: %s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "" "Si è verificato un errore durante l'apertura del codice sorgente che " "sovrascrive i file: %v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "" "Si è verificato un errore durante il parsing del flag --show-properties: %v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "" "Si è verificato un errore durante la lettura della directory di compilazione" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "Errore durante la lettura del file di configurazione: %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "Si è verificato un errore durante la lettura dei file degli sketch" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" "Si è verificato un errore durante la risoluzione delle dipendenze di %[1]s: " @@ -1021,175 +1033,190 @@ msgid "Error retrieving core list: %v" msgstr "" "Si è verificato un errore durante il recupero dell'elenco dei core: %v " -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "Si è verificato un errore durante il ripristino delle modifiche: %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" "Si è verificato un errore durante il salvataggio dell'indice scaricato" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" "Si è verificato un errore durante il salvataggio della firma dell'indice " "scaricato" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "Si è verificato un errore durante la ricerca delle schede: %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "Si è verificato un errore durante la ricerca delle librerie: %v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "Si è verificato un errore durante la ricerca delle piattaforme: %v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" "Si è verificato un errore durante la serializzazione del database di " "compilazione: %s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "Errore di impostazione della modalità raw: %s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "Si è verificato un errore durante l'impostazione del valore: %v" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "Si è verificato un errore durante l'avvio della rilevazione: %v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "Si è verificato un errore durante la disinstallazione di %[1]s: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" "Si è verificato un errore durante l'aggiornamento dell'indice della " "libreria: %v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "Si è verificato un errore durante l'aggiornamento delle librerie" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "" "Si è verificato un errore durante l'aggiornamento della piattaforma: %s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "Si è verificato un errore durante la verifica della firma" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" "Si è verificato un errore durante il rilevamento delle librerie incluse da " "%[1]s" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "" "Si è verificato un errore durante la determinazione delle dimensioni dello " "sketch: %s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" "Si è verificato un errore durante la scrittura del database di compilazione:" " %s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "Si è verificato un errore durante la scrittura del file: %v" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "Errore: la descrizione del comando non è supportata da %v" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "Errore: il codice sorgente non è valido e sovrascrive i dati: %v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "Evento" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "Esempi della libreria %s" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "Esempi:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "Eseguibile per il debug" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" "Ci si aspettava che lo sketch compilato fosse nella directory %s, invece è " "un file" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "Impossibile cancellare il chip" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "Programmazione non riuscita" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "Impossibile masterizzare il bootloader" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "Impossibile creare la directory dei dati" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "Impossibile creare la directory degli scaricamenti" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" "Impossibile ascoltare sulla porta TCP: %[1]s. %[2]s non è una porta valida." -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" "Impossibile ascoltare sulla porta TCP: %[1]s. %[2]s è un nome sconosciuto." -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" "Impossibile ascoltare sulla porta TCP: %[1]s. Errore imprevisto: %[2]v" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "Impossibile ascoltare sulla porta TCP: %s. L'indirizzo è già in uso." -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "Caricamento non riuscito" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "File:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" @@ -1197,26 +1224,26 @@ msgstr "" "La crittografia/firma del firmware richiede la definizione di tutte le " "seguenti proprietà: %s" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "Il primo messaggio deve contenere la richiesta di debug, non i dati." -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "Il flag %[1]s è obbligatorio se usato insieme a: %[2]s" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "Flag:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" "Forza l'esecuzione degli script post-install (se la CLI non è in esecuzione " "interattiva)." -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." @@ -1224,29 +1251,29 @@ msgstr "" "Forza l'esecuzione degli script pre-uninstall (se la CLI non viene eseguita " "in modo interattivo)." -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" "Forza il salto degli script post-install (se la CLI non è in esecuzione " "interattiva)." -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" "Forza il salto degli script pre-uninstall (se la CLI viene eseguita in modo " "interattivo)." -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "Sono state trovate %d piattaforme corrispondenti \"%s\": %s" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "Fully Qualified Board Name, ad esempio: arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "Il server GDB '%s' non è supportato" @@ -1263,15 +1290,19 @@ msgstr "Genera gli script di completamento" msgid "Generates completion scripts for various shells" msgstr "Genera gli script di completamento per varie shell" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "Sto generando i prototipi di funzione..." -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "Ottiene il valore di una chiave di impostazione." + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "Flag globali:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1280,29 +1311,29 @@ msgstr "" "lasciando altri %[4]s byte liberi per le variabili locali. Il massimo è " "%[2]s byte." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Le variabili globali usano %[1]s byte di memoria dinamica." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "Proprietà identificative:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "Se impostato, i binari saranno esportati nella cartella degli sketch." -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." @@ -1310,169 +1341,170 @@ msgstr "" "Se impostato, restituisce tutti i core installabili e installati, compresi " "quelli installati manualmente." -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" "Include le librerie integrate (dalle piattaforme e dall'IDE) nell'elenco." -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "Include %s directory nell'archivio." -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "Installare le librerie nella cartella IDE-Builtin" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Installato" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "Installato %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "Installazione %s" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "Sto installando la libreria %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "Sto installando la piattaforma %s" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "Sto installando il tool %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "Installa uno o più core e le corrispondenti dipendenze dei tool." -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "Installa nel sistema una o più librerie specificate." -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "Errore interno alla cache" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "La proprietà '%[1]s' non è valida: %[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" -"Chiamata non valida: dovrebbe mostrare la guida, ma è disponibile solo in " -"modalità testo." - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "FQBN non è valido" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "Indirizzo TCP non valido: manca la porta" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "URL non è valido" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "L' URL aggiuntivo non è valido: %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -"L' archivio non è valido: il file %{1} non è presente nell'archivio %{2}s" +"Archivio non valido: il file %[1]s non è stato trovato nell'archivio %[2]s" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "L' argomento passato non è valido: %v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "Proprietà di compilazione non valide" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "La dimensione dei dati della regexp non è valida: %s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "La dimensione della eeprom della regexp non è valida: %s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "URL non valido: %s" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "Istanza non è valida" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "Oggetto invalido %s" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "Libreria non è valida" -#: configuration/network.go:63 +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "Livello di log non valido: %s" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "Configurazione di rete non valida: %s" + +#: internal/cli/configuration/network.go:83 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "network.proxy '%[1]s' non è valido: %[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "Opzione non valida per --log-level: %s" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "Formato di output non valido: %s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "Indice del pacchetto non valido in %s" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "Il parametro %s non è valido: versione non consentita" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "Il valore pid non è valido: '%s'" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "Il profilo non è valido" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "Scrittura non valida in platform.txt" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "La dimensione della regexp non è valida: %s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "Timeout non valido: %s" +#: main.go:86 +msgid "Invalid value in configuration" +msgstr "Nella configurazione c'è un valore non valido" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "Versione non è valida" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "Il valore di vid non è valido: '%s'" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." @@ -1480,74 +1512,75 @@ msgstr "" "Produce solo il database di compilazione, senza compilare. Tutti i comandi " "di compilazione vengono saltati, ad eccezione dei pre* hooks." -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "LIBNAME" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "LIBRERIA" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "LIBRARY_NAME" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "Ultimo" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "La libreria %[1]s è stata dichiarata precompilata:" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" "La libreria %[1]s è già installata, ma con una versione differente: %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "La libreria %s è già alla versione più recente" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "La libreria %s non è installata" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "Impossibile trovare la libreria %s" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "Impossibile trovare la libreria '%s'" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" "La libreria non può utilizzare entramble le cartelle '%[1]s' e '%[2]s'. " "Doppio controllo in '%[3]s'." -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "Impossibile installare la libreria" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "La libreria è stata installata" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "Licenza: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "Collegare tutto insieme..." -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" @@ -1555,15 +1588,15 @@ msgstr "" "Elenca tutte le schede in cui è installata la piattaforma di supporto. È possibile cercare\n" "una scheda specifica, se si specifica il nome della scheda" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "Elenca tutte le schede conosciute e il corrispondente FQBN." -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "Lista delle schede connesse." -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." @@ -1571,7 +1604,7 @@ msgstr "" "Elenco delle opzioni della scheda separate da virgole. Oppure può essere " "usato più volte per più opzioni." -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." @@ -1579,15 +1612,15 @@ msgstr "" "Elenco delle proprietà di costruzione personalizzate separate da virgole. " "Oppure può essere usato più volte per più proprietà." -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "Lista delle libreria con update disponibili." -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "Lista delle piattaforme con update disponibili." -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "Lista di tutte le schede connesse." @@ -1595,57 +1628,65 @@ msgstr "Lista di tutte le schede connesse." msgid "Lists cores and libraries that can be upgraded" msgstr "Elenca i core e le librerie che possono essere aggiornati" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "Sto caricando il file dell'indice: %v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "Posizione" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "" "Poca memoria disponibile, potrebbero presentarsi problemi di stabilità" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "Manutentore: %s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" +"Numero massimo di compilazioni parallele. Se impostato a 0, verrà utilizzato" +" il numero disponibile di core della CPU." + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" "Tempo massimo di attesa per la rilevazione della porta, ad es: 30s, 1m" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" "I messaggi con questo livello o superiore saranno registrati. I livelli " "validi sono: %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "Manca '%[1]s' nella libreria %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "FQBN mancante (Fully Qualified Board Name)" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "Porta mancante" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "Porta di comunicazione non trovata" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "Manca il protocollo della porta" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "Manca il programmatore" @@ -1653,61 +1694,61 @@ msgstr "Manca il programmatore" msgid "Missing required upload field: %s" msgstr "Manca un campo obbligatorio del caricamento: %s" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "Manca la dimensione della regexp" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "Manca il percorso dello sketch" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "Impossibile trovare il monitor '%s'" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "Impostazioni sulla porta del monitor:" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Più di una libreria trovata per \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "Nome" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "Nome: \"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "Nuova porta di caricamento: %[1]s (%[2]s)" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "Nessuna scheda trovata." -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "Nessuna porta predefinita o FQBN impostato" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "Nessuna porta predefinita, FQBN o programmatore impostato" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "Nessuna libreria trovata." -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "Nessuna libreria installata." -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "Non ci sono librerie corrispondenti alla tua ricerca." -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1715,54 +1756,54 @@ msgstr "" "Non ci sono biblioteche corrispondenti alla tua ricerca.\n" "Intendevi dire...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "Non sono disponibili aggiornamenti per le librerie." -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "Nessun monitor disponibile per il protocollo della porta %s" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "Non sono state trovate piattaforme o librerie non aggiornate." -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "Nessuna piattaforma installata." -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "Non ci sono piattaforme corrispondenti alla tua ricerca." -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "" "Non è stata trovata alcuna porta di upload, come alternativa verrà " "utilizzata %s" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "Non è stata trovata una soluzione valida per le dipendenze" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "Memoria esaurita; guarda %[1]s per consigli su come ridurne l'utilizzo." -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "Non usata: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "Sistema Operativo:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "Scheda Arduino ufficiale:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." @@ -1770,43 +1811,43 @@ msgstr "" "Omette i dettagli della libreria per tutte le versioni tranne la più recente" " (produce un output JSON più compatto)." -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "Apre una porta di comunicazione con una scheda." -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "Opzione:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" "Facoltativo, può essere: %s. Utilizzato per indicare a gcc quale livello di " "warning utilizzare (flag -W)." -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" "Facoltativo, ripulisce la cartella di build e non usa nessuna build in " "cache." -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" "Facoltativo, ottimizza l'output di compilazione per il debug, piuttosto che " "per il rilascio." -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "Facoltativo, sopprime quasi tutti gli output." -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "Facoltativo, attiva la modalità verbosa." -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." @@ -1814,7 +1855,7 @@ msgstr "" "Facoltativo. Percorso di un file .json che contiene una serie di " "sostituzioni del codice sorgente dello sketch." -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." @@ -1822,52 +1863,69 @@ msgstr "" "Sovrascrive una proprietà di build con un valore personalizzato. Può essere " "usato più volte per più proprietà." -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Sovrascrive una proprietà di debug con un valore personalizzato. Può essere " +"usato più volte per più proprietà." + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Sovrascrive una proprietà di caricamento con un valore personalizzato. Può " +"essere usato più volte per più proprietà." + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "Sovrascrivi la configurazione corrente del file." -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "Sovrascrivi un archivio già esistente" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "Sovrascrivi il file sketch .ino esistente" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "PACKAGER" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "URL pacchetto:" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "Manutentore del pacchetto: " -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "Nome pacchetto:" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "Aiuto in linea del pacchetto:" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "Website pacchetto:" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "Paragrafo: %s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "Percorso" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." @@ -1875,7 +1933,7 @@ msgstr "" "Percorso di un gruppo di librerie. Può essere usato più volte o le voci " "possono essere separate da virgole." -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." @@ -1883,11 +1941,11 @@ msgstr "" "Percorso della cartella principale di una singola libreria. Può essere usato" " più volte o le voci possono essere separate da virgole." -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "Percorso del file in cui verranno scritti i log." -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." @@ -1895,19 +1953,20 @@ msgstr "" "Percorso in cui salvare i file compilati. Se omesso, verrà creata una " "directory nel percorso temporaneo predefinito del tuo sistema operativo." -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "Esecuzione di un touch reset a 1200-bps sulla porta seriale %s" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "La piattaforma %s è già installata" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "La piattaforma %s è installata" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1915,55 +1974,55 @@ msgstr "" "La piattaforma %s non è stata trovata in nessun indice conosciuto.\n" "Forse è necessario aggiungere un URL di 3terze parti?" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "La piattaforma %s è stata disinstallata" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "La piattaforma '%s' è già aggiornata all'ultima versione" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "Impossibile trovare la piattaforma '%s'" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "ID piattaforma" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "L' ID della piattaforma non è esatto" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "URL piattaforma:" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "Architettura della piattaforma:" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "Categoria della piattaforma:" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "Checksum della piattaforma:" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "Nome del file della piattaforma:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "Nome piattaforma:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "Dimensione della piattaforma (bytes):" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" @@ -1971,7 +2030,7 @@ msgstr "" "Specificare un FQBN. Sono state rilevate più schede sulla porta %[1]s con " "protocollo %[2]s" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" @@ -1979,34 +2038,39 @@ msgstr "" "Specificare un FQBN. La scheda sulla porta %[1]s con protocollo %[2]s non " "può essere identificata" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "Porta" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "Porta chiusa: %v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "Errore di monitoraggio della porta" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "Impossibile trovare la libreria precompilata in \"%[1]s\"" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "Visualizza i dettagli di una scheda." -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "Stampa il codice preelaborato su stdout invece di compilarlo." -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "Stampa i log sull'output standard." +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "Stampa l'output in formato JSON." + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "Stampa la configurazione attuale" @@ -2015,180 +2079,265 @@ msgstr "Stampa la configurazione attuale" msgid "Prints the current configuration." msgstr "Stampa la configurazione attuale." -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "Impossibile trovare il profilo '%s'" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "Impossibile trovare il programmatore '%s'" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "Nome del programmatore" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "Programmatore da utilizzare, ad esempio: atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "Programmatori:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "La proprietà '%s' non è definita" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "Protocollo" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "La dotazione comprende: %s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "Rimuove uno o più valori da un'impostazione." -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "Sostituire %[1]s con %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "Sto sostituendo la piattaforma %[1]s con %[2]s" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "Tool richiesto:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "Avvio come demone sulla porta: %s" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "" "Avvio in modalità silenziosa, mostra solo l'ingresso e l'uscita del monitor." -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "" -"Avviato come demone, l'inizializzazione dei core e delle librerie viene " -"eseguita una sola volta." +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "Avvia la CLI di Arduino come demone gRPC." -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "Esecuzione della normale compilazione del core..." -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "Sto avviando lo script pre_uninstall." -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "TERMINE_DI_RICERCA" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "Path del file SVD" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "Salva gli artefatti di compilazione in questa directory." -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" "Cerca una scheda nel gestore delle schede usando le parole chiave " "specificate." -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "Cerca una scheda nel gestore delle schede." -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" "Cerca un core nel gestore delle schede, usando le parole chiave specificate." -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "Cerca un core nel gestore delle schede." -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "" -"Ricerca di uno o più dati di librerie (ricerca senza distinzione tra " -"maiuscole e minuscole)." - #: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "Cerca i dati di una o più librerie." - -#: internal/cli/lib/search.go:157 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"Cerca le librerie che corrispondono a zero o più termini di ricerca.\n" +"\n" +"Tutte le ricerche vengono eseguite senza distinzione tra maiuscole e minuscole. Le query contenenti\n" +"termini di ricerca multipli restituiranno solo le librerie che corrispondono a tutti i termini.\n" +"\n" +"I termini di ricerca, che non corrispondono alla sintassi QV descritta di seguito, sono termini di ricerca di base e corrispondono alle librerie che includono il termine in uno dei seguenti campi:\n" +"- Autore\n" +"- Nome\n" +"- Paragrafo\n" +"- Fornisce\n" +"- Frase\n" +"\n" +"Una sintassi speciale, chiamata qualifier-value (QV), indica che un termine di ricerca deve\n" +"essere confrontato con un solo campo di ogni voce dell'indice della libreria. Questa sintassi \n" +"utilizza il nome di un campo dell'indice (senza distinzione tra maiuscole e minuscole), un segno \n" +"di uguale (=) o i due punti (:) e un valore, ad esempio 'name=ArduinoJson' o 'provides:tinyusb.h'.\n" +"\n" +"I termini di ricerca QV, che utilizzano un separatore di due punti, corrisponderanno a tutte le librerie con il valore in qualsiasi punto del campo nominato mentre, i termini di ricerca QV che utilizzano un separatore di uguale, corrisponderanno solo alle librerie con il valore esatto fornito nel campo nominato.\n" +"\n" +"I termini di ricerca QV possono includere spazi incorporati utilizzando caratteri con virgolette doppie (\") intorno al valore o all'intero termine, ad esempio \"categoria=\"Elaborazione dati\"\" e \"categoria=elaborazione dati\" sono equivalenti. Un termine QV può includere un carattere letterale con doppio apice preceduto dal carattere backslash (\\).\n" +"\n" +"NOTA: i termini di ricerca QV, che utilizzano caratteri con virgolette doppie o backslash passati come argomenti della riga di comando, possono richiedere l'uso di virgolette o di escape, per evitare che la shell interpreti erroneamente tali caratteri.\n" +"\n" +"- Architetture\n" +"- Categoria\n" +"- Dipendenze\n" +"- Licenza\n" +"- Manutentore\n" +"- Tipi\n" +"- Versione\n" +"- Sito web\n" +"\t\t" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "Cerca una o più biblioteche che corrispondono ad una ricerca." + +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "Frase: %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "Path del server" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "Il server ha risposto con: %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "Tipo di server" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "Imposta un valore per un campo richiesto dal caricamento." -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "Imposta il terminale in modalità raw (non bufferizzata)." -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "Imposta un valore di regolazione." -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." msgstr "" -"Imposta i valori predefiniti per porta e FQBN. Se non viene specificata " -"alcuna porta o FQBN, vengono visualizzati la porta e l'FQBN predefiniti " -"correnti." +"Imposta la directory predefinita dei dati (Arduino CLI cercherà il file di " +"configurazione in questa directory)." -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" +"Imposta i valori predefiniti per porta e FQBN. Se non vengono specificati " +"porta, FQBN o programmatore, vengono visualizzati la porta, l'FQBN ed il " +"programmatore predefiniti." + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" +"Imposta la dimensione massima del messaggio in byte che il demone può " +"ricevere" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "Imposta dove salvare il file di configurazione." -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "Impostazioni" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "La chiave delle impostazioni non esiste" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" +"Dovrebbe mostrare un messaggio di aiuto, ma è disponibile solo in modalità " +"TESTO." -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "Mostra tutte le versioni del core disponibili." -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "Mostra tutte le impostazioni della porta di comunicazione." -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" "Mostra anche le schede contrassegnate come 'nascoste' nella piattaforma." -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." @@ -2197,11 +2346,11 @@ msgstr "" "show-properties=unexpanded\" se si desidera che siano esattamente come sono " "definite." -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "Mostra tutti i dettagli delle schede" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." @@ -2209,15 +2358,15 @@ msgstr "" "Visualizza informazioni dettagliate riguardanti una scheda, in particolare " "se ci sono opzioni che possono essere specificate tramite FQBN." -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "Mostra solo i nomi delle librerie." -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "Mostra l'elenco dei programmatori disponibili" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2228,11 +2377,11 @@ msgid "Show outdated cores and libraries after index update" msgstr "" "Mostra i core e le librerie non aggiornate dopo l'aggiornamento dell'indice" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "Mostra la lista delle librerie installate." -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2246,15 +2395,15 @@ msgstr "" "libreria. Per impostazione predefinita, le librerie fornite come built-in da piattaforme/core non\n" "sono elencate, ma possono essere elencate aggiungendo il flag --all." -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "Mostra l'elenco delle piattaforme installate." -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "Mostra l'elenco degli esempi delle librerie." -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." @@ -2262,21 +2411,21 @@ msgstr "" "Mostra l'elenco degli esempi delle librerie. È possibile indicare un nome " "come argomento per cercare una libreria specifica." -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" "Mostra il numero di versione di Arduino CLI installato sul tuo sistema." -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "Mostra il numero di versione di Arduino CLI." -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "Dimensione (bytes):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" @@ -2284,21 +2433,21 @@ msgstr "" "Lo sketch non si trova nel percorso di compilazione. Specificare un percorso" " di compilazione diverso" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "Sketch è stato creato in: %s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "Profilo dello sketch da utilizzare" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" "Sketch troppo grande; guarda %[1]s per consigli su come ridurne la " "dimensione" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2306,7 +2455,7 @@ msgstr "" "Lo sketch usa %[1]s byte (%[3]s%%) dello spazio disponibile per i programmi." " Il massimo è %[2]s byte." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" @@ -2314,74 +2463,95 @@ msgstr "" "Gli sketch con estensione .pde sono deprecati, rinominare i seguenti file in" " .ino:" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "Salta il linking dell'eseguibile finale." -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" "Salto il touch reset a 1200-bps: nessuna porta seriale è stata selezionata!" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "Salta la creazione dell'archivio di: %[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "Salta la compilazione di: %[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" "Salta il rilevamento delle dipendenze della libreria precompilata %[1]s" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "Salta la configurazione della piattaforma." -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "Salto lo script pre_uninstall." -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "Salta la configurazione dello strumento." -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "Salta: %[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "Non è stato possibile aggiornare alcuni indici." -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" "Alcuni aggiornamenti non sono andati a buon fine, controlla l'output per i " "dettagli." -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOUCH: si è verificato un errore durante il reset: %s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:78 msgid "The TCP port the daemon will listen to" msgstr "La porta TCP su cui il demone si metterà in ascolto" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "Il formato di output del comando può essere: %s" + +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "" "Il file di configurazione personalizzato (se non specificato, verrà " "utilizzato quello predefinito)." -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" +"Il flag --build-cache-path è stato deprecato. Utilizzare solo --build-path " +"oppure configurare il percorso della build cache nelle impostazioni della " +"CLI di Arduino." + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "Il flag --debug-file deve essere usato con --debug." -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "La configurazione fornita scheda/programmatore NON supporta il debug." + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "La configurazione fornita scheda/programmatore supporta il debug." + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "L'istanza non è più valida e deve essere reinizializzata." + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2389,7 +2559,7 @@ msgstr "" "La chiave '%[1]v' non è un elenco di elementi, non può essere aggiunta.\n" "Forse si può usare '%[2]s'?" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2397,11 +2567,11 @@ msgstr "" "La chiave '%[1]v' non è un elenco di elementi, non può essere rimossa.\n" "Forse si può usare '%[2]s'?" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "La libreria %s richiede altre installazioni:" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." @@ -2410,7 +2580,7 @@ msgstr "" "crittografare un binario durante il processo di compilazione. Utilizzata " "solo dalle piattaforme che la supportano." -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." @@ -2419,11 +2589,11 @@ msgstr "" " durante il processo di compilazione. Utilizzata solo dalle piattaforme che " "la supportano." -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "Il formato di output dei log può essere: %s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." @@ -2432,11 +2602,11 @@ msgstr "" "firmare e crittografare un binario. Utilizzato solo dalle piattaforme che lo" " supportano." -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "La piattaforma non supporta '%[1]s' per le librerie precompilate." -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2456,93 +2626,94 @@ msgstr "" "Questo comando mostra un elenco di core e/o librerie installate\n" "che possono essere aggiornate. Se non è necessario aggiornare nulla, l'output è vuoto." -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "Timestamp di ogni linea in entrata." -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "Il tool %s è già installato" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "Il tool %s è disinstallato" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "La toolchain '%s' non è supportata" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "Il percorso della toolchain" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "Il prefisso della toolchain" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "Il tipo della toolchain" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "Prova ad eseguire %s" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "Attiva la modalità verbosa." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "Tipo" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "Tipi: %s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "URL:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" "Non è possibile memorizzare nella cache il core compilato, riferisci ai " "manutentori di %[1]s di seguire le istruzioni %[2]s" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "Impossibile ottenere la cartella documenti: %v" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "Impossibile ottenere la cartella dati dell'app locale: %v" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "Impossibile ottenere la home directory dell'utente: %v" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "Impossibile aprire il file per il logging: %s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "Non è stato possibile analizzare l'URL" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "Disinstallazione di %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "Disinstallazione di %s, il tool non è più necessario." -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." @@ -2550,15 +2721,15 @@ msgstr "" "Disinstalla uno o più core e le corrispondenti dipendenze dei tool se non " "vengono più utilizzati." -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "Disinstalla una o più librerie." -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "Sconosciuto" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "FQBN sconosciuto" @@ -2571,23 +2742,23 @@ msgid "Updates the index of cores and libraries to the latest versions." msgstr "" "Aggiorna l'indice dei core e delle librerie alle versioni più recenti." -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "Aggiorna l'indice dei core alla versione più recente." -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "Aggiorna l'indice dei core." -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "Aggiorna l'indice delle librerie alla versione più recente." -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "Aggiorna l'indice delle librerie." -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "L'aggiornamento non accetta parametri con la versione" @@ -2599,58 +2770,58 @@ msgstr "Aggiorna i core e le librerie installate alla versione più recente." msgid "Upgrades installed cores and libraries." msgstr "Aggiorna i core e le librerie installate." -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "Aggiorna le librerie installate." -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "Aggiorna una o tutte le piattaforme alla versione più recente." -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "Carica gli sketch di Arduino." -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" "Carica gli sketch di Arduino. Questo NON compila lo sketch prima del " "caricamento." -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "Indirizzo della porta di caricamento, ad esempio: COM3 o /dev/ttyACM2" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "Porta di caricamento trovata su %s" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "Protocollo della porta di caricamento, ad esempio: seriale" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "Carica il binario dopo la compilazione." -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" "Carica il bootloader sulla scheda utilizzando un programmatore esterno." -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "Carica il bootloader." -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" "Il caricamento sulla scheda specificata tramite il protocollo %s richiede le" " seguenti informazioni:" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2658,106 +2829,120 @@ msgstr "" "Gli URL non possono contenere virgole. Separare con uno spazio gli url multipli esportati come env var:\n" "%s" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "Uso: " -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "Usa %s per ulteriori informazioni su un comando." -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "Libreria utilizzata" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "Piattaforma utilizzata" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Usata: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "Utilizzo della scheda '%[1]s' dalla piattaforma nella cartella: %[2]s" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" "Utilizzo delle dipendenze delle librerie nella cache per i file: %[1]s" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "Utilizzo del core '%[1]s' dalla piattaforma nella cartella: %[2]s" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" +"Utilizzo della configurazione predefinita del monitor della scheda: %s" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" +"Si sta utilizzando una configurazione generica del monitor.\n" +"ATTENZIONE: per funzionare correttamente, la scheda potrebbe richiedere impostazioni diverse!\n" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "Uso la libreria %[1]s alla versione %[2]s nella cartella: %[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "Uso la libreria %[1]s nella cartella: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "Utilizzo del core precompilato: %[1]s" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "Utilizzo della libreria precompilata in %[1]s" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "Uso il file precedentemente compilato: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "VERSIONE" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "VERSION_NUMBER" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "Valori" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "Verifica dei binari dopo il caricamento." -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "Versione" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "Versioni: %s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "ATTENZIONE: non è possibile configurare la piattaforma: %s" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "ATTENZIONE non è possibile configurare lo strumento: %s" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "AVVISO non è possibile eseguire lo script pre_uninstall: %s" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" "ATTENZIONE: lo sketch è compilato utilizzando una o più librerie " "personalizzate." -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2766,26 +2951,26 @@ msgstr "" "%[2]s e potrebbe non essere compatibile con la tua scheda che utilizza " "l'architettura %[3]s" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "In attesa della porta di caricamento..." -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" "Attenzione: la scheda %[1]s non definisce una preferenza per %[2]s. " "Autoimpostato su: %[3]s" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "Sito web: %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "Scrive la configurazione corrente in un file di configurazione." -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." @@ -2793,26 +2978,22 @@ msgstr "" "Scrive la configurazione corrente nel file di configurazione nella directory" " dei dati." -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "Scrittura del file di configurazione: %v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" "Non puoi utilizzare il flag %s durante la compilazione con un profilo." -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "L'hash dell'archivio è diverso dall'hash dell'indice" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" "l'archivio non è valido: sono stati trovati più file nel livello superiore " "del file zip" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "" "l'archivio non è valido: nessun file trovato nella cartella principale del " @@ -2822,382 +3003,353 @@ msgstr "" msgid "archivePath" msgstr "percorso dell'archivio" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "Manca il pattern arduino-preprocessor" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "rileva automaticamente l'artefatto di compilazione: %s" - -#: internal/cli/feedback/stdio.go:35 +#: internal/cli/feedback/stdio.go:37 msgid "available only in text format" msgstr "disponibile solo in formato testo" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "ricerca di base per \"audio\"" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "ricerca di base per \"esp32\" e \"display\" limitata al manutentore ufficiale" + +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "file binario non trovato in %s" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "la scheda %s non è stata trovata" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "nomescheda" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "la directory delle librerie integrate non è configurata" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "Chiamata a %[1]s: %[2]w" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "Impossibile trovare l'ultima versione di %s" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "Impossibile trovare l'ultima versione del tool %s" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "Impossibile trovare il file principale dello sketch in %s" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "Non riesco a trovare un pattern per il rilevamento con id %s" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "Impossibile recuperare il flusso di errori standard: %s" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "Impossibile recuperare il flusso di output standard: %s" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "candidati" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "Impossibile eseguire il tool di caricamento: %s" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "Sto controllando l'integrità dell'archivio locale" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "pulizia del percorso di compilazione" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "comando" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "il comando '%[1]s' non è andato a buon fine: %[2]s" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "il comando non è andato a buon fine: %s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "comunicazione fuori sincronia, atteso '%[1]s', ricevuto '%[2]s'" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "calcolo dell'hash: %s" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "La chiave della configurazione %s contiene un carattere non valido" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "Il valore della configurazione %s contiene un carattere non valido" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "copia della libreria nella directory di destinazione:" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "impossibile trovare un artefatto di compilazione valido" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "impossibile sovrascrivere" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "Impossibile rimuovere la vecchia libreria" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "non è stato possibile aggiornare il file del progetto" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "creazione in corso della cartella cache del core: %s" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "creazione di installed.json in %[1]s: %[2]s" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "creazione di una directory temporanea per l'estrazione: %s" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "la sezione dati supera lo spazio disponibile nella scheda" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "la dipendenza '%s' non è disponibile" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "la destinazione esiste già" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "" "La directory di destinazione %s esiste già, non è possibile installare" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "il percorse della directory è già esistente" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "la directory non esiste: %s" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "il processo di rilevamento %[1]s non è stato avviato: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "sono stati trovati %[1]s processi non avviati" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "rilevamento %s non è stato trovato" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "il rilevamento %s non è installato" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "il rilascio del rilevamento non è stato trovato: %s" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "scarica una versione specifica (in questo caso la 1.6.9)." -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "scarica l'ultima versione del core SAMD di Arduino." -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "scaricato" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "sto scaricando il tool %[1]s: %[2]s" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "identificativo della scheda vuoto" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" "si è verificato un errore durante il caricamento del file di progetto dello " "sketch:" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "si è verificato un errore durante l'apertura di %s" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "valore di parsing dell'errore: %v" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "si è verificato un errore durante il parsing dei vincoli di versione" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" "si è verificato un errore durante l'elaborazione della risposta del server" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "" "si è verificato un errore durante l'interrogazione di Arduino Cloud Api" -#: arduino/resources/install.go:67 +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" +msgstr "estrazione in corso dell'archivio" + +#: internal/arduino/resources/install.go:77 msgid "extracting archive: %s" msgstr "estrazione dell'archivio: %s" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "estrazione dell'archivio: %w" - -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "Impossibile calcolare l'hash del file \"%s\"" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "Impossibile inizializzare il client http" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "" "La dimensione dell'archivio recuperato differisce dalla dimensione " "specificata nell'indice" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "i file dell'archivio devono essere collocati in una sottodirectory" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "sto cercando il percorso assoluto di %s" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "flag" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "il seguente collegamento simbolico %s" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "per una specifica versione." -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "per la versione più recente." -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "per la specifica versione." -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "sto generando installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "il campo di fqbn %s contiene un carattere non valido" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "generazione in corso di installation.id" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "sto generando installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "generazione in corso di installation.secret" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "sto recuperando le informazioni sui file dell'archivio: %s" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "sto recuperando le informazioni sull'archivio: %s" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "sto recuperando il percorso dell'archivio: %s" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "sto recuperando le proprietà di costruzione della scheda %[1]s: %[2]s" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" "sto recuperando le dipendenze del rilevamento per la piattaforma %[1]s: " "%[2]s" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" "sto recuperando le dipendenze del monitor per la piattaforma %[1]s: %[2]s" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "sto recuperando la directory padre di %[1]s: %[2]s" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" "sto recuperando le dipendenze dei tool per la piattaforma %[1]s: %[2]s" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "La directory di installazione non è stata impostata" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "Sto installando il tool %[1]s: %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "Sto installando la piattaforma %[1]s: %[2]s" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" "il terminale interattivo non è supportato per il formato dell'output '%s'" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "la direttiva '%s' non è valida" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "il messaggio 'add' non è valido: porta mancante" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "il messaggio 'remove' non è valido: porta mancante" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "il formato del checksum non è valido: %s" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "l'opzione di configurazione non è valida: %s" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "l'architettura del core vuota non è valida '%s'" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "l'argomento del core vuoto non è valido" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "il nome del core vuoto non è valido '%s'" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "il riferimento al core vuoto non è valido '%s'" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "la versione del core vuota non è valida: '%s'" @@ -3209,87 +3361,84 @@ msgstr "il nome della libreria vuoto non è valido" msgid "invalid empty library version: %s" msgstr "la versione della libreria vuota non è valida: %s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "è stata trovata un'opzione vuota non valida" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "url git non è valido" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "hash non valido '%[1]s': %[2]s" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "elemento non valido %s" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "la direttiva della libreria non è valida:" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "il layout della libreria non è valido: %s" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "la posizione della libreria non è valida: %s" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "libreria non valida: non è stato trovato alcun file di intestazione" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "l'opzione '%s' non è valida" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "l'opzione '%s' non è valida." -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -"il percorso della creazione della cartella di configurazione non è valido: " -"%[1]s error: %[2]w" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "" -"il percorso per la scrittura del file di inventario non è valido: %[1]s " -"error: %[2]w" +"path non valido per la creazione della cartella di configurazione: errore " +"%[1]s" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" -msgstr "la dimensione dell'archivio della piattaforma non è valida: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "path non valido per la scrittura del file di inventario: errore %[1]s" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "l'identificatore della piattaforma non è valido" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "URL dell'indice della piattaforma non è valido:" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "il riferimento al monitor collegabile non è valido: %s" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "il valore di configurazione della porta non è valido per %s: %s" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" -msgstr "la configurazione della porta non è valida: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" +msgstr "configurazione della porta non valida: %s=%s" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "scrittura non valida '%[1]s': %[2]s" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " @@ -3299,150 +3448,161 @@ msgstr "" "alfanumerico o \"_\", quelli successivi possono contenere anche \"-\" e " "\".\". L'ultimo non può essere \".\"." -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "il valore '%[1]s' non è valido per l'opzione '%[2]s'" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "la directory della versione non è valida %s" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "la versione non è valida:" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "la chiave non è stata trovata nelle impostazioni" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "parole chiave" -#: arduino/libraries/librariesmanager/install.go:130 +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "librerie create da Daniel Garcia" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "librerie create solo da Adafruit con \"gfx\" nel loro nome" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "librerie che dipendono almeno da \"IRremote\"" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "librerie che dipendono solo da \"IRremote\"" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "librerie con \"buzzer\" nel campo nome" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "librerie con un nome che corrisponde esattamente a \"pcf8523\"" + +#: internal/arduino/libraries/librariesmanager/install.go:125 msgid "library %s already installed" msgstr "la libreria %s è già installata" -#: arduino/libraries/librariesmanager/install.go:319 +#: internal/arduino/libraries/librariesmanager/install.go:342 msgid "library not valid" msgstr "la libreria non è valida" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "il percorso della libreria non esiste: %s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "elenco delle porte seriali" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 msgid "loading %[1]s: %[2]s" msgstr "caricamento di %[1]s: %[2]s" -#: arduino/cores/packagemanager/loader.go:351 +#: internal/arduino/cores/packagemanager/loader.go:314 msgid "loading boards: %s" msgstr "caricamento delle schede: %s" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "caricamento dei tool in dotazione da %s" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "caricamento del file indice json %[1]s: %[2]s" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "caricamento della libreria da %[1]s: %[2]s" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "caricamento di library.properties: %s" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "rilascio della piattaforma di caricamento %s" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "caricamento di platform.txt" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "caricamento della piattaforma richiesta %s" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "caricamento del tool richiesto %s" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "rilascio del tool di caricamento in %s" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "sto cercando boards.txt in %s" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "ricerca degli artefatti di compilazione in corso" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "il file principale manca dallo sketch: %s" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "Manca la direttiva '%s'" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "manca il checksum di: %s" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "manca il pacchetto %[1]s a cui fa riferimento la scheda %[2]s" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" "Manca l'indice del pacchetto %s, non possono essere garantiti aggiornamenti " "futuri" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "manca la piattaforma %[1]s:%[2]s referenziata dalla scheda %[3]s" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" "manca la release della piattaforma %[1]s:%[2]s a cui fa riferimento la " "scheda %[3]s" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "Firma mancante" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "release del monitor non è stata trovata: %s" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "sto spostando l'archivio estratto nella directory di destinazione: %s" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "sono stati trovati più artefatti di compilazione: '%[1]s' e '%[2]s'" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "Sono stati trovati più file di sketch principale (%[1]v, %[2]v)" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" @@ -3450,119 +3610,114 @@ msgstr "" "non è disponibile una versione degli strumenti di %[1]s per il sistema " "operativo corrente, prova a contattare %[2]s" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "non è stato specificato alcun eseguibile" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "non è stata specificata alcuna istanza" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "non è stata specificata alcuna directory/file di sketch o di build" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "nessun file o directory di questo tipo" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" "non c'è una directory radice unica nell'archivio, ma sono state trovate " "'%[1]s' e '%[2]s'." -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "Non è stata fornita alcuna porta di upload" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "Non è stato trovato uno sketch valido in %[1]s: manca %[2]s" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" "non sono disponibili versioni per il sistema operativo corrente, prova a " "contattare %s" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "non è un FQBN: %s" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "non è in esecuzione in un terminale" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "apertura del file di archivio: %s" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "apertura di boards.txt" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "apertura della porta a 1200bps" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "apertura del file della firma: %s" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "apertura del file di destinazione: %s" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "il pacchetto %s non è stato trovato" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "Il pacchetto '%s' non è stato trovato" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "parsing dell'indice all'interno dell'IDE" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "sto facendo il parsing di fqbn: %s" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "sto facendo il parsing di library_index.json: %s" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "il percorso non è una directory della piattaforma: %s" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "la piattaforma %[1]s non è stata trovata nel pacchetto %[2]s" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "La piattaforma %s non ha rilasci disponibili" - -#: arduino/cores/packagemanager/package_manager.go:298 +#: internal/arduino/cores/packagemanager/package_manager.go:309 msgid "platform %s is not installed" msgstr "la piattaforma %s non è installata" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "la piattaforma non è disponibile per il sistema operativo in uso" + +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "piattaforma non installata" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "utilizza invece --build-property." -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "rilevamento collegabile già aggiunto: %s" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "porta" @@ -3570,298 +3725,285 @@ msgstr "porta" msgid "port not found: %[1]s %[2]s" msgstr "la porta non è stata trovata: %[1]s %[2]s" -#: arduino/monitor/monitor.go:236 +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "programmatore" + +#: internal/arduino/monitor/monitor.go:235 msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" "la versione del protocollo non è supportata: richiesta %[1]d, ottenuta %[2]d" -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "la versione del protocollo non è supportata: richiesta 1, ottenuta %d" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "lettura di %[1]s: %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "lettura della directory %[1]s: %[2]s" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "lettura del contenuto della directory %[1]s: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "lettura in corso del contenuto della directory %[1]s" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "lettura cartella %s" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "lettura del contenuto della directory %s: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" +msgstr "lettura in corso del contenuto della directory %s" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "lettura del file %[1]s: %[2]s" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "Lettura dei file: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "lettura dei file in corso" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "lettura degli header delle librerie: %s" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "lettura delle directory lib src: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "lettura in corso degli header della libreria" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "lettura degli header delle librerie: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "lettura in corso della directory dei sorgenti della libreria: %s" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "lettura di library_index.json: %s" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "lettura della directory principale del pacchetto: %s" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "lettura degli sketch in corso" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "scrittura non trovata '%s'" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "il rilascio %[1]s non è stato trovato per il tool %[2]s" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "il rilascio non può essere nullo" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "sto rimuovendo il file di archivio danneggiato: %s" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "rimozione directory della libreria: %s" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "sto rimuovendo i file della piattaforma: %s" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" "la versione richiesta %[1]s non è stata trovata per la piattaforma %[2]s" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "sto recuperando le chiavi pubbliche di Arduino: %s" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "esempi di scansione: %s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "scansione degli esempi di sketch in corso" -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "ricerca di builtin_tools_versions.txt in %[1]s: %[2]s" - -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "ricerca nella directory principale del pacchetto: %s" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "sto impostando DTR su OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" +msgstr "" +"la firma è scaduta: l'orologio del tuo sistema è impostato correttamente?" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "Il nome dello sketch non può essere vuoto" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "il nome dello sketch può essere riservato \"%[1]s\"" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" "il nome dello sketch è troppo lungo (%[1]d caratteri). La lunghezza massima " "consentita è %[2]d" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "il percorso dello sketch non è valido" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "percorso dello sketch" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "la sorgente non è una directory" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "Avvio della rilevazione %s" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "verifica del checksum dell'archivio: %s" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "verifica delle dimensioni dell'archivio: %s" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "verifica se l'archivio è memorizzato nella cache: %s" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "verifica l'integrità dell'archivio locale: %s" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "la sezione del testo supera lo spazio disponibile nella scheda" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "il database di compilazione potrebbe essere incompleto o impreciso" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "la piattaforma non ha rilasci" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "il server ha risposto con lo stato %s" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "timeout in attesa del messaggio" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "timeout in attesa di un messaggio da %s" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "il tool %s non è gestito dal gestore dei pacchetti" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "Il tool %s non è stato trovato" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "il tool '%[1]s' non è stato trovato nel pacchetto '%[2]s'" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "Il tool non è installato" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "il rilascio del tool non è stato trovato: %s" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "la versione %s del tool non è stata trovata" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" "sono necessarie due versioni diverse della libreria %[1]s: %[2]s e %[3]s" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "" "non è possibile calcolare il percorso relativo allo sketch per l'elemento" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "non è possibile creare una cartella per salvare lo sketch" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "non è possibile creare la cartella contenente l'elemento" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" "non è possibile eseguire il marshalling della configurazione in YAML: %v" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "non è possibile leggere il contenuto dell'elemento di destinazione" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "non è stato possibile leggere i contenuti della risorsa" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "non è possibile scrivere sul file di destinazione" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "pacchetto sconosciuto %s" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "piattaforma sconosciuta %s:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "estensione sconosciuta per il file sketch \"%s\"" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "l'algoritmo dell'hash non è supportato: %s" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "aggiorna arduino:samd all'ultima versione" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "aggiornare tutto con l'ultima versione disponibile" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "errore durante il caricamento: %s" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "la directory dell'utente non è configurata" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "l'input dell'utente non è supportato per il formato dell'output '%s'" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "l'input dell'utente non è supportato nella modalità non interattiva" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "la versione %s non è disponibile per questo sistema operativo" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "la versione %s non è stata trovata" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "formato errato nella risposta del server" diff --git a/i18n/data/ja.po b/internal/locales/data/ja.po similarity index 52% rename from i18n/data/ja.po rename to internal/locales/data/ja.po index 698c7677b7e..ddc9d5796ce 100644 --- a/i18n/data/ja.po +++ b/internal/locales/data/ja.po @@ -11,124 +11,112 @@ msgstr "" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "%[1]s パターンが見つかりません" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, メッセージ: %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, ポート: %[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, ポート: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, プロトコルバージョン: %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%sはすでにダウンロードされています" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "%sと%sは同時に利用できません" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%sをインストールしました" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "%sはすでにインストールされています。" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "%sはディレクトリではありません" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "(レガシー)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -136,115 +124,119 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "%[1]sにビルドされたコア(キャッシュ)をアーカイブ中です" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" @@ -252,234 +244,240 @@ msgstr "" msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "ブートローダのファイルが指定されましたが次が不足しています:%[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "スケッチをコンパイルしています..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -487,7 +485,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "" @@ -495,100 +493,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "初期値" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "" @@ -602,246 +600,257 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" msgstr "" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "" @@ -849,42 +858,42 @@ msgstr "" msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -892,44 +901,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -937,203 +942,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "" @@ -1150,312 +1170,320 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" "最大%[2]sバイトのRAMのうち、グローバル変数が%[1]sバイト(%[3]s%%)を使っていて、ローカル変数で%[4]sバイト使うことができます。" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "グローバル変数は%[1]sバイトのRAMを使用しています。" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "インストール済" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" +#: main.go:86 +msgid "Invalid value in configuration" msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1463,53 +1491,59 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "スケッチが使用できるメモリが少なくなっています。動作が不安定になる可能性があります。" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "%[2]sのライブラリに「%[1]s」がありません" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" @@ -1517,331 +1551,350 @@ msgstr "" msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "「%[1]s」に対して複数のライブラリが見つかりました" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "スケッチが使用するメモリが足りません。メモリを節約する方法については、以下のURLのページを参照してください。%[1]s" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "未使用:%[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "シリアルポート" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1850,192 +1903,243 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2044,11 +2148,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2057,167 +2161,185 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "スケッチが大きすぎます。%[1]s には、小さくするコツが書いてあります。" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "最大%[2]sバイトのフラッシュメモリのうち、スケッチが%[1]sバイト(%[3]s%%)を使っています。" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2231,105 +2353,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "タイプ" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2341,23 +2464,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2369,201 +2492,208 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "使用済:%[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "次のフォルダのライブラリ%[1]sバージョン%[2]sを使用中:%[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "次のフォルダのライブラリ%[1]sを使用中:%[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "以前コンパイルされたファイルを使用中:%[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" "警告:ライブラリ%[1]sはアーキテクチャ%[2]sに対応したものであり、アーキテクチャ%[3]sで動作するこのボードとは互換性がないかもしれません。" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2571,370 +2701,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2946,343 +3047,348 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" @@ -3290,291 +3396,277 @@ msgstr "" msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/kk.po b/internal/locales/data/kk.po similarity index 100% rename from i18n/data/kk.po rename to internal/locales/data/kk.po diff --git a/i18n/data/ko.po b/internal/locales/data/ko.po similarity index 51% rename from i18n/data/ko.po rename to internal/locales/data/ko.po index 86386853885..6bae4ddfa10 100644 --- a/i18n/data/ko.po +++ b/internal/locales/data/ko.po @@ -9,124 +9,112 @@ msgstr "" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "%[1]s 패턴이 없습니다" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "(레거시)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -134,115 +122,119 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" @@ -250,234 +242,240 @@ msgstr "" msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "부트로더 파일이 지정되었으나 누락됨: %[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "스케치를 컴파일 중…" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -485,7 +483,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "" @@ -493,100 +491,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "디폴트" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "" @@ -600,246 +598,257 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" msgstr "" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "" @@ -847,42 +856,42 @@ msgstr "" msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -890,44 +899,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -935,203 +940,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "" @@ -1148,312 +1168,320 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" "전역 변수는 동적 메모리 %[1]s바이트(%[3]s%%)를 사용, %[4]s바이트의 지역변수가 남음. 최대는 %[2]s 바이트." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "전역 변수는 %[1]s 바이트의 동적 메모리를 사용." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "설치됨" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" +#: main.go:86 +msgid "Invalid value in configuration" msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1461,53 +1489,59 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "사용 가능한 메모리 부족, 안정성에 문제가 생길 수 있습니다." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "라이브러리 %[2]s에서 '%[1]s'가 없음" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" @@ -1515,331 +1549,350 @@ msgstr "" msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "\"%[1]s\"를 위한 복수개의 라이브러리가 발견되었습니다" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "메모리가 충분하지 않음; 메모리를 줄이기 위한 팁을 위해 다음 링크를 참고하세요%[1]s" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "사용되지 않음: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "포트" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1848,192 +1901,243 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2042,11 +2146,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2055,167 +2159,185 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "스케치가 너무 큼; 이것을 줄이기 위해 다음을 참고하세요. %[1]s" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "스케치는 프로그램 저장 공간 %[1]s 바이트(%[3]s%%)를 사용. 최대 %[2]s 바이트." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2229,105 +2351,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "타입" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2339,23 +2462,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2367,201 +2490,208 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "사용됨: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "라이브러리 %[1]s를 버전 %[2]s 폴더: %[3]s %[4]s 에서 사용" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "폴더:%[2]s %[3]s의 라이브러리 %[1]s 사용" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "이전에 컴파일된 파일: %[1]s 사용" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" "경고: 라이브러리 %[1]s가 %[2]s 아키텍처에서 실행되며 %[3]s아키텍처에서 실행되는 현재보드에서는 호환되지 않을 수 있습니다." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2569,370 +2699,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" msgstr "" -#: commands/upload/upload.go:700 +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2944,343 +3045,348 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" @@ -3288,291 +3394,277 @@ msgstr "" msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/lb.po b/internal/locales/data/lb.po similarity index 51% rename from i18n/data/lb.po rename to internal/locales/data/lb.po index e7dc0c8d2ce..9bc1eca427e 100644 --- a/i18n/data/lb.po +++ b/internal/locales/data/lb.po @@ -9,124 +9,112 @@ msgstr "" "Language: lb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s schon erofgelueden" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%s installéiert" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "%s ass schon installéiert." -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "%s muss installéiert ginn." -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(verstoppt)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -134,115 +122,119 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "Auteur: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" @@ -250,234 +242,240 @@ msgstr "" msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "Kann Bibliothéik net roflueden" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "Kategorie: %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -485,7 +483,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "" @@ -493,100 +491,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "Beschreiwung" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "" @@ -600,246 +598,257 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" msgstr "" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "Feeler wärend der Installatioun: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "" @@ -847,42 +856,42 @@ msgstr "" msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "Feeler bei der Installatioun vun %s: %v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "Feeler bei der Installatioun vun der Bibliothéik %s" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -890,44 +899,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -935,203 +940,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "Beispiller fir d'Bibliothéik %s" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "Beispiller:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "" @@ -1148,311 +1168,319 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Installéiert" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "Ongülteg Bibliothéik" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" +#: main.go:86 +msgid "Invalid value in configuration" msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "Ongülteg Versioun" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "BIBLIOTHEIK" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "D'Bibliothéik %s huet schon déi neisten Versioun" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "Bibliothéik %s ass net installéiert" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "Bibliothéik %s net fonnt" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "Bibliothéik '%s' net fonnt" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "Bibliothéik installéiert" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "Lizenz: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1460,53 +1488,59 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" @@ -1514,331 +1548,350 @@ msgstr "" msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "Numm" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "Numm: \"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "Optioun:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1847,192 +1900,243 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "Astellung" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2041,11 +2145,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2054,167 +2158,185 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "Gréisst (Bytes):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2228,105 +2350,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "Onbekannt" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2338,23 +2461,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2366,200 +2489,207 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "Benotzten Bibliothéik" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Benotzt: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "Versioun" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "Versiounen: %s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "Websäit: %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2567,370 +2697,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" msgstr "" -#: commands/upload/upload.go:700 +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "erofgelueden" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2942,343 +3043,348 @@ msgstr "ongültegen, eidelen Bibliothéiksnumm" msgid "invalid empty library version: %s" msgstr "ongülteg, eidel Bibliothéiksversioun: %s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "Ongülteg Optioun '%s'" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "Ongülteg Versioun" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" -msgstr "Bibliothéik %s ass schon installéiert" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" -msgstr "Bibliothéik ongülteg" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" +msgstr "Bibliothéik %s ass schon installéiert" + +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "Bibliothéik ongülteg" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" @@ -3286,291 +3392,277 @@ msgstr "" msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/mn.po b/internal/locales/data/mn.po similarity index 100% rename from i18n/data/mn.po rename to internal/locales/data/mn.po diff --git a/i18n/data/my_MM.po b/internal/locales/data/my_MM.po similarity index 100% rename from i18n/data/my_MM.po rename to internal/locales/data/my_MM.po diff --git a/i18n/data/ne.po b/internal/locales/data/ne.po similarity index 55% rename from i18n/data/ne.po rename to internal/locales/data/ne.po index 346b9c5d3f6..5df26d23900 100644 --- a/i18n/data/ne.po +++ b/internal/locales/data/ne.po @@ -9,91 +9,75 @@ msgstr "" "Language: ne\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: version/version.go:59 +#: version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s%[2]sसंस्करण: %[3]s प्रतिबद्ध: %[4]s मिति:%[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:464 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:139 msgid "%[1]s invalid, rebuilding all" msgstr "" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:123 msgid "%[1]s is required but %[2]s is currently installed." msgstr "" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:484 msgid "%[1]s pattern is missing" msgstr "" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:49 msgid "%s already downloaded" msgstr "" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:753 msgid "%s and %s cannot be used together" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:367 msgid "%s installed" msgstr "" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:120 msgid "%s is already installed." msgstr "" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:62 +#: internal/arduino/cores/packagemanager/loader.go:616 msgid "%s is not a directory" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:287 msgid "%s is not managed by package manager" msgstr "" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/lib/check_deps.go:117 msgid "%s must be installed." msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:194 +#: internal/arduino/builder/internal/preprocessor/gcc.go:61 msgid "%s pattern is missing" msgstr "" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:820 msgid "'%s' has an invalid signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:446 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:96 internal/cli/board/search.go:93 msgid "(hidden)" msgstr "" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:301 msgid "(legacy)" msgstr "" @@ -113,15 +97,15 @@ msgstr "" msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:65 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:32 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:301 msgid "A programmer is required to upload" msgstr "" @@ -138,7 +122,7 @@ msgstr "" msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:33 internal/cli/config/add.go:34 msgid "Adds one or more values to a setting." msgstr "" @@ -146,75 +130,79 @@ msgstr "" msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:111 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:86 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:134 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:71 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:215 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:85 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:207 msgid "Architecture: %s" msgstr "" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:68 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:141 msgid "Archiving built core (caching) in: %[1]s" msgstr "" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:32 internal/cli/sketch/sketch.go:33 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:89 msgid "Arduino CLI." msgstr "" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:90 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:32 internal/cli/board/board.go:33 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:32 internal/cli/cache/cache.go:33 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:32 internal/cli/lib/lib.go:33 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:37 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:32 internal/cli/core/core.go:33 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:61 internal/cli/lib/install.go:129 msgid "Arguments error: %v" msgstr "" @@ -222,23 +210,23 @@ msgstr "" msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:198 msgid "Author: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:77 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:86 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:137 msgid "Available" msgstr "" @@ -246,12 +234,12 @@ msgstr "" msgid "Available Commands:" msgstr "" -#: internal/cli/upload/upload.go:75 +#: internal/cli/upload/upload.go:74 msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 +#: internal/cli/board/listall.go:83 internal/cli/board/search.go:84 msgid "Board Name" msgstr "" @@ -263,7 +251,7 @@ msgstr "" msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:244 msgid "Bootloader file specified but missing: %[1]s" msgstr "" @@ -271,32 +259,29 @@ msgstr "" msgid "Builds of 'core.a' are saved into this path to be cached and reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:64 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:513 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:90 +#: commands/service_library_download.go:94 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:88 +#: internal/arduino/cores/packagemanager/install_uninstall.go:133 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:539 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:526 msgid "Can't update sketch" msgstr "" @@ -304,184 +289,191 @@ msgstr "" msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:112 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:186 commands/service_compile.go:189 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:171 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:99 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:123 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:783 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:801 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:54 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug_run.go:68 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:76 internal/cli/config/init.go:83 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:62 internal/cli/config/add.go:64 +#: internal/cli/config/get.go:58 internal/cli/config/remove.go:62 +#: internal/cli/config/remove.go:64 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:140 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:345 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:531 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:74 internal/cli/config/add.go:76 +#: internal/cli/config/remove.go:72 internal/cli/config/remove.go:74 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:158 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:206 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/check_deps.go:39 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:41 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:167 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:189 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:34 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:183 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:55 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:175 commands/service_upload.go:439 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:81 internal/cli/compile/compile.go:82 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:418 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:397 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:132 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:381 msgid "Compiling sketch..." msgstr "" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:93 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:178 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:240 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:76 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:174 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:355 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:195 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:243 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:101 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:486 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:41 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:153 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:36 internal/cli/lib/install.go:110 msgid "Couldn't get current working directory: %v" msgstr "" -#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 +#: internal/cli/sketch/new.go:36 internal/cli/sketch/new.go:37 msgid "Create a new Sketch" msgstr "" @@ -489,104 +481,104 @@ msgstr "" msgid "Create and print a profile configuration from the build." msgstr "" -#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 +#: internal/cli/sketch/archive.go:36 internal/cli/sketch/archive.go:37 msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:45 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:328 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:256 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:148 +#: internal/cli/outdated/outdated.go:121 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:188 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:54 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:55 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:68 internal/cli/debug/debug_check.go:50 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:205 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:299 msgid "Default" msgstr "" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:114 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:113 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 -msgid "Delete Boards/Library Manager download cache." +#: internal/cli/board/attach.go:115 +msgid "Default programmer set to" msgstr "" #: internal/cli/cache/clean.go:31 +msgid "Delete Boards/Library Manager download cache." +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" -#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 +#: internal/cli/config/delete.go:31 internal/cli/config/delete.go:32 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:214 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:137 internal/cli/outdated/outdated.go:108 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:309 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:45 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:69 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 msgid "Directory containing binaries to upload." msgstr "" @@ -600,11 +592,11 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:196 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:88 msgid "Display only the provided gRPC calls" msgstr "" @@ -620,45 +612,50 @@ msgstr "" msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/upload/upload.go:78 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:79 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:51 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:87 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:136 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:563 commands/instances.go:581 +#: commands/instances.go:595 commands/instances.go:612 +#: internal/arduino/resources/index.go:81 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:373 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:52 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:93 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:99 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "Downloading tool %s" msgstr "" @@ -670,7 +667,7 @@ msgstr "" msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:82 msgid "Enable debug logging of gRPC calls" msgstr "" @@ -682,23 +679,23 @@ msgstr "" msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:104 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:147 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:84 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:92 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:47 msgid "Error cleaning caches: %v" msgstr "" @@ -706,88 +703,87 @@ msgstr "" msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:383 msgid "Error copying output file %s" msgstr "" -#: internal/cli/instance/instance.go:43 +#: internal/cli/config/init.go:105 internal/cli/config/init.go:112 +#: internal/cli/config/init.go:119 internal/cli/config/init.go:133 +#: internal/cli/config/init.go:137 +msgid "Error creating configuration: %v" +msgstr "" + +#: internal/cli/instance/instance.go:45 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:367 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:80 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:70 internal/cli/sketch/new.go:82 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:82 internal/cli/board/list.go:95 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:70 internal/cli/lib/download.go:68 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:108 +#: internal/arduino/cores/packagemanager/profiles.go:109 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:660 internal/arduino/resources/index.go:82 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:137 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:383 commands/instances.go:389 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:126 +#: internal/arduino/cores/packagemanager/profiles.go:127 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:126 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:152 internal/cli/debug/debug.go:185 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 +#: internal/cli/arguments/port.go:140 msgid "Error during FQBN detection: %v" msgstr "" -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:238 internal/cli/feedback/feedback.go:244 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:97 +#: internal/cli/compile/compile.go:261 internal/cli/compile/compile.go:303 +#: internal/cli/upload/upload.go:96 internal/cli/upload/upload.go:125 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "" - -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:376 msgid "Error during build: %v" msgstr "" @@ -795,27 +791,28 @@ msgstr "" msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:74 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:135 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:104 +#: internal/arduino/resources/index.go:123 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:436 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:132 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:56 msgid "Error getting absolute path of sketch archive" msgstr "" @@ -823,87 +820,93 @@ msgstr "" msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:84 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:110 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:306 commands/service_library_list.go:114 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:74 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:91 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:155 msgid "Error getting port settings details: %s" msgstr "" -#: internal/cli/upload/upload.go:169 +#: internal/cli/upload/upload.go:166 msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:84 internal/cli/instance/instance.go:102 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:147 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:121 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:99 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:399 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:134 +#: internal/arduino/cores/packagemanager/profiles.go:135 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:185 +#: internal/arduino/cores/packagemanager/profiles.go:186 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:65 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:90 msgid "Error listing libraries: %v" msgstr "" -#: internal/cli/core/list.go:69 +#: internal/cli/core/list.go:68 msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:426 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:113 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:98 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:106 msgid "Error opening debug logging file: %s" msgstr "" @@ -915,93 +918,104 @@ msgstr "" msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:376 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:74 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:71 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:68 +#: internal/cli/core/upgrade.go:67 msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:164 +#: internal/arduino/resources/index.go:176 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:171 +#: internal/arduino/resources/index.go:180 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:62 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:125 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:81 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:69 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:221 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:66 internal/cli/config/set.go:73 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:85 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:66 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:112 internal/cli/lib/update_index.go:58 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:74 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:150 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:146 +#: internal/arduino/resources/index.go:152 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:371 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:78 internal/arduino/builder/sizer.go:87 +#: internal/arduino/builder/sizer.go:90 internal/arduino/builder/sizer.go:109 +#: internal/arduino/builder/sizer.go:214 internal/arduino/builder/sizer.go:224 +#: internal/arduino/builder/sizer.go:228 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:72 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:86 internal/cli/config/config.go:93 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" @@ -1010,11 +1024,11 @@ msgstr "" msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:101 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:122 msgid "Examples for library %s" msgstr "" @@ -1022,17 +1036,17 @@ msgstr "" msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:223 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:178 commands/service_upload.go:442 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" #: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 +#: internal/cli/board/listall.go:83 internal/cli/board/search.go:84 msgid "FQBN" msgstr "" @@ -1040,57 +1054,57 @@ msgstr "" msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:565 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:572 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:568 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:89 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:78 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:143 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:138 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:148 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:576 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:187 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:154 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:39 msgid "First message must contain debug request, not data" msgstr "" @@ -1123,15 +1137,15 @@ msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:841 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:38 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug_run.go:187 msgid "GDB server '%s' is not supported" msgstr "" @@ -1148,27 +1162,31 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:329 msgid "Generating function prototypes..." msgstr "" +#: internal/cli/config/get.go:34 internal/cli/config/get.go:35 +msgid "Gets a settings key value." +msgstr "" + #: internal/cli/usage.go:31 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:163 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:169 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:215 internal/cli/core/list.go:116 +#: internal/cli/core/search.go:116 internal/cli/monitor/monitor.go:299 +#: internal/cli/outdated/outdated.go:103 msgid "ID" msgstr "" @@ -1180,7 +1198,7 @@ msgstr "" msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:129 msgid "If set built binaries will be exported to the sketch folder." msgstr "" @@ -1190,11 +1208,11 @@ msgid "" "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:54 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:50 msgid "Includes %s directory in the archive." msgstr "" @@ -1202,30 +1220,30 @@ msgstr "" msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:116 internal/cli/lib/list.go:137 +#: internal/cli/outdated/outdated.go:105 msgid "Installed" msgstr "" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:199 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:182 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:397 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:132 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:183 msgid "Installing tool %s" msgstr "" @@ -1237,82 +1255,85 @@ msgstr "" msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:396 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:379 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:62 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:161 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:80 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:185 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 +#: internal/arduino/resources/index.go:110 msgid "Invalid archive: file %{1}s not found in archive %{2}s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:58 internal/cli/core/install.go:65 +#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:107 +#: internal/cli/lib/download.go:57 internal/cli/lib/uninstall.go:55 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:250 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:249 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:255 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:596 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:48 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:113 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:98 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:261 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:613 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:64 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:218 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:580 msgid "Invalid package index in %s" msgstr "" @@ -1320,31 +1341,27 @@ msgstr "" msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_list.go:80 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:222 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:268 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:239 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "" - -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:116 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_list.go:77 msgid "Invalid vid value: '%s'" msgstr "" @@ -1358,63 +1375,64 @@ msgstr "" msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:37 internal/cli/lib/install.go:44 msgid "LIBRARY" msgstr "" #: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/uninstall.go:34 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:116 internal/cli/outdated/outdated.go:106 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:90 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:140 +#: internal/arduino/libraries/librariesmanager/install.go:129 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:136 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:62 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:376 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:447 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:473 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:576 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:233 +#: commands/service_library_install.go:273 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:204 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:434 msgid "Linking everything together..." msgstr "" @@ -1428,11 +1446,11 @@ msgstr "" msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:44 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:43 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." @@ -1444,7 +1462,7 @@ msgid "" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:56 msgid "List updatable libraries." msgstr "" @@ -1452,183 +1470,189 @@ msgstr "" msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:34 msgid "Lists all connected boards." msgstr "" -#: internal/cli/outdated/outdated.go:41 +#: internal/cli/outdated/outdated.go:43 msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:223 commands/instances.go:234 +#: commands/instances.go:344 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:137 internal/cli/outdated/outdated.go:107 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:204 msgid "Low memory available, stability problems may occur." msgstr "" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:199 msgid "Maintainer: %s" msgstr "" +#: internal/cli/compile/compile.go:134 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + #: internal/cli/arguments/discovery_timeout.go:31 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:171 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:468 msgid "Missing '%[1]s' from library in %[2]s" msgstr "" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:171 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:262 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:238 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:250 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:288 msgid "Missing programmer" msgstr "" -#: internal/cli/upload/upload.go:162 +#: internal/cli/upload/upload.go:159 msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:243 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:499 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:360 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:202 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:158 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:215 internal/cli/core/list.go:116 +#: internal/cli/core/search.go:116 internal/cli/lib/list.go:137 +#: internal/cli/outdated/outdated.go:104 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:178 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:234 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:129 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:111 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:107 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:129 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:167 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:173 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:127 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:276 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:97 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:113 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:112 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:521 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:466 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:194 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:161 msgid "Not used: %[1]s" msgstr "" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:186 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:144 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:97 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:199 msgid "Option:" msgstr "" @@ -1650,11 +1674,11 @@ msgstr "" msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:76 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:130 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." @@ -1666,15 +1690,15 @@ msgid "" "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/config/init.go:61 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:51 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:45 msgid "Overwrites an existing .ino sketch." msgstr "" @@ -1683,31 +1707,31 @@ msgstr "" msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:164 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:163 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:162 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:166 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:165 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:201 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:451 internal/cli/compile/compile.go:466 msgid "Path" msgstr "" @@ -1723,7 +1747,7 @@ msgid "" "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:173 msgid "Path to the file where logs will be written." msgstr "" @@ -1733,97 +1757,99 @@ msgid "" "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:502 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:85 +#: commands/service_platform_install.go:92 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:191 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:399 internal/cli/upload/upload.go:145 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:315 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:484 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:408 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:84 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:384 internal/cli/upload/upload.go:133 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:172 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:171 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:170 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:177 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:173 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:169 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:175 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:155 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:135 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 msgid "Port" msgstr "" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:255 internal/cli/monitor/monitor.go:264 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:670 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:100 +#: internal/arduino/builder/libraries.go:108 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" @@ -1835,23 +1861,27 @@ msgstr "" msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:167 internal/cli/cli.go:169 msgid "Print the logs on the standard output." msgstr "" -#: internal/cli/config/dump.go:31 +#: internal/cli/cli.go:181 +msgid "Print the output in JSON format." +msgstr "" + +#: internal/cli/config/dump.go:30 msgid "Prints the current configuration" msgstr "" -#: internal/cli/config/dump.go:32 +#: internal/cli/config/dump.go:31 msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:204 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:341 msgid "Programmer '%s' not found" msgstr "" @@ -1859,66 +1889,64 @@ msgstr "" msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:34 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:215 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:393 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:139 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:211 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:33 internal/cli/config/remove.go:34 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:186 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:120 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:183 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:77 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:50 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:42 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:294 +#: internal/arduino/cores/packagemanager/install_uninstall.go:407 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:38 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:228 msgid "SVD file path" msgstr "" @@ -1934,77 +1962,120 @@ msgstr "" msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:39 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:40 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:39 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:200 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:236 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:62 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:235 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:80 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:74 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:33 internal/cli/config/set.go:34 msgid "Sets a setting value." msgstr "" #: internal/cli/board/attach.go:36 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:59 internal/cli/config/init.go:60 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:299 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:102 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:47 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:75 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:49 internal/cli/board/search.go:47 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" @@ -2024,7 +2095,7 @@ msgid "" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:96 msgid "Show library names only." msgstr "" @@ -2032,12 +2103,12 @@ msgstr "" msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:70 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" -#: internal/cli/update/update.go:45 +#: internal/cli/update/update.go:47 msgid "Show outdated cores and libraries after index update" msgstr "" @@ -2077,114 +2148,126 @@ msgstr "" msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:188 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:254 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:97 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:32 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:189 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:157 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:38 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:29 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:495 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:26 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:182 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:416 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:303 +#: internal/arduino/cores/packagemanager/install_uninstall.go:416 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:364 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:47 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:633 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:140 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:76 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:178 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:182 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/daemon/daemon.go:98 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:88 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:86 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:878 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:56 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:56 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:860 msgid "The library %s has multiple installations:" msgstr "" @@ -2200,7 +2283,7 @@ msgid "" "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:175 msgid "The output format for the logs, can be: %s" msgstr "" @@ -2210,7 +2293,7 @@ msgid "" "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:150 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" @@ -2222,93 +2305,94 @@ msgid "" "update is available." msgstr "" -#: internal/cli/outdated/outdated.go:42 +#: internal/cli/outdated/outdated.go:44 msgid "" "This commands shows a list of installed cores and/or libraries\n" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:78 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:86 +#: internal/arduino/cores/packagemanager/install_uninstall.go:325 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:428 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug_run.go:143 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:225 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:226 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:224 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:397 internal/cli/upload/upload.go:143 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:61 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:101 internal/cli/board/list.go:139 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:208 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:190 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:143 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:88 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:63 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:51 +#: internal/cli/configuration/configuration.go:76 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:248 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:562 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:70 +#: internal/arduino/cores/packagemanager/install_uninstall.go:277 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:98 +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 msgid "Uninstalling %s, tool is no more required" msgstr "" @@ -2322,47 +2406,47 @@ msgstr "" msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:171 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:185 msgid "Unknown FQBN" msgstr "" -#: internal/cli/update/update.go:37 +#: internal/cli/update/update.go:39 msgid "Updates the index of cores and libraries" msgstr "" -#: internal/cli/update/update.go:38 +#: internal/cli/update/update.go:40 msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:34 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:34 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:43 msgid "Upgrade doesn't accept parameters with version" msgstr "" -#: internal/cli/upgrade/upgrade.go:38 +#: internal/cli/upgrade/upgrade.go:40 msgid "Upgrades installed cores and libraries to latest version." msgstr "" -#: internal/cli/upgrade/upgrade.go:37 +#: internal/cli/upgrade/upgrade.go:39 msgid "Upgrades installed cores and libraries." msgstr "" @@ -2374,24 +2458,24 @@ msgstr "" msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:43 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:519 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:47 msgid "Upload port protocol, e.g: serial" msgstr "" @@ -2399,20 +2483,20 @@ msgstr "" msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:266 internal/cli/upload/upload.go:164 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:159 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2426,48 +2510,49 @@ msgstr "" msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:449 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:464 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Used: %[1]s" msgstr "" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:329 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:353 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:330 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/arduino/builder/libraries.go:311 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:305 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:116 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:97 +#: internal/arduino/builder/libraries.go:105 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:49 +#: internal/arduino/builder/compilation.go:180 msgid "Using previously compiled file: %[1]s" msgstr "" @@ -2475,115 +2560,115 @@ msgstr "" msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:37 internal/cli/lib/install.go:44 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:299 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:60 +#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:75 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:450 internal/cli/compile/compile.go:465 +#: internal/cli/core/search.go:116 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:209 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:182 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:360 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:412 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:327 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:282 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:508 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:335 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:202 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:44 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:47 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:147 internal/cli/compile/compile.go:150 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:186 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:189 msgid "archive is not valid: no files found in zip file top level" msgstr "" -#: internal/cli/sketch/archive.go:36 +#: internal/cli/sketch/archive.go:35 msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:63 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "" - #: internal/cli/feedback/stdio.go:35 msgid "available only in text format" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:83 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:88 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:763 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:351 msgid "board %s not found" msgstr "" @@ -2591,154 +2676,135 @@ msgstr "" msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:193 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:274 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 +#: internal/arduino/sketch/sketch.go:109 msgid "can't find main Sketch file in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:711 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:95 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:720 commands/service_upload.go:727 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:39 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:110 +#: internal/arduino/builder/build_options_manager.go:113 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:91 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:150 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:147 +#: internal/arduino/monitor/monitor.go:153 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: internal/arduino/cores/fqbn.go:80 +msgid "config key %s contains an invalid character" +msgstr "" + +#: internal/arduino/cores/fqbn.go:85 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:139 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:835 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:93 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:189 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:78 internal/arduino/sketch/yaml.go:82 +#: internal/arduino/sketch/yaml.go:86 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:95 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:216 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:44 +#: internal/arduino/resources/install.go:48 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:195 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:85 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:92 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:136 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:276 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:206 msgid "discovery %[1]s process not started: %[2]w" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:643 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:647 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:743 msgid "discovery release not found: %s" msgstr "" @@ -2754,71 +2820,67 @@ msgstr "" msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:54 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: internal/arduino/cores/fqbn.go:59 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:95 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:212 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_list.go:114 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_list.go:94 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 +#: internal/arduino/resources/install.go:67 msgid "extracting archive: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 +#: internal/arduino/libraries/librariesmanager/install.go:177 msgid "extracting archive: %w" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:144 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_list.go:89 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:96 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:122 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:58 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:91 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:97 msgid "following symlink %s" msgstr "" @@ -2826,16 +2888,20 @@ msgstr "" msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 +#: internal/cli/lib/check_deps.go:41 internal/cli/lib/download.go:38 #: internal/cli/lib/install.go:48 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/install.go:49 #: internal/cli/lib/install.go:51 msgid "for the specific version." msgstr "" +#: internal/arduino/cores/fqbn.go:65 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + #: internal/inventory/inventory.go:68 msgid "generating installation.id: %w" msgstr "" @@ -2844,137 +2910,127 @@ msgstr "" msgid "generating installation.secret: %w" msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:53 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:34 +#: internal/arduino/resources/helpers.go:38 +#: internal/arduino/resources/install.go:55 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:357 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:105 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:113 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:98 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:147 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:58 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:208 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:37 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:210 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: internal/arduino/cores/fqbn.go:72 internal/arduino/cores/fqbn.go:77 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:91 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:68 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:88 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:73 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:78 msgid "invalid empty core version: '%s'" msgstr "" -#: internal/cli/lib/args.go:49 +#: internal/cli/lib/args.go:48 msgid "invalid empty library name" msgstr "" -#: internal/cli/lib/args.go:54 +#: internal/cli/lib/args.go:53 msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:142 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:266 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:85 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:244 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:65 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:88 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:139 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:145 msgid "invalid option '%s'" msgstr "" @@ -2990,291 +3046,293 @@ msgstr "" msgid "invalid path writing inventory file: %[1]s error: %[2]w" msgstr "" -#: arduino/cores/packageindex/index.go:283 +#: internal/arduino/cores/packageindex/index.go:278 msgid "invalid platform archive size: %s" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:214 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:224 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:325 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:187 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 +#: internal/cli/monitor/monitor.go:195 msgid "invalid port configuration: %s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:707 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:85 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:149 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:230 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:246 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:38 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:86 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:87 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:89 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:84 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:85 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:124 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:313 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:254 +#: internal/arduino/cores/packagemanager/loader.go:267 +#: internal/arduino/cores/packagemanager/loader.go:275 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/cores/packagemanager/loader.go:313 +msgid "loading boards: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:498 +#: internal/arduino/cores/packagemanager/package_manager.go:513 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:226 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:54 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:207 +#: internal/arduino/cores/packagemanager/loader.go:235 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:194 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:45 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:61 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:589 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:187 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:778 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:79 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:208 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:459 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:100 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:464 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:469 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:152 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:754 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:244 +#: internal/arduino/resources/install.go:96 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:830 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:71 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:334 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:272 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:785 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:58 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:125 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:702 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:285 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:127 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: internal/cli/feedback/terminal.go:51 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:59 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:223 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:83 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:75 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:527 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:165 +#: internal/arduino/cores/packagemanager/package_manager.go:298 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:72 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:178 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:79 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:344 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:91 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:120 +#: internal/arduino/cores/packagemanager/install_uninstall.go:176 +#: internal/arduino/cores/packagemanager/install_uninstall.go:280 +#: internal/arduino/cores/packagemanager/loader.go:419 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:136 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:135 msgid "pluggable discovery already added: %s" msgstr "" @@ -3282,260 +3340,242 @@ msgstr "" msgid "port" msgstr "" -#: internal/cli/arguments/port.go:125 +#: internal/cli/arguments/port.go:121 msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:34 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:236 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:215 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 +#: internal/arduino/libraries/loader.go:198 msgid "reading directory %[1]s content: %[2]w" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:68 +#: internal/arduino/cores/packagemanager/loader.go:150 +#: internal/arduino/cores/packagemanager/loader.go:217 +#: internal/arduino/cores/packagemanager/loader.go:581 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 +#: internal/arduino/libraries/librariesmanager/install.go:286 msgid "reading directory %s content: %w" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:82 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:204 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:91 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 +#: internal/arduino/libraries/libraries.go:228 msgid "reading lib src dir: %s" msgstr "" -#: arduino/libraries/libraries.go:116 +#: internal/arduino/libraries/libraries.go:116 msgid "reading library headers: %w" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:66 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:115 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:114 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:696 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:603 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:44 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:150 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:307 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:86 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:116 +#: internal/arduino/libraries/loader.go:154 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:73 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "" - -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:77 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:90 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:80 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:51 internal/arduino/sketch/sketch.go:56 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:35 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:210 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:118 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:111 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:105 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:37 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:190 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:216 +#: internal/arduino/builder/internal/preprocessor/ctags.go:72 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_list.go:101 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:140 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:400 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:553 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:395 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:732 +#: internal/arduino/cores/packagemanager/package_manager.go:838 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:91 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:75 +#: internal/arduino/builder/sketch.go:119 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:44 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:125 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:84 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:163 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:136 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:146 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:332 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:339 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:143 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "" @@ -3547,30 +3587,30 @@ msgstr "" msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:731 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:93 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:96 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:173 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:152 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_list.go:119 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/pl.po b/internal/locales/data/pl.po similarity index 52% rename from i18n/data/pl.po rename to internal/locales/data/pl.po index 5abd6d5bd7b..07d79a3ca72 100644 --- a/i18n/data/pl.po +++ b/internal/locales/data/pl.po @@ -11,124 +11,112 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "%[1]sfolder nie jest już wspierany,.Zobacz %[2]spo więcej informacji" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]snieprawidłowe, przebudowywuję całość" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]sjest wymagane ale %[2]s jest obecnie zaistalowane" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "Brakujący wzorzec %[1]s" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s, wiadomość %[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s, port%[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s, porty: %[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s, wersja protokołu %[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%sjuż pobrane" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "%s oraz %s nie mogą być razem użyte" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%s zainstalowane" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "%sjuż jest zainstalowane" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "%snie jest " -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "%snie jest zarządzane przez zarządcę paczek" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "%smusi byc zainstalowane" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%s brakuje wzoru" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s' posiada niewłaściwy podpis" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(ukryte)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "(przestarzałe)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "" @@ -136,115 +124,119 @@ msgstr "" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "Architektura: %s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "Archiwizowanie budowanego rdzenia (buforowanie) w: %[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "Autor: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "Dostępne" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "" @@ -252,234 +244,240 @@ msgstr "" msgid "Binary file to upload." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "Nazwa płytki:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "Podany nieistniejący plik programu rozruchowego: %[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:159 -msgid "Cannot upgrade platform" +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" msgstr "" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" msgstr "" -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "Kompilowanie szkicu..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "" @@ -487,7 +485,7 @@ msgstr "" msgid "Create a new Sketch" msgstr "" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "" @@ -495,100 +493,100 @@ msgstr "" msgid "Creates a zip file containing all sketch files." msgstr "" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" msgstr "" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "Domyślne" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "" @@ -602,246 +600,257 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" msgstr "" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "" @@ -849,42 +858,42 @@ msgstr "" msgid "Error getting user input" msgstr "" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "" @@ -892,44 +901,40 @@ msgstr "" msgid "Error listing platforms: %v" msgstr "" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "" @@ -937,203 +942,218 @@ msgstr "" msgid "Error retrieving core list: %v" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "" @@ -1150,15 +1170,19 @@ msgstr "" msgid "Generates completion scripts for various shells" msgstr "" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1167,297 +1191,301 @@ msgstr "" "pozostawiając %[4]s bajtów dla zmiennych lokalnych. Maksimum to %[2]s " "bajtów." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Zmienne globalne używają %[1]s bajtów pamięci dynamicznej." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Zainstalowany" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "" -#: configuration/network.go:63 -msgid "Invalid network.proxy '%[1]s': %[2]s" +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" msgstr "" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" msgstr "" -#: internal/cli/cli.go:229 +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" +#: main.go:86 +msgid "Invalid value in configuration" msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "" @@ -1465,54 +1493,60 @@ msgstr "" msgid "Lists cores and libraries that can be upgraded" msgstr "" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "" "Niski poziom dostępnej pamięci, mogą wystąpić problemy ze stabilnością." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "Brakuje '%[1]s' z biblioteki w %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "" @@ -1520,333 +1554,352 @@ msgstr "" msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Znaleziono wiele bibliotek w \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" msgstr "" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "Niewystarczająca ilość pamięci; sprawdź %[1]s w poszukiwaniu rozwiązania " "problemu" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "Niewykorzystane: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "Port" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "" @@ -1855,192 +1908,243 @@ msgstr "" msgid "Prints the current configuration." msgstr "" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2049,11 +2153,11 @@ msgstr "" msgid "Show outdated cores and libraries after index update" msgstr "" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2062,52 +2166,52 @@ msgid "" "not listed, they can be listed by adding the --all flag." msgstr "" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "Szkic za duży, zobacz porady na %[1]s w celu zmiejszenia go." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2115,116 +2219,134 @@ msgstr "" "Szkic używa %[1]s bajtów (%[3]s%%) pamięci programu. Maksimum to %[2]s " "bajtów." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" msgstr "" -#: internal/cli/daemon/daemon.go:58 -msgid "The TCP port the daemon will listen to" +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" msgstr "" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" msgstr "" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" msgstr "" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2238,105 +2360,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "Wpisz" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2348,23 +2471,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2376,155 +2499,166 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Wykorzystane: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "Użycie biblioteki %[1]s w wersji %[2]s z folderu: %[3]s %[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "Użycie biblioteki %[1]s z folderu %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "Użycie wcześniej skompilowanego pliku: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2533,46 +2667,42 @@ msgstr "" "może nie być kompatybilna z obecną płytką która działa na " "architekturze(/architekturach) %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2580,370 +2710,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -2955,343 +3056,348 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" @@ -3299,291 +3405,277 @@ msgstr "" msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "" diff --git a/i18n/data/pt.po b/internal/locales/data/pt.po similarity index 60% rename from i18n/data/pt.po rename to internal/locales/data/pt.po index ab390b79962..1277275f39a 100644 --- a/i18n/data/pt.po +++ b/internal/locales/data/pt.po @@ -3,89 +3,78 @@ # CLI team <prj_cli_team@arduino.cc>, 2022 # Silas Sousa, 2022 # Kaseioo <kaseio@protonmail.com>, 2023 +# Igor Rückert, 2024 # msgid "" msgstr "" -"Last-Translator: Kaseioo <kaseio@protonmail.com>, 2023\n" +"Last-Translator: Igor Rückert, 2024\n" "Language-Team: Portuguese (https://app.transifex.com/arduino-1/teams/108174/pt/)\n" "Language: pt\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s%[5]s%[4]sData%[3]scomprometer%[2]sVersão" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "%[1]spasta não é mais suportada! Ver%[2]sPara maiores informações" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]sinválido, refazendo tudo" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s‎é necessário, mas‎%[2]snão é instalado em nenhum momento." -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "%[1]so padrão está faltando" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]smensagem:%[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s,porta%[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]sportas:%[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[2]d%[1]s, versão do protocolo:" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s‎já baixado‎" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "%se%s‎não pode ser usado em conjunto‎" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%sinstalado" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "%s‎já está instalado.‎" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "%s‎não é um diretório‎" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "%s‎não é gerenciado pelo gerente de pacotes‎" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "%s‎deve ser instalado.‎" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%spadrão está faltando" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "%s‎tem uma assinatura inválida‎" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" @@ -93,15 +82,15 @@ msgstr "" "'build.core' e 'build.variant' referem a plataformas diferentes: %[1]s e " "%[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "‎(oculto)‎" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "‎(legado)‎" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" @@ -109,7 +98,7 @@ msgstr "" "%v‎--git-url e --zip-path são desativados por padrão, para obter mais " "informações, consulte:‎" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." @@ -117,25 +106,25 @@ msgstr "" "‎--git-url e --zip-path autorizaram a instalação de arquivos não confiáveis," " use por sua conta e risco.‎" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "" "--git-url ou --zip-path não podem ser usados com --install-in-builtin-dir" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr "arquivo .ino já existe" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "‎Uma nova atualização do Arduino CLI está disponível:‎" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "‎É necessário um programador para carregar‎" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARCH" @@ -143,99 +132,103 @@ msgstr "ARCH" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "MANUAL DE LINHA DE COMANDO ARDUINO" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "Tópicos de ajuda adicionais:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "Adicionar um ou mais valores para uma configuração." -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "Apelidos:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "Todas as plataformas estão atualizadas." + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "Todos os Núcleos já estão na versão mais recente" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "%s‎Já instalado‎" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "%[1]sAlternativas para‎%[2]s:" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "‎Ocorreu um erro ao adicionar os protótipos‎" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "‎Ocorreu um erro na detecção de bibliotecas‎" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "‎Registro de depuração de anexação ao arquivo especificado‎" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "%sArquitetura:‎" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "O Arquivo já existe" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "%[1]sArquivando núcleo construído (cache) em:" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Comandos de esboço da Linha de Comando Arduino" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Linha de Comando Arduino." -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Interface de Linha de Comando Arduino (arduino-cli)." -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Comandos de Placa Arduino" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Comandos de Cache Arduino." -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Comandos Arduino sobre bibliotecas." -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Comandos de configuração Arduino" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Operações centrais Arduino." -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "%vErro nos argumentos:" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "‎Anexa um sketch a uma placa.‎" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "%sAltor" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." @@ -243,7 +236,7 @@ msgstr "" "Instalação automática de bibliotecas não pode ser realizada neste caso. Por " "favor, remova todas as cópias manualmente e tente novamente." -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." @@ -251,11 +244,11 @@ msgstr "" "Desinstalação automática de bibliotecas não pode ser realizada neste caso. " "Por favor, as remova manualmente e tente novamente. " -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "Disponível‎" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "Comandos Disponíveis:" @@ -263,154 +256,159 @@ msgstr "Comandos Disponíveis:" msgid "Binary file to upload." msgstr "‎Arquivo binário para carregar.‎" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "Nome da Placa" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "Nome da Placa:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "Versão da Placa:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "" "Um Arquivo carregador de inicialização definido, mas está faltando: %[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." msgstr "" -"Builds de 'core.a' são salvos nesse caminho para serem armazenados no Cache " -"e reutilizados. " -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "Não é possível criar o diretório de dados %s" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "Não é possível criar esboço" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "Não é possível baixar biblioteca" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "Não foi possível encontrar as dependências para a plataforma %s" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "Não é possível abrir esboço" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "Não é possível designar múltiplos valores na chave %v" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "Não é possível atualizar o esboço" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "Não é possível utilizar as seguintes Flags ao mesmo tempo: %s" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "Não é possível escrever para o arquivo de configuração: %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "Não é possível escrever para o arquivo de depuração: %s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "Não é possível criar Build do diretório de Cache" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "Não é possível criar Build do diretório" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "Não é possível criar diretório de arquivo de configuração: %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "Não é possível criar arquivo de configuração: %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "Não é possível criar diretório temporário" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "Não é possível criar arquivo temporário" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "Não é possível deletar a chave %[1]s:%[2]v" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "Não é possível executar ferramenta de depuração" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "Não é possível encontrar caminho absoluto: %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "Não é possível obter a chave de configuração %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "Não é possível instalar plataforma" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "Não é possível instalar ferramenta %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "Não é possível realizar redefinição de porta: %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "Não é possível remover a chave de configuração %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 msgid "Cannot upgrade platform" msgstr "Não é possível realizar Upgrade na plataforma" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "Não é possível escrever para o arquivo %[1]s:%[2]v" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "Categoria: %s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "Verifique o estado das dependências para a biblioteca especificada." -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" +"Verifique se a combinação placa/programador fornecida suporta depuração." + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "Checksum difere da Checksum em packages.json" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "Checksum: " -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "Limpar Caches." -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "" "Lista de valores separados por vírgula para URLs adicionais para o " "Gerenciador de Placas" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." @@ -418,46 +416,46 @@ msgstr "" "Comando continua a executar e a imprimir lista de placas conectadas sempre " "que ocorrer uma mudança." -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "Esboço compilado não encontrado em %s" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "Compila esboços Arduino." -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "Compilando núcleo..." -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "Compilando bibliotecas..." -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "%[1]s‎Biblioteca de compilação‎ \"\"" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "Compilando sketch..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "" "Arquivo de configuração já existe, use --overwrite para descartar o arquivo " "atual." -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "%s‎Arquivo Config escrito para:‎" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "Opções de configuração para %s" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." @@ -465,43 +463,43 @@ msgstr "" "Designe as configurações da porta de comunicação. O formato é <ID> = " "<value>[,<ID> = <value>]..." -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "Configurando plataforma." -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "Configurando ferramenta." -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "Conectado" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "Conectado para %s! Aperte CTRL-C para sair." +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "Conectando a %s. Pressione CTRL-C para sair." -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "Núcleo" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "Não foi possível conectar via HTTP" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "Não foi possível criar diretório Index" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "Não foi possível fazer o Cache profundo para a Build central: %[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "Não foi possível determinar o tamanho do programa" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "Não foi possível obter o diretório de trabalho atual: %v" @@ -509,7 +507,7 @@ msgstr "Não foi possível obter o diretório de trabalho atual: %v" msgid "Create a new Sketch" msgstr "Criar novo Esboço" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "Criar e imprimir perfil de configuração da Build." @@ -517,7 +515,7 @@ msgstr "Criar e imprimir perfil de configuração da Build." msgid "Creates a zip file containing all sketch files." msgstr "Cria um arquivo .zip contendo todos os arquivos de esboço." -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." @@ -525,7 +523,7 @@ msgstr "" "Cria ou atualiza o arquivo de configuração no diretório de dados ou em um " "diretório customizado com as definições de configuração atuais." -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." @@ -533,94 +531,91 @@ msgstr "" "Atualmente, os Perfis de Build só suportam bibliotecas disponíveis através " "do Gerenciador de Bibliotecas Arduino." -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" +msgstr "Configuração personalizada para %s:" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "DESCONTINUADO" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "Daemon agora está ouvindo em %s:%s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "Depurar esboços Arduino." -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "" "Depurar esboços Arduino (esse comando abre uma sessão interativa com o " "depurador gdb)." -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "Depurar interpretador e.g.:%s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "Depuramento não é suportado para a placa %s" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "Depuramento suportado:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "Padrão" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "Padrão FQBN definido como" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "Porta padrão definida como" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "Programador padrão definido para" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "" "Deletar Placas/Cache de arquivos baixados do Gerenciador de Bibliotecas" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." msgstr "" -"Deletar conteúdo do diretório 'directories.downloads', onde arquivos de " -"depósito são criados durante a instalação de bibliotecas e de plataformas de" -" placas." #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "Deleta a chave de configurações e todas as suas sub-chaves." -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "Dependências: %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "Descrição" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "Detectando bibliotecas utilizadas..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "Detecta e mostra a lista de placas conectadas ao computador atual." -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "Diretório com arquivos binários para depuração." -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "Diretório com arquivos binários para serem enviados." @@ -636,248 +631,259 @@ msgstr "" msgid "Disable completion description for shells that support it" msgstr "Desabilitar a realização de descrições para Shells que suportam isso." -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "Desconectado" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "Mostrar apenas as chamadas gRPC oferecidas" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "Não instale dependências." -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "Não sobrescreva bibliotecas já instaladas." -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "Não sobrescreva plataformas já instaladas." -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "Não faça um envio verdadeiro, apenas registre as ações." -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "Não encerre o processo Daemon se o processo relacionado morrer." -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "Baixando %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "Baixando assinatura Indes: %s" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "Baixando Index: %s" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "Baixando biblioteca %s" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "Baixando ferramenta %s" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "Baixando pacotes" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "Baixando plataforma %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "Baixando ferramenta %s" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "" "Baixe um ou mais núcleos e dependências de ferramentas correspondentes." -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "Baixe uma ou mais bibliotecas sem instalá-las." -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "Ligue registros de depuração para chamadas gRPC" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "Insira caminho para arquivo zip" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "Insira URL git para bibliotecas hospedadas em repositórios" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "Erro ao adicionar arquivo de esboço para o depósito de documentos" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "Erro ao adicionar Build do Núcleo (caching) em %[1]s:%[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "Erro ao adicionar para o depósito de documentos: %v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "Erro ao calcular caminho de arquivo relativo" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "Erro ao limpar caches: %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "Erro ao converter caminho para absoluto: %v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "Erro ao copiar arquivo de saída %s" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "Erro ao criar instância: %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "Erro ao criar diretório de saída" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "Erro ao criar diretório de esboços" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "Erro ao criar esboço: %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "Erro ao detectar placas: %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "Erro ao baixar %[1]s: %[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "Erro ao baixar %s" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "Erro ao baixar índice '%s'" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "Erro ao baixar assinatura de índice '%s'" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "Erro ao baixar biblioteca %s" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "Erro ao baixar plataforma %s" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "Erro ao baixar ferramenta %s" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "Erro durante Depuramento: %v" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "Erro durante detecção FQBN: %v" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "Erro durante codificação da saída JSON: %v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "Erro durante envio: %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "Erro durante codificação da saída YAML: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" +msgstr "" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "Erro durante build: %v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "Erro durante instalação: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "Erro durante desinstalação: %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "Erro durante atualização: %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "Erro ao extrair %s" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "Erro ao buscar por artefatos da Build" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "Erro ao obter informações de Depuração: %v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "Erro ao obter caminho absoluto do arquivo de esboço" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "Erro ao obter detalhes da placa: %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "" "Erro ao obter o diretório atual para o banco de dados de compilação: %s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "Erro ao obter informações da biblioteca %s" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "Erro ao obter informações sobre as bibliotecas: %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "Erro ao obter metadata da porta: %v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "Erro ao obter detalhes das configurações da porta: %s" @@ -885,42 +891,42 @@ msgstr "Erro ao obter detalhes das configurações da porta: %s" msgid "Error getting user input" msgstr "Erro ao obter entrada do usuário" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "Erro ao inicializar instância: %v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "Erro ao instalar %s: %v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "Erro ao instalar biblioteca Git: %v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "Erro ao instalar biblioteca Zip: %v" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "Erro ao instalar biblioteca %s" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "Erro ao instalar plataforma %s" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "Erro ao instalar ferramenta %s" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "Erro ao instalar placas: %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "Erro ao listar bibliotecas: %v" @@ -928,44 +934,40 @@ msgstr "Erro ao listar bibliotecas: %v" msgid "Error listing platforms: %v" msgstr "Erro ao listar plataformas: %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "Erro ao carregar plataformas de hardware" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "Erro ao carregar índice %s" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "Erro ao abrir %s" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "Erro ao abrir arquivo de registro de depuração: %s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "Erro ao abrir arquivo de dados que sobrescrevem o código fonte: %v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "Erro ao fazer análise sintática na flag --show-properties: %v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "Erro ao ler diretório de build" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "Erro ao ler arquivo de configuração: %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "Erro ao ler arquivos de esboço" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "Erro ao esclarecer dependências para %[1]s: %[2]s" @@ -973,158 +975,173 @@ msgstr "Erro ao esclarecer dependências para %[1]s: %[2]s" msgid "Error retrieving core list: %v" msgstr "Erro ao adquirir lista de núcleos: %v" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "Erro ao reverter mudanças: %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "Erro ao salvar índice baixado" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "Erro ao salvar assinatura de índice baixado" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "Erro ao buscar por placas: %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "Erro ao buscar por bibliotecas: %v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "Erro ao buscar por plataformas: %v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "Erro ao serializar compilação do banco de dados: %s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "Erro ao inicializar busca: %v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "Erro ao desinstalar %[1]s: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "Erro ao atualizar índice de biblioteca: %v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "Erro ao atualizar bibliotecas" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "Erro ao atualizar plataforma: %s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "Erro ao verificar assinatura" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "Erro ao detectar bibliotecas incluídas por %[1]s" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "Erro ao determinar tamanho do esboço: %s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "Erro ao escrever compilação de banco de dados: %s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "Erro: descrição de comando não suportado por %v" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "Erro: arquivo de dados que sobrescrevem o código fonte inválido: %v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "Evento" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "Exemplos para biblioteca %s" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "Exemplos:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "Executável para depurar" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "" "Um esboço compilado era esperado no diretório %s, mas um arquivo foi " "encontrado." -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "Falha ao apagar chip" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "Falha ao programar" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "Falha ao gravar carregador de inicialização" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "Falha ao criar diretório de dados" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "Falha ao criar diretório de downloads" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "Falha ao ouvir porta TCP: %[1]s. %[2]s é uma porta inválida." -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "Falha ao ouvir porta TCP: %[1]s. %[2]s é nome desconhecido." -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "Falha ao ouvir porta TCP: %[1]s. Erro inesperado: %[2]v" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "Falha ao ouvir porta TCP: %s. Endereço já está em uso." -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "Falha ao enviar" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "Arquivo:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" @@ -1132,53 +1149,53 @@ msgstr "" "Encriptação/assinatura de firmware requer que todas as propriedades a seguir" " sejam definidas: %s" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "" "A primeira mensagem deve conter uma requisição de depuração, e não dados." -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "A flag %[1]s é mandatória quando usada em conjunto com: %[2]s" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "Flags:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "" "Force a execução de scripts de pós instalação (se a Linha de Comando não " "estiver no modo interativo)." -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "" "Pule a execução de scripts de pós instalação (se a Linha de Comando estiver " "no modo interativo)." -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "Nome de Placa Completamente Qualificada. E.g.: arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "Servidor GDB '%s' não é suportado" @@ -1195,15 +1212,19 @@ msgstr "Gera scripts de conclusão" msgid "Generates completion scripts for various shells" msgstr "Gera scripts de conclusão para várias Shells" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "Gerando protótipos de função..." -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "Flags Globais:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." @@ -1211,31 +1232,31 @@ msgstr "" "Variáveis globais usam %[1]s bytes (%[3]s%%) de memória dinâmica, restando " "%[4]s bytes para variáveis locais. O maximo é %[2]s bytes." -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "Variáveis globais usam %[1]s bytes de memória dinâmica." -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "Propriedades de identificação:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "" "Se designado, binárias de build serão exportadas para o diretório de " "esboços." -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." @@ -1243,171 +1264,170 @@ msgstr "" "Se designado, retorna todos os núcleos instaláveis e instalados, incluído os" " instalados manualmente." -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "Inclua bibliotecas embutidas (de plataformas e de IDE) na listagem." -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "Inclui o diretório %s no registro." -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "Instalar bibliotecas no Diretório Embutido da IDE." -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "Instalado" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "%s instalado" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "Instalado %s" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "Instalando biblioteca %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "Instalando plataforma %s" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "Instalando ferramenta %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "" "Instalando um ou mais núcleos e suas dependências de ferramenta " "correspondentes." -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "Instala uma ou mais bibliotecas especificadas no sistema." -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "Erro interno no Cache" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "Propriedade '%[1]s' inválida: %[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "" -"Chamada inválida: deveria mostrar Ajuda, mas é avaliável apenas no modo " -"TEXT." - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "FQBN inválido" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "Endereço TCP inválido: a porta está faltando " -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "URL inválida" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "URL adicional inválida: %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" msgstr "" -"Depósito de documento inválido: arquivo %{1}s não encontrado no depósito " -"%{2}s" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "Argumento inválido passado: %v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "Propriedades de compilação inválidas" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "Tamanho de dados para regexp inválida: %s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "Regexp de tamanho EEPROM inválida: %s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "Instância inválida" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "Item inválido %s" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "Biblioteca inválida" -#: configuration/network.go:63 +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "" + +#: internal/cli/configuration/network.go:83 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "network.proxy inválido: '%[1]s':%[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "Opção inválida para --log-level: %s" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "Formato de saída inválido: %s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "Índice de pacote inválido em %s" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "Parâmetro %s inválido: versão não permitida" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "Valor PID inválido: '%s'" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "Perfil inválido" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "Receita inválida em platform.txt" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "Tamanho de regexp inválido: %s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "Limite de tempo inválido: %s" +#: main.go:86 +msgid "Invalid value in configuration" +msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "Versão inválida" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "Valor vid inválido: '%s'" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." @@ -1415,74 +1435,75 @@ msgstr "" "Produza apenas compilações de banco de dados, mas sem compilar. Todos os " "comandos de build serão pulados, exceto os ganchos pre*." -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "NOMEBIBL" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "BIBLIOTECA" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "NOME_BIBLIOTECA" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "Mais recente" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "A biblioteca %[1]s foi declarada como pré-compilada:" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "" "A biblioteca %[1]s já está instalada, mas com uma versão diferente: %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "A biblioteca %s já está instalada em sua versão mais recente." -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "A biblioteca %s não está instalada" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "A biblioteca %s não foi encontrada" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "A biblioteca '%s' não foi encontrada" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "" "A biblioteca não pode usar ambos os diretórios '%[1]s' e '%[2]s'. Cheque " "novamente em '%[3]s'." -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "Instalação de biblioteca falhou" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "Biblioteca instalada" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "Licença: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "Vinculando tudo..." -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" @@ -1490,15 +1511,15 @@ msgstr "" "Listar todas as placas que já possuem a plataforma de suporte instalada. " "Você pode buscar por uma placa específica se você especificar o nome dela." -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "Listar todas as placas conhecidas e os seus FQBN correspondentes." -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "Listar todas as placas conectadas." -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." @@ -1506,7 +1527,7 @@ msgstr "" "Listar todas as opções de placas separadas por vírgula. Ou pode ser usado " "múltiplas vezes para múltiplas opções." -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." @@ -1514,15 +1535,15 @@ msgstr "" "Listar todas as propriedades de build customizadas, separadas por vírgula. " "Ou pode ser usado múltiplas vezes para múltiplas opções." -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "Listar bibliotecas atualizáveis." -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "Listar plataformas atualizáveis." -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "Listar todas as placas conectadas." @@ -1530,54 +1551,60 @@ msgstr "Listar todas as placas conectadas." msgid "Lists cores and libraries that can be upgraded" msgstr "Listar núcleos e bibliotecas que podem ser atualizadas" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "Carregando arquivo Index: %v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "Localização" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "Pouca memória disponível, podem ocorrer problemas de estabilidade." -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "Mantedor: %s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "Tempo máximo para esperar a descoberta de porta. E.g.: 30s, 1m" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "" "Mensagens com esse nível e acima serão registradas. Níveis válidos são: %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "'%[1]s' está faltando da biblioteca em %[2]s" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "FQBN (Nome de Placa Totalmente Qualificado) está faltando" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "Porta faltando" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "Endereço de porta faltando" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "Protocolo de porta faltando" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "Programador faltando" @@ -1585,61 +1612,61 @@ msgstr "Programador faltando" msgid "Missing required upload field: %s" msgstr "" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "Tamanho de regexp faltando" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "Caminho para esboço faltando" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "Monitor '%s' não encontrado" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "Configurações da porta do monitor:" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "Múltiplas bibliotecas foram encontradas para \"%[1]s\"" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "Nome" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "Nome: \"%s\"" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "Nenhuma placa encontrada." -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "Sem porta ou FQBN padrões." +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "Nenhuma biblioteca foi encontrada." -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "Nenhuma biblioteca instalada." -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "Nenhuma biblioteca correspondente à sua busca." -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1647,53 +1674,53 @@ msgstr "" "Nenhuma biblioteca correspondente à sua busca.\n" "Você quis dizer...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "Nenhuma atualização de bibliotecas disponível." -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "Sem monitor disponível para o protocolo de porta %s" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "Nenhuma plataforma ou biblioteca desatualizada encontrada." -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "Nenhuma plataforma instalada." -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "Nenhuma plataforma correspondente à sua busca." -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "Nenhuma porta de envio encontrada, usando %s como reserva" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "Sem solução válida para dependências encontrada " -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "" "Memória insuficiente: veja %[1]s para sugestões sobre como reduzir a sua " "pegada." -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "Não utilizado: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "SO:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "Placa Arduino oficial:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." @@ -1701,43 +1728,43 @@ msgstr "" "Esconder detalhes da biblioteca para todas as versões exceto a mais recente " "(produz uma saída JSON mais compacta)." -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "Abra uma porta de comunicação com a placa." -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "Opção:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "" "Opcional, pode ser: %s. Usado para indicar ao GCC qual nível de alerta " "utilizar (flag -W)." -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "" "Opcional, limpeza do diretório de compilação e não utilização de nenhuma " "compilação em cache." -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "" "Opcional, otimize saída de compilação para depuração, ao invés de " "lançamento." -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "Opcional, esconde quase qualquer saída. " -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "Opcional, liga o modo verboso." -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." @@ -1745,7 +1772,7 @@ msgstr "" "Opcional. Caminho para um arquivo .json que contém um conjunto de " "substituições do código fonte do esboço." -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." @@ -1753,52 +1780,65 @@ msgstr "" "Sobrescreva uma propriedade de compilação com um valor customizado. Pode ser" " utilizado múltiplas vezes para múltipas propriedades. " -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "Sobrescrever o arquivo de configuração existente. " -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "Sobrescreve um depósito de documentos existente." -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "Sobrescreve um esboço .ino existente." -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "EMPACOTADOR" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "URL do pacote:" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "Responsável pela manutenção do pacote:" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "Nome do pacote:" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "Ajuda online para o pacote:" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "Website do pacote:" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "Parágrafo: %s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "Caminho" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." @@ -1806,7 +1846,7 @@ msgstr "" "Caminho para a coleção de bibliotecas. Pode ser utilizado múltiplas vezes. " "Entradas podem ser separadas por vírgulas." -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." @@ -1814,11 +1854,11 @@ msgstr "" "Caminho para o diretório raíz de uma biblioteca. Pode ser utilizado " "múltiplas vezes. Entradas podem ser separadas por vírgulas." -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "Caminho para o arquivo onde os registros de dados serão escritos." -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." @@ -1826,19 +1866,20 @@ msgstr "" "Caminho para onde salvar arquivos compilados. Se omitido, um diretório vai " "ser criado no caminho temporário padrão do seu SO." -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "Executando toque de redefinição de 1200-bps na porta serial %s" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "Plataforma %s já está instalada" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "Plataforma %s instalada" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1846,55 +1887,55 @@ msgstr "" "A plataforma %s não foi encontrada em nenhum índice conhecido\n" "Talvez você precise adicionar uma URL externa de 3ºs?" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "Plataforma %s desinstalada. " -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "Plataforma '%s' já está em sua versão mais recente." -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "Plataforma '%s' não encontrada" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "ID da Plataforma" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "ID da Plataforma incorreto" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "URL da Plataforma:" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "Arquitetura da Plataforma:" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "Categoria da Plataforma:" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "Checksum da plataforma:" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "Nome de arquivo da Plataforma:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "Nome da Plataforma:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "Tamanho da Plataforma (em bytes):" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" @@ -1902,7 +1943,7 @@ msgstr "" "Por favor especifique um FQBN. Possíveis placas foram detectadas na porta " "%[1]s com o protocolo %[2]s" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" @@ -1910,34 +1951,39 @@ msgstr "" "Por favor especifique um FQBN. A placa na porta %[1]s com o protocolo %[2]s " "não pode ser identificada" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "Porta" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "Porta fechada: %v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "Erro no monitor de portas" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "Biblioteca pré-compilada em \"%[1]s\" não foi encontrada" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "Imprimir detalhes sobre a placa." -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "Imprimir código pré-processado para stdout ao invés de compilar." -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "Imprimir as informações de registro para a saída padrão." +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "Imprime a configuração atual" @@ -1946,179 +1992,224 @@ msgstr "Imprime a configuração atual" msgid "Prints the current configuration." msgstr "Imprime a configuração atual." -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "Perfil '%s' não encontrado" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "Programador '%s' não encontrado" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "Nome do programador " -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "Programador para utilizar, ex: atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "Programadores:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "Propriedade '%s' não definida" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "Protocolo" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "Providenciar includes: %s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "Remove um ou mais valores de uma configuração." -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "Substituindo %[1]s com %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "Substituindo plataforma %[1]s com %[2]s" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "Ferramenta necessária:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "Execute como um daemon na porta: %s" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "" "Execute no modo silencioso e mostre apenas a entrada e a saída do monitor." -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." msgstr "" -"Ao executar como um daemon, a inicialização de núcleos e bibliotecas é feita" -" apenas uma vez." -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "Executando compilação normal do núcleo..." -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "Salve artefatos de compilação neste diretório." -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "" "Busque por uma placa no Gerenciador de Placas usando as palavras-chave " "especificadas." -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "Busque por uma placa no Gerenciador de Placas." -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "" "Busque por um núcleo no Gerenciador de Placas usando as palavras-chave " "especificadas." -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "Busque por um núcleo no Gerenciador de Placas." -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" msgstr "" -"Busque pelos dados de uma ou mais bibliotecas (a busca ignora maiúsculas e " -"minúsculas)." -#: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "Busque pelos dados de uma ou mais bibliotecas." +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "" -#: internal/cli/lib/search.go:157 +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "Sentença: %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "Servidor respondeu com: %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." msgstr "" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." msgstr "" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "Define um valor de configuração." -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 +msgid "" +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." +msgstr "" + +#: internal/cli/board/attach.go:37 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" msgstr "" -"Define os valores padrões para porta e FQBN. Se nenhuma porta ou FQBN for " -"especificado, a porta e FQBN atuais vão ser utilizadas. " -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "Define onde o arquivo de configuração deve ser salvo." -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "Configuração" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "Chave de configuração não existe" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "Mostre todas as versões de núcleo disponíveis." -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "Mostre todas as configurações da porta de comunicação." -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "Mostre placas marcadas como 'escondidas' na plataforma" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." @@ -2127,11 +2218,11 @@ msgstr "" "\"--show-properties=unexpanded\" se você quer ver elas da exata maneira em " "que estão definidas. " -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "Mostrar todos os detalhes da placa" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." @@ -2139,15 +2230,15 @@ msgstr "" "Mostrar informações sobre uma placa, em específica se a placa possuir opções" " que devem ser especificadas no FQBN." -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "Mostrar apenas nomes de bibliotecas." -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "Mostrar lista de todos os programadores disponíveis" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "" @@ -2159,11 +2250,11 @@ msgid "Show outdated cores and libraries after index update" msgstr "" "Mostrar bibliotecas e núcleos desatualizados após a atualização de índice" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "Mostra uma lista de todas as bibliotecas instaladas." -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2177,15 +2268,15 @@ msgstr "" "Por padrão, as bibliotecas embutidas providenciadas pelas plataformas/núcleos\n" "não são listadas, mas podem ser adicionadas com a flag --all." -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "Mostra a lista de plataformas instaladas." -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "Mostra a lista de exemplos para bibliotecas." -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." @@ -2193,20 +2284,20 @@ msgstr "" "Mostra a lista de exemplos para bibliotecas. Um nome pode ser passado como " "argumento para buscar por uma biblioteca específica." -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "Mostra a versão da CLI Arduino instalada no seu sistema." -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "Mostra o número de versão da CLI Arduino." -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "Tamanho (em bytes):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" @@ -2214,21 +2305,21 @@ msgstr "" "O Esboço não pode ser localizado no caminho de compilação. Por favor " "especifique um caminho diferente." -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "Esboço criado em: %s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "Perfil de Esboço para utilizar" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "" "O rascunho é demasiado grande; veja %[1]s para técnicas de reduzir o " "ficheiro." -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." @@ -2236,7 +2327,7 @@ msgstr "" "O rascunho usa %[1]s bytes (%[3]s%%) do espaço de armazenamento do programa." " O máximo é %[2]s bytes." -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" @@ -2244,74 +2335,92 @@ msgstr "" "Esboços com a extensão. pde estão descontinuados. Por favor renomeie os " "seguintes arquivos para .ino:" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "Pule a vinculação da executável final." -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "" "Pulando o toque de redefinição 1200-bps: nenhuma porta serial foi " "selecionada!" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "Pulando a criação de depósito de documentos de: %[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "Pulando a compilação de: %[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "" "Pulando detecção de dependências para a biblioteca pré-compilada %[1]s" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "Pulando configuração de plataforma." -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "Pulando configuração de ferramenta." -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "Pulando: %[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "Alguns índices não puderam ser atualizados." -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "" "Algumas atualizações falharam, por favor veja a saída para mais detalhes." -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOQUE: erro durante redefinição: %s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:78 msgid "The TCP port the daemon will listen to" msgstr "O daemon da porta TCP irá ouvir em" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" + +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "" "O arquivo de configuração customizado (caso não seja definido, o padrão vai " "ser usado)." -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "A flag --debug-file deve ser usada junto de --debug." -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2319,7 +2428,7 @@ msgstr "" "A chave '%[1]v' não é uma lista de itens. Não é possível adicionar nela.\n" "Talvez tente usar '%[2]s'?" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2327,11 +2436,11 @@ msgstr "" "A chave '%[1]v' não é uma lista de itens. Não é possível remover dela.\n" "Talvez tente usar '%[2]s'?" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "A biblioteca %s possui múltiplas instalações:" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." @@ -2340,7 +2449,7 @@ msgstr "" "binários durante o processo de compilação. Usado apenas por plataformas que " "possuem suporte." -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." @@ -2349,11 +2458,11 @@ msgstr "" "resultados binários durante o processo de compilação. Usado apenas por " "plataformas que possuem suporte." -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "Os formatos de saída para os arquivos de registro podem ser: %s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." @@ -2362,11 +2471,11 @@ msgstr "" "e criptografar um resultado binário. Usado apenas por plataformas que " "possuem suporte." -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "A plataforma não suporta '%[1]s' para bibliotecas pré-compiladas." -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2387,105 +2496,106 @@ msgstr "" "podem ser atualizadas. Se nada precisar ser atualizado, a saída do comando " "será vazia." -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "Ferramenta %s já está instalada" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "" @@ -2497,23 +2607,23 @@ msgstr "" msgid "Updates the index of cores and libraries to the latest versions." msgstr "" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "" @@ -2525,155 +2635,166 @@ msgstr "" msgid "Upgrades installed cores and libraries." msgstr "" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" msgstr "" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "Utilizado: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "A usar a biblioteca %[1]s na directoria: %[2]s %[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "A usar o ficheiro previamente compilado: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." @@ -2682,46 +2803,42 @@ msgstr "" "%[2]s e pode ser incompatível com a sua placa actual que é executada em " "arquitectura(s) %[3]s." -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "" @@ -2729,370 +2846,341 @@ msgstr "" msgid "archivePath" msgstr "" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" msgstr "" -#: internal/cli/feedback/stdio.go:35 -msgid "available only in text format" +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" msgstr "" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "" -#: arduino/resources/install.go:67 -msgid "extracting archive: %s" +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" msgstr "" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" msgstr "" -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" msgstr "" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" msgstr "" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "" @@ -3104,343 +3192,348 @@ msgstr "" msgid "invalid empty library version: %s" msgstr "" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" +#: internal/cli/core/search.go:39 +msgid "keywords" msgstr "" -#: internal/cli/core/search.go:45 -msgid "keywords" +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" msgstr "" -#: arduino/libraries/librariesmanager/install.go:130 -msgid "library %s already installed" +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" msgstr "" -#: arduino/libraries/librariesmanager/install.go:319 -msgid "library not valid" +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" msgstr "" -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" msgstr "" -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 -msgid "loading %[1]s: %[2]s" +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" msgstr "" -#: arduino/cores/packagemanager/loader.go:351 -msgid "loading boards: %s" +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" msgstr "" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:298 -msgid "platform %s is not installed" +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "" @@ -3448,294 +3541,280 @@ msgstr "" msgid "port not found: %[1]s %[2]s" msgstr "" -#: arduino/monitor/monitor.go:236 -msgid "protocol version not supported: requested %[1]d, got %[2]d" -msgstr "" - -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" +#: internal/cli/board/attach.go:35 +msgid "programmer" msgstr "" -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "" -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" msgstr "" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" msgstr "" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "" "%[1]s‎existem duas versões diferentes da biblioteca‎%[2]s‎são " "necessárias:‎%[3]se" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "" "não é possível encontrar o caminho relativo para o esboço para o item‎" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "‎não é possível criar uma pasta para salvar o sketch" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "‎não é possível criar a pasta contendo o item‎" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "‎não é possível de ler o conteúdo do item de destino‎" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "‎não é possível ler o conteúdo do item de origem‎" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "‎incapaz de escrever para o arquivo de destino‎" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "%spacote desconhecido" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "%splataforma desconhecida%s:" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "%s‎extensão do arquivo sketch é desconhecido‎' '" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "%s não há suporte ‎algoritmo hash:‎" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "‎atualizar arduino: samd para a versão mais recente‎" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "‎atualizar tudo para a versão mais recente‎" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "%serro ao carregar" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "%sversão ‎não disponível para este sistema operacional‎" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "%s versão não encontrada" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "‎formato errado na resposta do servidor‎" diff --git a/i18n/data/pt_BR.po b/internal/locales/data/pt_BR.po similarity index 100% rename from i18n/data/pt_BR.po rename to internal/locales/data/pt_BR.po diff --git a/internal/locales/data/ru.po b/internal/locales/data/ru.po new file mode 100644 index 00000000000..aafad8a7d3f --- /dev/null +++ b/internal/locales/data/ru.po @@ -0,0 +1,3911 @@ +# +# Translators: +# Дмитрий Кат, 2022 +# CLI team <prj_cli_team@arduino.cc>, 2022 +# Bakdaulet Kadyr <qadyr.bagdaulet@gmail.com>, 2022 +# lidacity <dzmitry@lidacity.by>, 2024 +# Александр Минкин <weryskok@gmail.com>, 2024 +# ildar <v_ildar@bk.ru>, 2024 +# Asdfgr Wertyu, 2025 +# +msgid "" +msgstr "" +"Last-Translator: Asdfgr Wertyu, 2025\n" +"Language-Team: Russian (https://app.transifex.com/arduino-1/teams/108174/ru/)\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: internal/version/version.go:56 +msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" +msgstr "%[1]s%[2]s Версия: %[3]s Коммит: %[4]s Дата: %[5]s" + +#: internal/arduino/builder/internal/detector/detector.go:462 +msgid "%[1]s folder is no longer supported! See %[2]s for more information" +msgstr "Каталог %[1]s более не поддерживается! Более подробно в %[2]s" + +#: internal/arduino/builder/build_options_manager.go:140 +msgid "%[1]s invalid, rebuilding all" +msgstr "%[1]s недействителен, пересборка всего" + +#: internal/cli/lib/check_deps.go:125 +msgid "%[1]s is required but %[2]s is currently installed." +msgstr "Требуется %[1]s, но в данный момент устанавливается %[2]s" + +#: internal/arduino/builder/builder.go:487 +msgid "%[1]s pattern is missing" +msgstr "%[1]s не найден шаблон" + +#: internal/arduino/resources/download.go:51 +msgid "%s already downloaded" +msgstr "%s уже скачана" + +#: commands/service_upload.go:782 +msgid "%s and %s cannot be used together" +msgstr "%s не может быть использована вместе с %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 +msgid "%s installed" +msgstr "%s установлен" + +#: internal/cli/lib/check_deps.go:122 +msgid "%s is already installed." +msgstr "%s уже установлено." + +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 +msgid "%s is not a directory" +msgstr "%s не является директорией" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 +msgid "%s is not managed by package manager" +msgstr "%s не управляется менеджером пакетов" + +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "%s должно быть >= 1024" + +#: internal/cli/lib/check_deps.go:119 +msgid "%s must be installed." +msgstr "%s должен быть установлен." + +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 +msgid "%s pattern is missing" +msgstr "не найден шаблон %s" + +#: commands/cmderrors/cmderrors.go:818 +msgid "'%s' has an invalid signature" +msgstr "'%s' имеет неправильную сигнатуру " + +#: internal/arduino/cores/packagemanager/package_manager.go:416 +msgid "" +"'build.core' and 'build.variant' refer to different platforms: %[1]s and " +"%[2]s" +msgstr "" +"'build.core' и 'build.variant' относятся к разным платформам: %[1]s и %[2]s" + +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 +msgid "(hidden)" +msgstr "(скрытый)" + +#: internal/arduino/builder/libraries.go:303 +msgid "(legacy)" +msgstr "(устаревшее)" + +#: internal/cli/lib/install.go:82 +msgid "" +"--git-url and --zip-path are disabled by default, for more information see: " +"%v" +msgstr "" +"--git-url и --zip-path отключены по умолчанию, для подробностей смотрите: %v" + +#: internal/cli/lib/install.go:84 +msgid "" +"--git-url and --zip-path flags allow installing untrusted files, use it at " +"your own risk." +msgstr "" +"Флаги --git-url и --zip-path позволяют устанавливать недоверенные файлы, " +"используйте их на свой страх и риск." + +#: internal/cli/lib/install.go:87 +msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" +msgstr "" +"--git-url или --zip-path не могут быть использованы с --install-in-builtin-" +"dir" + +#: commands/service_sketch_new.go:66 +msgid ".ino file already exists" +msgstr "файл .ino уже существует" + +#: internal/cli/updater/updater.go:30 +msgid "A new release of Arduino CLI is available:" +msgstr "Доступен новый релиз Arduino CLI:" + +#: commands/cmderrors/cmderrors.go:299 +msgid "A programmer is required to upload" +msgstr "Требуется программатор для загрузки" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "ARCH" +msgstr "ARCH" + +#: internal/cli/generatedocs/generatedocs.go:80 +msgid "ARDUINO COMMAND LINE MANUAL" +msgstr "ИНСТРУКЦИЯ КОМАНДНОЙ СТРОКИ ARDUINO" + +#: internal/cli/usage.go:28 +msgid "Additional help topics:" +msgstr "Дополнительные темы помощи:" + +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 +msgid "Adds one or more values to a setting." +msgstr "Добавляет одно или несколько значений в настройку." + +#: internal/cli/usage.go:23 +msgid "Aliases:" +msgstr "Псевдонимы:" + +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "Все платформы актуальны." + +#: internal/cli/core/upgrade.go:87 +msgid "All the cores are already at the latest version" +msgstr "Все ядра уже на последней версии" + +#: commands/service_library_install.go:136 +msgid "Already installed %s" +msgstr "Уже установленно %s" + +#: internal/arduino/builder/internal/detector/detector.go:91 +msgid "Alternatives for %[1]s: %[2]s" +msgstr "Альтернативы для %[1]s: %[2]s" + +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 +msgid "An error occurred adding prototypes" +msgstr "Произошла ошибка при добавлении прототипов" + +#: internal/arduino/builder/internal/detector/detector.go:213 +msgid "An error occurred detecting libraries" +msgstr "Произошла ошибка при обнаружении библиотек" + +#: internal/cli/daemon/daemon.go:87 +msgid "Append debug logging to the specified file" +msgstr "Дописывать журнал отладки в указанный файл" + +#: internal/cli/lib/search.go:208 +msgid "Architecture: %s" +msgstr "Архитектура: %s" + +#: commands/service_sketch_archive.go:69 +msgid "Archive already exists" +msgstr "Архив уже существует" + +#: internal/arduino/builder/core.go:164 +msgid "Archiving built core (caching) in: %[1]s" +msgstr "Архивирование откомпилированного ядра (кэширование) в: %[1]s" + +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 +msgid "Arduino CLI sketch commands." +msgstr "Команды скетчей Arduino CLI." + +#: internal/cli/cli.go:88 +msgid "Arduino CLI." +msgstr "Arduino CLI." + +#: internal/cli/cli.go:89 +msgid "Arduino Command Line Interface (arduino-cli)." +msgstr "Интерфейс командной строки Arduino (arduino-cli)." + +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 +msgid "Arduino board commands." +msgstr "Команды платы Arduino." + +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 +msgid "Arduino cache commands." +msgstr "Команды кэширования Arduino." + +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 +msgid "Arduino commands about libraries." +msgstr "Команды Arduino для библиотек." + +#: internal/cli/config/config.go:35 +msgid "Arduino configuration commands." +msgstr "Команды конфигурации Arduino." + +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 +msgid "Arduino core operations." +msgstr "Операции ядра Arduino." + +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 +msgid "Arguments error: %v" +msgstr "Ошибка в аргументах: %v" + +#: internal/cli/board/attach.go:36 +msgid "Attaches a sketch to a board." +msgstr "Прикрепляет скетч к плате." + +#: internal/cli/lib/search.go:199 +msgid "Author: %s" +msgstr "Автор: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:78 +msgid "" +"Automatic library install can't be performed in this case, please manually " +"remove all duplicates and retry." +msgstr "" +"В этом случае автоматическая установка библиотеки невозможна, пожалуйста, " +"удалите все дубликаты вручную и повторите попытку." + +#: commands/service_library_uninstall.go:87 +msgid "" +"Automatic library uninstall can't be performed in this case, please manually" +" remove them." +msgstr "" +"В этом случае автоматическое удаление библиотек невозможно, пожалуйста, " +"удалите их вручную." + +#: internal/cli/lib/list.go:138 +msgid "Available" +msgstr "Доступно" + +#: internal/cli/usage.go:25 +msgid "Available Commands:" +msgstr "Доступные команды:" + +#: internal/cli/upload/upload.go:75 +msgid "Binary file to upload." +msgstr "Двоичный файл для загрузки." + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "Board Name" +msgstr "Наименование платы" + +#: internal/cli/board/details.go:139 +msgid "Board name:" +msgstr "Наименование платы:" + +#: internal/cli/board/details.go:141 +msgid "Board version:" +msgstr "Версия платы:" + +#: internal/arduino/builder/sketch.go:245 +msgid "Bootloader file specified but missing: %[1]s" +msgstr "Файл загрузчика указан но не существует: %[1]s" + +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." +msgstr "" +"Сборки ядер и скетчей сохраняются по этому пути для кэширования и повторного" +" использования." + +#: internal/arduino/resources/index.go:65 +msgid "Can't create data directory %s" +msgstr "Не удается создать каталог данных %s" + +#: commands/cmderrors/cmderrors.go:511 +msgid "Can't create sketch" +msgstr "Не удается создать скетч" + +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 +msgid "Can't download library" +msgstr "Не удается скачать библиотеку" + +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 +msgid "Can't find dependencies for platform %s" +msgstr "Не удается найти зависимости для платформы %s" + +#: commands/cmderrors/cmderrors.go:537 +msgid "Can't open sketch" +msgstr "Не удается открыть скетч" + +#: commands/cmderrors/cmderrors.go:524 +msgid "Can't update sketch" +msgstr "Не удается обновить скетч" + +#: internal/cli/arguments/arguments.go:38 +msgid "Can't use the following flags together: %s" +msgstr "Невозможно использовать следующие флаги вместе: %s" + +#: internal/cli/daemon/daemon.go:117 +msgid "Can't write debug log: %s" +msgstr "Не удается записать журнал отладки: %s" + +#: commands/service_compile.go:190 commands/service_compile.go:193 +msgid "Cannot create build cache directory" +msgstr "Не удается создать каталог кэша сборки" + +#: commands/service_compile.go:215 +msgid "Cannot create build directory" +msgstr "Не удается создать каталог для сборки" + +#: internal/cli/config/init.go:100 +msgid "Cannot create config file directory: %v" +msgstr "Не удается создать каталог конфигурационных файлов: %v" + +#: internal/cli/config/init.go:124 +msgid "Cannot create config file: %v" +msgstr "Не удается создать конфигурационный файл: %v" + +#: commands/cmderrors/cmderrors.go:781 +msgid "Cannot create temp dir" +msgstr "Не удается создать временный каталог" + +#: commands/cmderrors/cmderrors.go:799 +msgid "Cannot create temp file" +msgstr "Не удается создать временный файл" + +#: internal/cli/config/delete.go:55 +msgid "Cannot delete the key %[1]s: %[2]v" +msgstr "Не удается удалить ключ %[1]s: %[2]v" + +#: commands/service_debug.go:228 +msgid "Cannot execute debug tool" +msgstr "Не удается запустить отладочный инструмент" + +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 +msgid "Cannot find absolute path: %v" +msgstr "Не удается найти абсолютный путь: %v" + +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "Не удается получить конфигурационный ключ %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 +msgid "Cannot install platform" +msgstr "Не удается установить платформу" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 +msgid "Cannot install tool %s" +msgstr "Не удается установить инструмент %s" + +#: commands/service_upload.go:544 +msgid "Cannot perform port reset: %s" +msgstr "Не удается выполнить сброс порта: %s" + +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "Не удается удалить конфигурационный ключ %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" +msgstr "Не удается обновить платформу" + +#: internal/cli/lib/search.go:207 +msgid "Category: %s" +msgstr "Категория: %s" + +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 +msgid "Check dependencies status for the specified library." +msgstr "Проверьте статус зависимостей для указанной библиотеки." + +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" +"Проверьте, поддерживает ли данная комбинация платы и программатора отладку." + +#: internal/arduino/resources/checksums.go:166 +msgid "Checksum differs from checksum in package.json" +msgstr "Контрольная сумма отличается от указанной в package.json" + +#: internal/cli/board/details.go:190 +msgid "Checksum:" +msgstr "Контрольная сумма:" + +#: internal/cli/cache/cache.go:32 +msgid "Clean caches." +msgstr "Очистить кэш." + +#: internal/cli/cli.go:181 +msgid "Comma-separated list of additional URLs for the Boards Manager." +msgstr "" +"Список дополнительных URL-адресов для Менеджера плат, с запятыми в " +"разделителе." + +#: internal/cli/board/list.go:56 +msgid "" +"Command keeps running and prints list of connected boards whenever there is " +"a change." +msgstr "" +"Команда продолжает выполняться и печатает список подключенных плат всякий " +"раз, когда происходят изменения." + +#: commands/service_debug_config.go:178 commands/service_upload.go:452 +msgid "Compiled sketch not found in %s" +msgstr "Скомпилированный эскиз не найден в %s" + +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 +msgid "Compiles Arduino sketches." +msgstr "Компилирует скетчи Arduino." + +#: internal/arduino/builder/builder.go:421 +msgid "Compiling core..." +msgstr "Компиляция ядра..." + +#: internal/arduino/builder/builder.go:400 +msgid "Compiling libraries..." +msgstr "Компиляция библиотек..." + +#: internal/arduino/builder/libraries.go:134 +msgid "Compiling library \"%[1]s\"" +msgstr "Компиляция библиотеки \"%[1]s\"" + +#: internal/arduino/builder/builder.go:384 +msgid "Compiling sketch..." +msgstr "Компиляция скетча..." + +#: internal/cli/config/init.go:94 +msgid "" +"Config file already exists, use --overwrite to discard the existing one." +msgstr "" +"Файл конфигурации уже существует, используйте --overwrite, чтобы отменить " +"существующий." + +#: internal/cli/config/init.go:179 +msgid "Config file written to: %s" +msgstr "Конфигурационный файл записан в: %s" + +#: internal/cli/debug/debug.go:250 +msgid "Configuration options for %s" +msgstr "Параметры конфигурации для %s" + +#: internal/cli/monitor/monitor.go:78 +msgid "" +"Configure communication port settings. The format is " +"<ID>=<value>[,<ID>=<value>]..." +msgstr "" +"Настройте параметры коммуникационного порта. Формат <ID> " +"<value>=[,<ID>=<value>]..." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +msgid "Configuring platform." +msgstr "Настройка платформы." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 +msgid "Configuring tool." +msgstr "Настройка инструмента." + +#: internal/cli/board/list.go:198 +msgid "Connected" +msgstr "Соединен" + +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "Подключение к %s. Нажмите CTRL-C для выхода." + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Core" +msgstr "Ядро" + +#: internal/cli/configuration/network.go:127 +msgid "Could not connect via HTTP" +msgstr "Не удалось подключиться по HTTP" + +#: commands/instances.go:487 +msgid "Could not create index directory" +msgstr "Не удалось создать индексный каталог" + +#: internal/arduino/builder/core.go:42 +msgid "Couldn't deeply cache core build: %[1]s" +msgstr "Не удалось глубоко кэшировать сборку ядра: %[1]s" + +#: internal/arduino/builder/sizer.go:155 +msgid "Couldn't determine program size" +msgstr "Не удалось определить размер программы" + +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 +msgid "Couldn't get current working directory: %v" +msgstr "Не удалось получить текущий рабочий каталог: %v" + +#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 +msgid "Create a new Sketch" +msgstr "Создать новый скетч" + +#: internal/cli/compile/compile.go:101 +msgid "Create and print a profile configuration from the build." +msgstr "Создать и распечатать конфигурацию профиля из сборки." + +#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 +msgid "Creates a zip file containing all sketch files." +msgstr "Создает zip-файл, содержащий все файлы скетчей." + +#: internal/cli/config/init.go:46 +msgid "" +"Creates or updates the configuration file in the data directory or custom " +"directory with the current configuration settings." +msgstr "" +"Создает или обновляет файл конфигурации в каталоге данных или " +"пользовательском каталоге с текущими настройками конфигурации." + +#: internal/cli/compile/compile.go:340 +msgid "" +"Currently, Build Profiles only support libraries available through Arduino " +"Library Manager." +msgstr "" +"В настоящее время профили сборки поддерживают только библиотеки, доступные " +"через Arduino Library Manager." + +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" +msgstr "Пользовательская конфигурация для %s:" + +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 +msgid "DEPRECATED" +msgstr "УСТАРЕВШИЙ" + +#: internal/cli/daemon/daemon.go:195 +msgid "Daemon is now listening on %s:%s" +msgstr "Демон сейчас слушает %s: %s" + +#: internal/cli/debug/debug.go:53 +msgid "Debug Arduino sketches." +msgstr "Отладка скетчей Arduino." + +#: internal/cli/debug/debug.go:54 +msgid "" +"Debug Arduino sketches. (this command opens an interactive gdb session)" +msgstr "" +"Отладка скетчей Arduino. (эта команда открывает интерактивный сеанс gdb)" + +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 +msgid "Debug interpreter e.g.: %s" +msgstr "Отладочный интерпретатор, например: %s" + +#: commands/service_debug_config.go:215 +msgid "Debugging not supported for board %s" +msgstr "Не поддерживается отладка для платы %s" + +#: internal/cli/monitor/monitor.go:331 +msgid "Default" +msgstr "По умолчанию" + +#: internal/cli/board/attach.go:115 +msgid "Default FQBN set to" +msgstr "Установлен FQBN по умолчанию" + +#: internal/cli/board/attach.go:114 +msgid "Default port set to" +msgstr "Задан порт по умолчанию" + +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "Установлен программатор по умолчанию" + +#: internal/cli/cache/clean.go:32 +msgid "Delete Boards/Library Manager download cache." +msgstr "Удалить кэш скачивания для Менеджера плат/библиотек " + +#: internal/cli/cache/clean.go:33 +msgid "" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "" +"Удалить содержимое папки кэша загрузок, в которой хранятся архивные файлы во" +" время установки библиотек и платформ плат." + +#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 +msgid "Deletes a settings key and all its sub keys." +msgstr "Удаляет ключ настроек и все его подключи." + +#: internal/cli/lib/search.go:215 +msgid "Dependencies: %s" +msgstr "Зависимости: %s" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 +msgid "Description" +msgstr "Описание" + +#: internal/arduino/builder/builder.go:314 +msgid "Detecting libraries used..." +msgstr "Обнаружение используемых библиотек..." + +#: internal/cli/board/list.go:46 +msgid "" +"Detects and displays a list of boards connected to the current computer." +msgstr "" +"Обнаруживает и отображает список плат, подключенных к текущему компьютеру." + +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 +msgid "Directory containing binaries for debug." +msgstr "Каталог, содержащий двоичные файлы для отладки." + +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 +msgid "Directory containing binaries to upload." +msgstr "Каталог, содержащий двоичные файлы для загрузки." + +#: internal/cli/generatedocs/generatedocs.go:45 +msgid "" +"Directory where to save generated files. Default is './docs', the directory " +"must exist." +msgstr "" +"Каталог для сохранения сгенерированных файлов. По умолчанию — './docs', " +"каталог должен существовать." + +#: internal/cli/completion/completion.go:44 +msgid "Disable completion description for shells that support it" +msgstr "" +"Отключить описание автодополнений для оболочек, которые это поддерживают." + +#: internal/cli/board/list.go:199 +msgid "Disconnected" +msgstr "Отключен" + +#: internal/cli/daemon/daemon.go:90 +msgid "Display only the provided gRPC calls" +msgstr "Отображать только предоставляемые вызовы gRPC" + +#: internal/cli/lib/install.go:62 +msgid "Do not install dependencies." +msgstr "Не устанавливать зависимости." + +#: internal/cli/lib/install.go:63 +msgid "Do not overwrite already installed libraries." +msgstr "Не перезаписывать уже установленные библиотеки." + +#: internal/cli/core/install.go:56 +msgid "Do not overwrite already installed platforms." +msgstr "Не перезаписывать уже установленные платформы." + +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 +msgid "Do not perform the actual upload, just log out actions" +msgstr "Не выполнять фактическую загрузку, только логировать действия" + +#: internal/cli/daemon/daemon.go:81 +msgid "Do not terminate daemon process if the parent process dies" +msgstr "Не завершать процесс-демон, если родительский процесс завершается" + +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" +"Не пробовать обновить зависимости библиотеки, если они уже установлены." + +#: commands/service_library_download.go:92 +msgid "Downloading %s" +msgstr "Скачивание %s" + +#: internal/arduino/resources/index.go:137 +msgid "Downloading index signature: %s" +msgstr "Скачивание индексной сигнатуры: %s" + +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 +msgid "Downloading index: %s" +msgstr "Скачивание индекса: %s" + +#: commands/instances.go:372 +msgid "Downloading library %s" +msgstr "Скачивание библиотеки %s" + +#: commands/instances.go:54 +msgid "Downloading missing tool %s" +msgstr "Скачивание пропущенных инструментов %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 +msgid "Downloading packages" +msgstr "Скачивание пакетов" + +#: internal/arduino/cores/packagemanager/profiles.go:101 +msgid "Downloading platform %s" +msgstr "Скачиванеи платформы %s" + +#: internal/arduino/cores/packagemanager/profiles.go:177 +msgid "Downloading tool %s" +msgstr "Скачивание инструмента %s" + +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 +msgid "Downloads one or more cores and corresponding tool dependencies." +msgstr "" +"Скачивает одно или несколько ядер и зависимости соответствующих " +"инструментов." + +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 +msgid "Downloads one or more libraries without installing them." +msgstr "Скачивает одну или несколько библиотек без их установки." + +#: internal/cli/daemon/daemon.go:84 +msgid "Enable debug logging of gRPC calls" +msgstr "Включить отладочное логирование вызовов gRPC" + +#: internal/cli/lib/install.go:65 +msgid "Enter a path to zip file" +msgstr "Введите путь к zip-файлу" + +#: internal/cli/lib/install.go:64 +msgid "Enter git url for libraries hosted on repositories" +msgstr "Введите git url для библиотек, размещенных в репозиториях" + +#: commands/service_sketch_archive.go:105 +msgid "Error adding file to sketch archive" +msgstr "Ошибка при добавлении файла в архив скетчей" + +#: internal/arduino/builder/core.go:170 +msgid "Error archiving built core (caching) in %[1]s: %[2]s" +msgstr "Ошибка архивирования встроенного ядра (кэширования) в %[1]s: %[2]s" + +#: internal/cli/sketch/archive.go:85 +msgid "Error archiving: %v" +msgstr "Ошибка при архивировании: %v" + +#: commands/service_sketch_archive.go:93 +msgid "Error calculating relative file path" +msgstr "Ошибка вычисления относительного пути к файлу" + +#: internal/cli/cache/clean.go:48 +msgid "Error cleaning caches: %v" +msgstr "Ошибка при очистке кэшей: %v" + +#: internal/cli/compile/compile.go:225 +msgid "Error converting path to absolute: %v" +msgstr "Ошибка преобразования пути в абсолютный: %v" + +#: commands/service_compile.go:420 +msgid "Error copying output file %s" +msgstr "Ошибка при копировании выходного файла %s" + +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "Ошибка при создании конфигурации: %v" + +#: internal/cli/instance/instance.go:43 +msgid "Error creating instance: %v" +msgstr "Ошибка при создании экземпляра: %v" + +#: commands/service_compile.go:403 +msgid "Error creating output dir" +msgstr "Ошибка создания каталога вывода" + +#: commands/service_sketch_archive.go:81 +msgid "Error creating sketch archive" +msgstr "Ошибка при создании архива скетчей" + +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 +msgid "Error creating sketch: %v" +msgstr "Ошибка при создании скетча: %v" + +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 +msgid "Error detecting boards: %v" +msgstr "Ошибка обнаружения платы: %v" + +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 +msgid "Error downloading %[1]s: %[2]v" +msgstr "Ошибка скачивания %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 +msgid "Error downloading %s" +msgstr "Ошибка скачивания %s" + +#: commands/instances.go:661 internal/arduino/resources/index.go:83 +msgid "Error downloading index '%s'" +msgstr "Ошибка скачивания индекса '%s'" + +#: internal/arduino/resources/index.go:138 +msgid "Error downloading index signature '%s'" +msgstr "Ошибка скачивания индексной сигнатуры '%s'" + +#: commands/instances.go:382 commands/instances.go:388 +msgid "Error downloading library %s" +msgstr "Ошибка скачивания библиотеки %s" + +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 +msgid "Error downloading platform %s" +msgstr "Ошибка скачивания платформы %s" + +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 +msgid "Error downloading tool %s" +msgstr "Ошибка скачивания инструмента %s" + +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 +msgid "Error during Debug: %v" +msgstr "Ошибка во время отладки: %v" + +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 +msgid "Error during JSON encoding of the output: %v" +msgstr "Ошибка при кодировании выходных данных в формате JSON: %v" + +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 +msgid "Error during Upload: %v" +msgstr "Ошибка во время загрузки: %v" + +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" +msgstr "Ошибка при обнаружении платы" + +#: internal/cli/compile/compile.go:394 +msgid "Error during build: %v" +msgstr "Ошибка во время сборки: %v" + +#: internal/cli/core/install.go:81 +msgid "Error during install: %v" +msgstr "Ошибка во время установки: %v" + +#: internal/cli/core/uninstall.go:75 +msgid "Error during uninstall: %v" +msgstr "Ошибка во время удаления: %v" + +#: internal/cli/core/upgrade.go:136 +msgid "Error during upgrade: %v" +msgstr "Ошибка во время обновления: %v" + +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 +msgid "Error extracting %s" +msgstr "Ошибка извлечения %s" + +#: commands/service_upload.go:449 +msgid "Error finding build artifacts" +msgstr "Ошибка при поиске артефактов сборки" + +#: internal/cli/debug/debug.go:139 +msgid "Error getting Debug info: %v" +msgstr "Ошибка при получении отладочной информации: %v" + +#: commands/service_sketch_archive.go:57 +msgid "Error getting absolute path of sketch archive" +msgstr "Ошибка получения абсолютного пути к архиву скетча" + +#: internal/cli/board/details.go:74 +msgid "Error getting board details: %v" +msgstr "Ошибка при получении сведений о плате: %v" + +#: internal/arduino/builder/internal/compilation/database.go:82 +msgid "Error getting current directory for compilation database: %s" +msgstr "Ошибка при получении текущего каталога для базы данных компиляции: %s" + +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" +"Ошибка при получении порта по умолчанию из `sketch.yaml`. Проверьте, " +"правильно ли вы указали папку sketch, или укажите флаг --port: %s" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 +msgid "Error getting information for library %s" +msgstr "Ошибка при получении информации для библиотеки %s" + +#: internal/cli/lib/examples.go:75 +msgid "Error getting libraries info: %v" +msgstr "Ошибка при получении информации о библиотеках: %v" + +#: internal/cli/arguments/fqbn.go:96 +msgid "Error getting port metadata: %v" +msgstr "Ошибка при получении метаданных порта: %v" + +#: internal/cli/monitor/monitor.go:154 +msgid "Error getting port settings details: %s" +msgstr "Ошибка при получении подробной информации о настройках порта: %s" + +#: internal/cli/upload/upload.go:169 +msgid "Error getting user input" +msgstr "Ошибка при получении пользовательского ввода" + +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 +msgid "Error initializing instance: %v" +msgstr "Ошибка при инициализации экземпляра: %v" + +#: internal/cli/lib/install.go:148 +msgid "Error installing %s: %v" +msgstr "Ошибка при установке %s: %v" + +#: internal/cli/lib/install.go:122 +msgid "Error installing Git Library: %v" +msgstr "Ошибка при установке библиотеки Git: %v" + +#: internal/cli/lib/install.go:100 +msgid "Error installing Zip Library: %v" +msgstr "Ошибка при установке Zip-библиотеки: %v" + +#: commands/instances.go:398 +msgid "Error installing library %s" +msgstr "Ошибка при установке библиотеки %s" + +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 +msgid "Error installing platform %s" +msgstr "Ошибка при установке платформы %s" + +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 +msgid "Error installing tool %s" +msgstr "Ошибка при установке инструмента %s" + +#: internal/cli/board/listall.go:66 +msgid "Error listing boards: %v" +msgstr "Ошибка при перечислении плат: %v" + +#: internal/cli/lib/list.go:91 +msgid "Error listing libraries: %v" +msgstr "Ошибка при перечислении библиотек: %v" + +#: internal/cli/core/list.go:69 +msgid "Error listing platforms: %v" +msgstr "Ошибка при перечислении платформ: %v" + +#: commands/cmderrors/cmderrors.go:424 +msgid "Error loading hardware platform" +msgstr "Ошибка загрузки аппаратной платформы" + +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 +msgid "Error loading index %s" +msgstr "Ошибка при загрузке индекса %s" + +#: internal/arduino/resources/index.go:99 +msgid "Error opening %s" +msgstr "Ошибка при открытии %s" + +#: internal/cli/daemon/daemon.go:111 +msgid "Error opening debug logging file: %s" +msgstr "Ошибка при открытии файла журнала отладки: %s" + +#: internal/cli/compile/compile.go:196 +msgid "Error opening source code overrides data file: %v" +msgstr "Ошибка при открытии исходного кода переопределяет файл данных: %v" + +#: internal/cli/compile/compile.go:209 +msgid "Error parsing --show-properties flag: %v" +msgstr "Ошибка разбора флага --show-properties: %v" + +#: commands/service_compile.go:412 +msgid "Error reading build directory" +msgstr "Ошибка при чтении каталога сборки" + +#: commands/service_sketch_archive.go:75 +msgid "Error reading sketch files" +msgstr "Ошибка при чтении файлов со скетчами" + +#: internal/cli/lib/check_deps.go:72 +msgid "Error resolving dependencies for %[1]s: %[2]s" +msgstr "Ошибка устранение зависимостей для %[1]s: %[2]s" + +#: internal/cli/core/upgrade.go:68 +msgid "Error retrieving core list: %v" +msgstr "Ошибка при извлечении списка ядер: %v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 +msgid "Error rolling-back changes: %s" +msgstr "Ошибка при откате изменений: %s" + +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 +msgid "Error saving downloaded index" +msgstr "Ошибка при сохранении загруженного индекса" + +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 +msgid "Error saving downloaded index signature" +msgstr "Ошибка сохранения загруженной индексной сигнатуры" + +#: internal/cli/board/search.go:63 +msgid "Error searching boards: %v" +msgstr "Ошибка при поиске плат: %v" + +#: internal/cli/lib/search.go:126 +msgid "Error searching for Libraries: %v" +msgstr "Ошибка при поиске для библиотек: %v" + +#: internal/cli/core/search.go:82 +msgid "Error searching for platforms: %v" +msgstr "Ошибка при поиске для платформ: %v" + +#: internal/arduino/builder/internal/compilation/database.go:67 +msgid "Error serializing compilation database: %s" +msgstr "Ошибка при сериализации базы данных компиляции: %s" + +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "Ошибка при настройке режима raw: %s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "Ошибка при задании значения: %v" + +#: internal/cli/board/list.go:86 +msgid "Error starting discovery: %v" +msgstr "Ошибка запуска обнаружения: %v" + +#: internal/cli/lib/uninstall.go:67 +msgid "Error uninstalling %[1]s: %[2]v" +msgstr "Ошибка при удалении %[1]s: %[2]v" + +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 +msgid "Error updating library index: %v" +msgstr "Ошибка при обновлении библиотечного индекса: %v" + +#: internal/cli/lib/upgrade.go:75 +msgid "Error upgrading libraries" +msgstr "Ошибка при обновлении библиотек" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 +msgid "Error upgrading platform: %s" +msgstr "Ошибка при обновлении платформы: %s" + +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 +msgid "Error verifying signature" +msgstr "Ошибка проверки сигнатуры" + +#: internal/arduino/builder/internal/detector/detector.go:369 +msgid "Error while detecting libraries included by %[1]s" +msgstr "Ошибка при обнаружении библиотек, включенных %[1]s" + +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 +msgid "Error while determining sketch size: %s" +msgstr "Ошибка при определении размера скетча: %s" + +#: internal/arduino/builder/internal/compilation/database.go:70 +msgid "Error writing compilation database: %s" +msgstr "Ошибка при записи базы данных компиляции: %s" + +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "Ошибка записи в файл: %v" + +#: internal/cli/completion/completion.go:56 +msgid "Error: command description is not supported by %v" +msgstr "Ошибка: описание команды не поддерживается %v" + +#: internal/cli/compile/compile.go:202 +msgid "Error: invalid source code overrides data file: %v" +msgstr "Ошибка: неверный исходный код переопределяет файл данных: %v" + +#: internal/cli/board/list.go:104 +msgid "Event" +msgstr "Событие" + +#: internal/cli/lib/examples.go:123 +msgid "Examples for library %s" +msgstr "Примеры для библиотеки %s" + +#: internal/cli/usage.go:24 +msgid "Examples:" +msgstr "Примеры:" + +#: internal/cli/debug/debug.go:233 +msgid "Executable to debug" +msgstr "Исполняемый файл для отладки" + +#: commands/service_debug_config.go:181 commands/service_upload.go:455 +msgid "Expected compiled sketch in directory %s, but is a file instead" +msgstr "" +"Ожидаемый скомпилированный скетч находится в каталоге %s, но вместо этого он" +" представляет собой файл" + +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "FQBN" +msgstr "FQBN" + +#: internal/cli/board/details.go:140 +msgid "FQBN:" +msgstr "FQBN:" + +#: commands/service_upload.go:578 +msgid "Failed chip erase" +msgstr "Не удалось стереть чип" + +#: commands/service_upload.go:585 +msgid "Failed programming" +msgstr "Не удалось программирование" + +#: commands/service_upload.go:581 +msgid "Failed to burn bootloader" +msgstr "Не удалось записать загрузчик" + +#: commands/instances.go:88 +msgid "Failed to create data directory" +msgstr "Не удалось создать каталог данных" + +#: commands/instances.go:77 +msgid "Failed to create downloads directory" +msgstr "Не удалось создать каталог загрузок" + +#: internal/cli/daemon/daemon.go:150 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." +msgstr "Не удалось прослушать TCP-порт: %[1]s. %[2]s - недопустимый порт." + +#: internal/cli/daemon/daemon.go:145 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." +msgstr "Не удалось прослушать TCP-порт: %[1]s. %[2]s - имя неизвестно." + +#: internal/cli/daemon/daemon.go:157 +msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" +msgstr "Не удалось прослушать TCP-порт: %[1]s. Непредвиденная ошибка: %[2]v" + +#: internal/cli/daemon/daemon.go:155 +msgid "Failed to listen on TCP port: %s. Address already in use." +msgstr "Не удалось прослушать TCP-порт: %s. Адрес, который уже используется." + +#: commands/service_upload.go:589 +msgid "Failed uploading" +msgstr "Не удалась загрузка" + +#: internal/cli/board/details.go:188 +msgid "File:" +msgstr "Файл:" + +#: commands/service_compile.go:163 +msgid "" +"Firmware encryption/signing requires all the following properties to be " +"defined: %s" +msgstr "" +"Для шифрования/подписи встроенной прошивки требуются все следующие свойства," +" которые должны быть определены: %s" + +#: commands/service_debug.go:187 +msgid "First message must contain debug request, not data" +msgstr "Первое сообщение должно содержать запрос на отладку, а не данные" + +#: internal/cli/arguments/arguments.go:49 +msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" +msgstr "Флаг %[1]s обязателен при использовании совместно с: %[2]s" + +#: internal/cli/usage.go:26 +msgid "Flags:" +msgstr "Флаги:" + +#: internal/cli/arguments/pre_post_script.go:38 +msgid "" +"Force run of post-install scripts (if the CLI is not running interactively)." +msgstr "" +"Принудительный запуск сценариев после установки (если CLI не запущен в " +"интерактивном режиме)." + +#: internal/cli/arguments/pre_post_script.go:40 +msgid "" +"Force run of pre-uninstall scripts (if the CLI is not running " +"interactively)." +msgstr "" +"Принудительный запуск сценариев предварительной деинсталляции (если " +"интерфейс командной строки не запущен в интерактивном режиме)." + +#: internal/cli/arguments/pre_post_script.go:39 +msgid "" +"Force skip of post-install scripts (if the CLI is running interactively)." +msgstr "" +"Принудительный пропуск сценариев после установки (если CLI запущен в " +"интерактивном режиме)." + +#: internal/cli/arguments/pre_post_script.go:41 +msgid "" +"Force skip of pre-uninstall scripts (if the CLI is running interactively)." +msgstr "" +"Принудительный пропуск сценариев предварительной деинсталляции (если CLI " +"запущен в интерактивном режиме)." + +#: commands/cmderrors/cmderrors.go:839 +msgid "Found %d platforms matching \"%s\": %s" +msgstr "Найдены платформы %d, соответствующие \"%s\": %s" + +#: internal/cli/arguments/fqbn.go:39 +msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" +msgstr "" +"Полное квалифицированное наименование платы - FQBN, например: " +"arduino:avr:uno" + +#: commands/service_debug.go:321 +msgid "GDB server '%s' is not supported" +msgstr "Сервер GDB '%s' не поддерживается" + +#: internal/cli/generatedocs/generatedocs.go:38 +#: internal/cli/generatedocs/generatedocs.go:39 +msgid "Generates bash completion and command manpages." +msgstr "" +"Генерирует страницы руководства об автодополнениях команд и командах bash." + +#: internal/cli/completion/completion.go:38 +msgid "Generates completion scripts" +msgstr "Генерирует скрипты автодополнений" + +#: internal/cli/completion/completion.go:39 +msgid "Generates completion scripts for various shells" +msgstr "Генерирует скрипты автодополнений для различных оболочек" + +#: internal/arduino/builder/builder.go:334 +msgid "Generating function prototypes..." +msgstr "Создание прототипов функций..." + +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "Получает значение ключа настроек." + +#: internal/cli/usage.go:27 +msgid "Global Flags:" +msgstr "Глобальные флаги:" + +#: internal/arduino/builder/sizer.go:166 +msgid "" +"Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " +"bytes for local variables. Maximum is %[2]s bytes." +msgstr "" +"Глобальные переменные используют %[1]s байт (%[3]s%%) динамической памяти, " +"оставляя %[4]s байт для локальных переменных. Максимум: %[2]s байт." + +#: internal/arduino/builder/sizer.go:172 +msgid "Global variables use %[1]s bytes of dynamic memory." +msgstr "Глобальные переменные используют %[1]s байт динамической памяти." + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 +msgid "ID" +msgstr "ИД" + +#: internal/cli/board/details.go:111 +msgid "Id" +msgstr "Ид" + +#: internal/cli/board/details.go:154 +msgid "Identification properties:" +msgstr "Идентификационные свойства:" + +#: internal/cli/compile/compile.go:135 +msgid "If set built binaries will be exported to the sketch folder." +msgstr "" +"Если установлено, то собранные двоичные файлы будут экспортированы в папку " +"скетча." + +#: internal/cli/core/list.go:46 +msgid "" +"If set return all installable and installed cores, including manually " +"installed." +msgstr "" +"Если установлено, вернуть все доступные для установки и установленные ядра, " +"включая установленные вручную." + +#: internal/cli/lib/list.go:55 +msgid "Include built-in libraries (from platforms and IDE) in listing." +msgstr "Включить в листинг встроенные библиотеки (из платформ и IDE)." + +#: internal/cli/sketch/archive.go:51 +msgid "Includes %s directory in the archive." +msgstr "Включает каталог %s в архив." + +#: internal/cli/lib/install.go:66 +msgid "Install libraries in the IDE-Builtin directory" +msgstr "Установить библиотеки во встроенный каталог IDE" + +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 +msgid "Installed" +msgstr "Установлено" + +#: commands/service_library_install.go:201 +msgid "Installed %s" +msgstr "Установлен %s" + +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 +msgid "Installing %s" +msgstr "Установка %s" + +#: commands/instances.go:396 +msgid "Installing library %s" +msgstr "Установка библиотеки %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 +msgid "Installing platform %s" +msgstr "Установка платформы %s" + +#: internal/arduino/cores/packagemanager/profiles.go:185 +msgid "Installing tool %s" +msgstr "Установка инструмента %s" + +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 +msgid "Installs one or more cores and corresponding tool dependencies." +msgstr "" +"Устанавливает одно или несколько ядер и соответствующие зависимости " +"инструментов." + +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 +msgid "Installs one or more specified libraries into the system." +msgstr "Устанавливает в систему одну или несколько указанных библиотек." + +#: internal/arduino/builder/internal/detector/detector.go:394 +msgid "Internal error in cache" +msgstr "Внутренняя ошибка в кэше" + +#: commands/cmderrors/cmderrors.go:377 +msgid "Invalid '%[1]s' property: %[2]s" +msgstr "Недопустимое свойство '%[1]s': %[2]s" + +#: commands/cmderrors/cmderrors.go:60 +msgid "Invalid FQBN" +msgstr "Неверный FQBN" + +#: internal/cli/daemon/daemon.go:168 +msgid "Invalid TCP address: port is missing" +msgstr "Неверный TCP-адрес: порт не указан" + +#: commands/cmderrors/cmderrors.go:78 +msgid "Invalid URL" +msgstr "Неверный URL-адрес" + +#: commands/instances.go:184 +msgid "Invalid additional URL: %v" +msgstr "Неверный дополнительный URL-адрес: %v" + +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "Неверный архив: файл %[1]s не найден в архиве %[2]s" + +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 +msgid "Invalid argument passed: %v" +msgstr "Передан недопустимый аргумент: %v" + +#: commands/service_compile.go:282 +msgid "Invalid build properties" +msgstr "Неверные свойства сборки" + +#: internal/arduino/builder/sizer.go:253 +msgid "Invalid data size regexp: %s" +msgstr "Неверное регулярное выражение для размера данных: %s" + +#: internal/arduino/builder/sizer.go:259 +msgid "Invalid eeprom size regexp: %s" +msgstr "Неверное регулярное выражение для размера eeprom: %s" + +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "Неверный URL индекса: %s" + +#: commands/cmderrors/cmderrors.go:46 +msgid "Invalid instance" +msgstr "Неверный экземпляр" + +#: internal/cli/core/upgrade.go:114 +msgid "Invalid item %s" +msgstr "Неверный элемент %s" + +#: commands/cmderrors/cmderrors.go:96 +msgid "Invalid library" +msgstr "Неверная библиотека" + +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "Неверный уровень логирования: %s" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "Неверная конфигурация сети: %s" + +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "Неверное значение network.proxy '%[1]s': %[2]s" + +#: internal/cli/cli.go:222 +msgid "Invalid output format: %s" +msgstr "Неверный формат вывода: %s" + +#: commands/instances.go:581 +msgid "Invalid package index in %s" +msgstr "Неверный индекс пакета в %s" + +#: internal/cli/core/uninstall.go:63 +msgid "Invalid parameter %s: version not allowed" +msgstr "Неверный параметр %s: версия недопустима" + +#: commands/service_board_identify.go:169 +msgid "Invalid pid value: '%s'" +msgstr "Неверное значение pid: '%s'" + +#: commands/cmderrors/cmderrors.go:220 +msgid "Invalid profile" +msgstr "Неверный профиль" + +#: commands/service_monitor.go:270 +msgid "Invalid recipe in platform.txt" +msgstr "Неверный рецепт в platform.txt" + +#: internal/arduino/builder/sizer.go:243 +msgid "Invalid size regexp: %s" +msgstr "Неверное регулярное выражение для размера: %s" + +#: main.go:86 +msgid "Invalid value in configuration" +msgstr "Неверное значение в конфигурации" + +#: commands/cmderrors/cmderrors.go:114 +msgid "Invalid version" +msgstr "Неверная версия" + +#: commands/service_board_identify.go:166 +msgid "Invalid vid value: '%s'" +msgstr "Неверное значение vid: '%s'" + +#: internal/cli/compile/compile.go:132 +msgid "" +"Just produce the compilation database, without actually compiling. All build" +" commands are skipped except pre* hooks." +msgstr "" +"Просто создать базу данных компиляции, без фактической компиляции. Все " +"команды сборки пропускаются, за исключением хуков pre*." + +#: internal/cli/lib/list.go:39 +msgid "LIBNAME" +msgstr "LIBNAME" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "LIBRARY" +msgstr "LIBRARY" + +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 +msgid "LIBRARY_NAME" +msgstr "LIBRARY_NAME" + +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 +msgid "Latest" +msgstr "Последняя" + +#: internal/arduino/builder/libraries.go:92 +msgid "Library %[1]s has been declared precompiled:" +msgstr "Библиотека %[1]s объявлена ​​предварительно скомпилированной::" + +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 +msgid "" +"Library %[1]s is already installed, but with a different version: %[2]s" +msgstr "Библиотека %[1]s уже установлена, но другой версии: %[2]s" + +#: commands/service_library_upgrade.go:137 +msgid "Library %s is already at the latest version" +msgstr "Библиотека %s уже обновлена до последней версии" + +#: commands/service_library_uninstall.go:63 +msgid "Library %s is not installed" +msgstr "Библиотека %s не установлена" + +#: commands/instances.go:375 +msgid "Library %s not found" +msgstr "Библиотека %s не найдена" + +#: commands/cmderrors/cmderrors.go:445 +msgid "Library '%s' not found" +msgstr "Библиотека '%s' %s не найдена" + +#: internal/arduino/builder/internal/detector/detector.go:471 +msgid "" +"Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." +msgstr "" +"Библиотека не может использовать оба каталога '%[1]s' и '%[2]s'. " +"Перепроверьте в '%[3]s'." + +#: commands/cmderrors/cmderrors.go:574 +msgid "Library install failed" +msgstr "Не удалось установить библиотеку" + +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 +msgid "Library installed" +msgstr "Библиотека установлена" + +#: internal/cli/lib/search.go:205 +msgid "License: %s" +msgstr "Лицензия: %s" + +#: internal/arduino/builder/builder.go:437 +msgid "Linking everything together..." +msgstr "Связывается все вместе..." + +#: internal/cli/board/listall.go:40 +msgid "" +"List all boards that have the support platform installed. You can search\n" +"for a specific board if you specify the board name" +msgstr "" +"Список всех плат, на которых установлена ​​платформа поддержки. \n" +"Вы можете выполнить поиск определенной платы, если укажете ее название" + +#: internal/cli/board/listall.go:39 +msgid "List all known boards and their corresponding FQBN." +msgstr "Перечислить все известные платы и их соответствующие FQBN." + +#: internal/cli/board/list.go:45 +msgid "List connected boards." +msgstr "Перечислить подключенные платы." + +#: internal/cli/arguments/fqbn.go:44 +msgid "" +"List of board options separated by commas. Or can be used multiple times for" +" multiple options." +msgstr "" +"Перечислить опции платы, разделенные запятыми. Или может быть использовано " +"несколько раз для нескольких опций." + +#: internal/cli/compile/compile.go:110 +msgid "" +"List of custom build properties separated by commas. Or can be used multiple" +" times for multiple properties." +msgstr "" +"Перечислить пользовательские опции сборки, разделенные запятыми. Или может " +"быть использовано несколько раз для нескольких опций." + +#: internal/cli/lib/list.go:57 +msgid "List updatable libraries." +msgstr "Перечислить библиотеки с доступными обновлениями." + +#: internal/cli/core/list.go:45 +msgid "List updatable platforms." +msgstr "Перечислить платформы с доступными обновлениями." + +#: internal/cli/board/board.go:32 +msgid "Lists all connected boards." +msgstr "Перечислить все подключенные платы." + +#: internal/cli/outdated/outdated.go:41 +msgid "Lists cores and libraries that can be upgraded" +msgstr "Перечисляет ядра и библиотеки которые могут быть обновлены" + +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 +msgid "Loading index file: %v" +msgstr "Загрузка индексного файла: %v" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 +msgid "Location" +msgstr "Расположение" + +#: internal/arduino/builder/sizer.go:208 +msgid "Low memory available, stability problems may occur." +msgstr "Недостаточно памяти, программа может работать нестабильно." + +#: internal/cli/lib/search.go:200 +msgid "Maintainer: %s" +msgstr "Меинтейнер: %s" + +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" +"Максимальное количество параллельных компиляций. Если установлено значение " +"0, будет использоваться количество доступных ядер ЦП." + +#: internal/cli/arguments/discovery_timeout.go:32 +msgid "Max time to wait for port discovery, e.g.: 30s, 1m" +msgstr "Максимальное время ожидания обнаружения порта, например: 30s, 1m" + +#: internal/cli/cli.go:170 +msgid "" +"Messages with this level and above will be logged. Valid levels are: %s" +msgstr "" +"Сообщения этого уровня и выше будут логироваться. Допустимые уровни: %s" + +#: internal/arduino/builder/internal/detector/detector.go:466 +msgid "Missing '%[1]s' from library in %[2]s" +msgstr "Пропущен '%[1]s' из библиотеки в %[2]s" + +#: commands/cmderrors/cmderrors.go:169 +msgid "Missing FQBN (Fully Qualified Board Name)" +msgstr "Отсутствует FQBN (Полное квалифицированное наименование платы)" + +#: commands/cmderrors/cmderrors.go:260 +msgid "Missing port" +msgstr "Отсутствует порт" + +#: commands/cmderrors/cmderrors.go:236 +msgid "Missing port address" +msgstr "Отсутствует адрес порта" + +#: commands/cmderrors/cmderrors.go:248 +msgid "Missing port protocol" +msgstr "Отсутствует протокол порта" + +#: commands/cmderrors/cmderrors.go:286 +msgid "Missing programmer" +msgstr "Отсутствует программатор" + +#: internal/cli/upload/upload.go:162 +msgid "Missing required upload field: %s" +msgstr "Отсутствует обязательное поле загрузки: %s" + +#: internal/arduino/builder/sizer.go:247 +msgid "Missing size regexp" +msgstr "Отсутствует размер регулярного выражения" + +#: commands/cmderrors/cmderrors.go:497 +msgid "Missing sketch path" +msgstr "Отсутствует путь к скетчу" + +#: commands/cmderrors/cmderrors.go:358 +msgid "Monitor '%s' not found" +msgstr "Монитор '%s' не найден" + +#: internal/cli/monitor/monitor.go:261 +msgid "Monitor port settings:" +msgstr "Настройки порта монитора:" + +#: internal/arduino/builder/internal/detector/detector.go:156 +msgid "Multiple libraries were found for \"%[1]s\"" +msgstr "Несколько библиотек найдено для \"%[1]s\"" + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 +msgid "Name" +msgstr "Наименование" + +#: internal/cli/lib/search.go:179 +msgid "Name: \"%s\"" +msgstr "Наименование: \"%s\"" + +#: internal/cli/upload/upload.go:238 +msgid "New upload port: %[1]s (%[2]s)" +msgstr "Новый порт загрузки: %[1]s (%[2]s)" + +#: internal/cli/board/list.go:132 +msgid "No boards found." +msgstr "Платы не найдены." + +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "Не установлен порт по умолчанию, FQBN или программатор" + +#: internal/cli/lib/examples.go:108 +msgid "No libraries found." +msgstr "Библиотеки не найдены." + +#: internal/cli/lib/list.go:130 +msgid "No libraries installed." +msgstr "Библиотеки не установлены." + +#: internal/cli/lib/search.go:168 +msgid "No libraries matching your search." +msgstr "Нет библиотек, соответствующих вашему поиску." + +#: internal/cli/lib/search.go:174 +msgid "" +"No libraries matching your search.\n" +"Did you mean...\n" +msgstr "" +"Нет библиотек, соответствующих вашему поиску.\n" +"Возможно вы имели ввиду...\n" + +#: internal/cli/lib/list.go:128 +msgid "No libraries update is available." +msgstr "Нет доступных обновлений библиотек." + +#: commands/cmderrors/cmderrors.go:274 +msgid "No monitor available for the port protocol %s" +msgstr "Нет доступного монитора для протокола порта %s" + +#: internal/cli/outdated/outdated.go:95 +msgid "No outdated platforms or libraries found." +msgstr "Не обнаружено устаревших платформ или библиотек." + +#: internal/cli/core/list.go:114 +msgid "No platforms installed." +msgstr "Нет установленных платформ." + +#: internal/cli/core/search.go:113 +msgid "No platforms matching your search." +msgstr "Нет платформ, соответствующих вашему поиску." + +#: commands/service_upload.go:534 +msgid "No upload port found, using %s as fallback" +msgstr "" +"Не найден порт загрузки, используется %s в качестве резервного варианта" + +#: commands/cmderrors/cmderrors.go:464 +msgid "No valid dependencies solution found" +msgstr "Не найдено допустимое решение зависимостей" + +#: internal/arduino/builder/sizer.go:198 +msgid "Not enough memory; see %[1]s for tips on reducing your footprint." +msgstr "Недостаточно памяти; прочитайте %[1]s" + +#: internal/arduino/builder/internal/detector/detector.go:159 +msgid "Not used: %[1]s" +msgstr "Не используется: %[1]s" + +#: internal/cli/board/details.go:187 +msgid "OS:" +msgstr "ОС:" + +#: internal/cli/board/details.go:145 +msgid "Official Arduino board:" +msgstr "Официальная плата Arduino:" + +#: internal/cli/lib/search.go:98 +msgid "" +"Omit library details far all versions except the latest (produce a more " +"compact JSON output)." +msgstr "" +"Опустить сведения о библиотеке для всех версий, кроме последней (получить " +"более компактный вывод JSON)." + +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 +msgid "Open a communication port with a board." +msgstr "Открыть коммуникационный порт с платой." + +#: internal/cli/board/details.go:200 +msgid "Option:" +msgstr "Параметр:" + +#: internal/cli/compile/compile.go:120 +msgid "" +"Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." +msgstr "" +"Необязательно. Возможно: %s. Используется для указания gcc, какой уровень " +"предупреждений использовать (флаг -W)." + +#: internal/cli/compile/compile.go:133 +msgid "Optional, cleanup the build folder and do not use any cached build." +msgstr "" +"Необязательно. Очистить каталог сборки и не использовать кэшированные " +"сборки." + +#: internal/cli/compile/compile.go:130 +msgid "" +"Optional, optimize compile output for debugging, rather than for release." +msgstr "" +"Необязательно. Оптимизировать вывод компиляции для отладки, а не для " +"выпуска." + +#: internal/cli/compile/compile.go:122 +msgid "Optional, suppresses almost every output." +msgstr "Необязательно. Подавляет почти весь вывод." + +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 +msgid "Optional, turns on verbose mode." +msgstr "Необязательно. Включает подробный режим." + +#: internal/cli/compile/compile.go:136 +msgid "" +"Optional. Path to a .json file that contains a set of replacements of the " +"sketch source code." +msgstr "" +"Необязательно. Путь к файлу .json, содержащему набор замен исходного кода " +"скетча." + +#: internal/cli/compile/compile.go:112 +msgid "" +"Override a build property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Переопределить свойство сборки с помощью пользовательского значения. Может " +"использоваться несколько раз для нескольких свойств." + +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Переопределить свойство отладки с помощью пользовательского значения. Может " +"использоваться несколько раз для нескольких свойств." + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" +"Переопределить свойство загрузки с помощью пользовательского значения. Может" +" использоваться несколько раз для нескольких свойств." + +#: internal/cli/config/init.go:62 +msgid "Overwrite existing config file." +msgstr "Перезаписать существующий файл конфигурации." + +#: internal/cli/sketch/archive.go:52 +msgid "Overwrites an already existing archive" +msgstr "Перезаписывает уже существующий архив" + +#: internal/cli/sketch/new.go:46 +msgid "Overwrites an existing .ino sketch." +msgstr "Перезаписывает существующий скетч .ino." + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "PACKAGER" +msgstr "PACKAGER" + +#: internal/cli/board/details.go:165 +msgid "Package URL:" +msgstr "URL пакета:" + +#: internal/cli/board/details.go:164 +msgid "Package maintainer:" +msgstr "Меинтейнер пакета:" + +#: internal/cli/board/details.go:163 +msgid "Package name:" +msgstr "Наименование пакета:" + +#: internal/cli/board/details.go:167 +msgid "Package online help:" +msgstr "Онлайн помощь пакета:" + +#: internal/cli/board/details.go:166 +msgid "Package website:" +msgstr "Веб-страница пакета:" + +#: internal/cli/lib/search.go:202 +msgid "Paragraph: %s" +msgstr "Параграф: %s" + +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 +msgid "Path" +msgstr "Путь" + +#: internal/cli/compile/compile.go:129 +msgid "" +"Path to a collection of libraries. Can be used multiple times or entries can" +" be comma separated." +msgstr "" +"Путь к коллекции библиотек. Может использоваться несколько раз или значения " +"могут быть разделены запятыми." + +#: internal/cli/compile/compile.go:127 +msgid "" +"Path to a single library’s root folder. Can be used multiple times or " +"entries can be comma separated." +msgstr "" +"Путь к корневой папке одной библиотеки. Может использоваться несколько раз " +"или значения могут быть разделены запятыми." + +#: internal/cli/cli.go:172 +msgid "Path to the file where logs will be written." +msgstr "Путь к файлу, в который будут записываться логи." + +#: internal/cli/compile/compile.go:108 +msgid "" +"Path where to save compiled files. If omitted, a directory will be created " +"in the default temporary path of your OS." +msgstr "" +"Путь сохранения скомпилированных файлов. Если не указан, каталог будет " +"создан во временном пути по умолчанию вашей ОС." + +#: commands/service_upload.go:515 +msgid "Performing 1200-bps touch reset on serial port %s" +msgstr "Выполнение сенсорного сброса 1200 бит/с на последовательном порту" + +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 +msgid "Platform %s already installed" +msgstr "Платформа %s уже установлена" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 +msgid "Platform %s installed" +msgstr "Платформа %s установлена" + +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 +msgid "" +"Platform %s is not found in any known index\n" +"Maybe you need to add a 3rd party URL?" +msgstr "" +"Платформа %s не найдена ни в одном из известных индексов\n" +"Возможно необходимо добавить сторонний - 3rd party URL?" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 +msgid "Platform %s uninstalled" +msgstr "Платформа %s удалена" + +#: commands/cmderrors/cmderrors.go:482 +msgid "Platform '%s' is already at the latest version" +msgstr "Последняя версия платформы '%s' уже установлена" + +#: commands/cmderrors/cmderrors.go:406 +msgid "Platform '%s' not found" +msgstr "Платформа '%s' не найдена" + +#: internal/cli/board/search.go:85 +msgid "Platform ID" +msgstr "Идентификатор платформы:" + +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 +msgid "Platform ID is not correct" +msgstr "Идентификатор платформы указан неверно" + +#: internal/cli/board/details.go:173 +msgid "Platform URL:" +msgstr "URL платформы:" + +#: internal/cli/board/details.go:172 +msgid "Platform architecture:" +msgstr "Архитектура платформы:" + +#: internal/cli/board/details.go:171 +msgid "Platform category:" +msgstr "Категория платформы:" + +#: internal/cli/board/details.go:178 +msgid "Platform checksum:" +msgstr "Контрольная сумма платформы:" + +#: internal/cli/board/details.go:174 +msgid "Platform file name:" +msgstr "Наименование файла платформы:" + +#: internal/cli/board/details.go:170 +msgid "Platform name:" +msgstr "Наименование платформы:" + +#: internal/cli/board/details.go:176 +msgid "Platform size (bytes):" +msgstr "Размер платформы (байт):" + +#: commands/cmderrors/cmderrors.go:153 +msgid "" +"Please specify an FQBN. Multiple possible boards detected on port %[1]s with" +" protocol %[2]s" +msgstr "" +"Пожалуйста, укажите FQBN. Несколько возможных плат обнаружено на порту %[1]s" +" с протоколом %[2]s" + +#: commands/cmderrors/cmderrors.go:133 +msgid "" +"Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" +" identified" +msgstr "" +"Пожалуйста, укажите FQBN. Плата на порту %[1]s с протоколом %[2]s не может " +"быть идентифицирована" + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Port" +msgstr "Порт" + +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 +msgid "Port closed: %v" +msgstr "Порт закрыт: %v" + +#: commands/cmderrors/cmderrors.go:668 +msgid "Port monitor error" +msgstr "Ошибка монитора порта" + +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 +msgid "Precompiled library in \"%[1]s\" not found" +msgstr "Предварительно скомпилированная библиотека не найдена в \"%[1]s\"" + +#: internal/cli/board/details.go:42 +msgid "Print details about a board." +msgstr "Вывести детали о плате." + +#: internal/cli/compile/compile.go:103 +msgid "Print preprocessed code to stdout instead of compiling." +msgstr "" +"Вывести предварительно обработанный код на стандартный вывод вместо " +"компиляции." + +#: internal/cli/cli.go:166 internal/cli/cli.go:168 +msgid "Print the logs on the standard output." +msgstr "Вывести логи на стандартный вывод." + +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "Вывести вывод в формате JSON." + +#: internal/cli/config/dump.go:31 +msgid "Prints the current configuration" +msgstr "Выводит текущую конфигурацию" + +#: internal/cli/config/dump.go:32 +msgid "Prints the current configuration." +msgstr "Выводит текущую конфигурацию." + +#: commands/cmderrors/cmderrors.go:202 +msgid "Profile '%s' not found" +msgstr "Профиль '%s' не найден" + +#: commands/cmderrors/cmderrors.go:339 +msgid "Programmer '%s' not found" +msgstr "Программатор '%s' не найден" + +#: internal/cli/board/details.go:111 +msgid "Programmer name" +msgstr "Наименование программатора" + +#: internal/cli/arguments/programmer.go:35 +msgid "Programmer to use, e.g: atmel_ice" +msgstr "Использовать программатор, например: atmel_ice" + +#: internal/cli/board/details.go:216 +msgid "Programmers:" +msgstr "Программаторы:" + +#: commands/cmderrors/cmderrors.go:391 +msgid "Property '%s' is undefined" +msgstr "Свойство '%s' не определено" + +#: internal/cli/board/list.go:142 +msgid "Protocol" +msgstr "Протокол" + +#: internal/cli/lib/search.go:212 +msgid "Provides includes: %s" +msgstr "Предоставленное включает в себя: %s" + +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 +msgid "Removes one or more values from a setting." +msgstr "Удаляет одно или несколько значений из настройки." + +#: commands/service_library_install.go:188 +msgid "Replacing %[1]s with %[2]s" +msgstr "Замена %[1]s на %[2]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 +msgid "Replacing platform %[1]s with %[2]s" +msgstr "Замена платформы %[1]s на %[2]s" + +#: internal/cli/board/details.go:184 +msgid "Required tool:" +msgstr "Необходимый инструмент:" + +#: internal/cli/monitor/monitor.go:79 +msgid "Run in silent mode, show only monitor input and output." +msgstr "Работать в тихом режиме, отображать только ввод и вывод монитора." + +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "Запустить Arduino CLI как демон gRPC." + +#: internal/arduino/builder/core.go:43 +msgid "Running normal build of the core..." +msgstr "Запуск обычной сборки ядра..." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 +msgid "Running pre_uninstall script." +msgstr "Запуск скрипта pre_uninstall." + +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "SEARCH_TERM" + +#: internal/cli/debug/debug.go:238 +msgid "SVD file path" +msgstr "путь файла SVD" + +#: internal/cli/compile/compile.go:106 +msgid "Save build artifacts in this directory." +msgstr "Сохранить артефакты сборки в этом каталоге." + +#: internal/cli/board/search.go:39 +msgid "Search for a board in the Boards Manager using the specified keywords." +msgstr "Поиск платы в Менеджере плат используя указанные ключевые слова." + +#: internal/cli/board/search.go:38 +msgid "Search for a board in the Boards Manager." +msgstr "Поиск платы в Менеджере плат." + +#: internal/cli/core/search.go:41 +msgid "Search for a core in Boards Manager using the specified keywords." +msgstr "Поиск ядра в Менеджере плат используя указанные ключевые слова." + +#: internal/cli/core/search.go:40 +msgid "Search for a core in Boards Manager." +msgstr "Поиск ядра в Менеджере плат." + +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"Поиск библиотек, соответствующих нулю или более поисковым запросам.\n" +"\n" +"Все поиски выполняются без учета регистра. Запросы, содержащие несколько\n" +"поисковых терминов, вернут только библиотеки, соответствующие всем терминам.\n" +"\n" +"Поисковые термины, которые не соответствуют синтаксису QV, описанному ниже,\n" +"являются базовыми поисковыми терминами и будут соответствовать библиотекам,\n" +"которые включают этот термин в любое место в любом из следующих полей:\n" +" - Автор\n" +" - Наименование\n" +" - Параграф\n" +" - Предоставления\n" +" - Предложение\n" +"\n" +"Специальный синтаксис, называемый квалификатор-значение (QV), указывает,\n" +"что поисковый термин должен сравниваться только с одним полем каждой записи индекса библиотеки.\n" +"Этот синтаксис использует имя поля индекса (без учета регистра), знак равенства (=) или двоеточие (:)\n" +"и значение, например, 'name=ArduinoJson' или 'provides:tinyusb.h'.\n" +"\n" +"Поисковые термины QV, в которых используется разделитель двоеточие,\n" +"будут соответствовать всем библиотекам со значением в любом месте указанного поля,\n" +"а поисковые термины QV, в которых используется разделитель равно,\n" +"будут соответствовать только библиотекам с точно указанным значением в указанном поле.\n" +"\n" +"Термины поиска QV могут включать встроенные пробелы с использованием символов\n" +"двойных кавычек (\") вокруг значения или всего термина, например, 'category=\"Data Processing\"'\n" +"и '\"category=Data Processing\"' эквивалентны. Термин QV может включать буквальный символ\n" +"двойных кавычек, если перед ним поставить символ обратной косой черты (\\).\n" +"\n" +"ПРИМЕЧАНИЕ. Для поисковых терминов QV, использующих символы двойных кавычек\n" +"или обратной косой черты, которые передаются в качестве аргументов командной строки,\n" +"может потребоваться заключение в кавычки или экранирование, чтобы оболочка не интерпретировала эти символы.\n" +"\n" +"В дополнение к полям, перечисленным выше, термины QV могут использовать следующие квалификаторы:\n" +" - Архитектуры\n" +" - Категории\n" +" - Зависимости\n" +" - Лицензия\n" +" - Меинтейнер\n" +" - Типы\n" +" - Версия\n" +" - Веб-сайт\n" +"\t\t" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "" +"Выполняет поиск одной или нескольких библиотек, соответствующих запросу." + +#: internal/cli/lib/search.go:201 +msgid "Sentence: %s" +msgstr "Предложение: %s" + +#: internal/cli/debug/debug.go:246 +msgid "Server path" +msgstr "Путь сервера" + +#: internal/arduino/httpclient/httpclient.go:61 +msgid "Server responded with: %s" +msgstr "Ответ сервера: %s" + +#: internal/cli/debug/debug.go:245 +msgid "Server type" +msgstr "Тип сервера" + +#: internal/cli/upload/upload.go:83 +msgid "Set a value for a field required to upload." +msgstr "Установить значение поля, необходимого для загрузки." + +#: internal/cli/monitor/monitor.go:76 +msgid "Set terminal in raw mode (unbuffered)." +msgstr "Установить терминал в режим raw (без буферизации)." + +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 +msgid "Sets a setting value." +msgstr "Устанавливает значение параметра." + +#: internal/cli/cli.go:189 +msgid "" +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." +msgstr "" +"Устанавливает каталог данных по умолчанию (Arduino CLI будет искать файл " +"конфигурации в этом каталоге)." + +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" +"Устанавливает значения по умолчанию для порта и FQBN. Если порт, FQBN или " +"программатор не указаны, отображаются текущие порт по умолчанию, FQBN и " +"программатор." + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" +"Устанавливает максимальный размер сообщения в байтах, который может получить" +" демон" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 +msgid "Sets where to save the configuration file." +msgstr "Устанавливает место сохранения файла конфигурации." + +#: internal/cli/monitor/monitor.go:331 +msgid "Setting" +msgstr "Параметр" + +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" +"Должно отображать справочное сообщение, но оно доступно только в ТЕКСТОВОМ " +"режиме." + +#: internal/cli/core/search.go:48 +msgid "Show all available core versions." +msgstr "Показать все доступные версии ядра." + +#: internal/cli/monitor/monitor.go:77 +msgid "Show all the settings of the communication port." +msgstr "Показать все параметры коммуникационного порта." + +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 +msgid "Show also boards marked as 'hidden' in the platform" +msgstr "Показывать также и платы, отмеченные на платформе как 'скрытые'" + +#: internal/cli/arguments/show_properties.go:60 +msgid "" +"Show build properties. The properties are expanded, use \"--show-" +"properties=unexpanded\" if you want them exactly as they are defined." +msgstr "" +"Показать свойства сборки. Свойства развернуты, используйте \"--show-" +"properties=unexpanded\", если вы хотите, чтобы они были именно такими, как " +"они определены." + +#: internal/cli/board/details.go:52 +msgid "Show full board details" +msgstr "Показать полную информацию о плате" + +#: internal/cli/board/details.go:43 +msgid "" +"Show information about a board, in particular if the board has options to be" +" specified in the FQBN." +msgstr "" +"Показывать информацию о плате, в частности, есть ли у платы опции, которые " +"необходимо указать в FQBN." + +#: internal/cli/lib/search.go:97 +msgid "Show library names only." +msgstr "Показать только названия библиотек." + +#: internal/cli/board/details.go:53 +msgid "Show list of available programmers" +msgstr "Показать список доступных программаторов" + +#: internal/cli/debug/debug.go:73 +msgid "" +"Show metadata about the debug session instead of starting the debugger." +msgstr "Показывать метаданные о сеансе отладки вместо запуска отладчика." + +#: internal/cli/update/update.go:45 +msgid "Show outdated cores and libraries after index update" +msgstr "Показать устаревшие ядра и библиотеки после обновления индекса" + +#: internal/cli/lib/list.go:40 +msgid "Shows a list of installed libraries." +msgstr "Показывает список установленных библиотек." + +#: internal/cli/lib/list.go:41 +msgid "" +"Shows a list of installed libraries.\n" +"\n" +"If the LIBNAME parameter is specified the listing is limited to that specific\n" +"library. By default the libraries provided as built-in by platforms/core are\n" +"not listed, they can be listed by adding the --all flag." +msgstr "" +"Показывает список установленных библиотек.\n" +"\n" +"Если указан параметр LIBNAME, то список ограничивается этой конкретной библиотекой.\n" +"По умолчанию библиотеки, предоставляемые как встроенные платформами/ядром,\n" +"не перечислены, их можно перечислить, добавив флаг --all." + +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 +msgid "Shows the list of installed platforms." +msgstr "Показывает список установленных платформ." + +#: internal/cli/lib/examples.go:44 +msgid "Shows the list of the examples for libraries." +msgstr "Показывает список примеров для библиотек." + +#: internal/cli/lib/examples.go:45 +msgid "" +"Shows the list of the examples for libraries. A name may be given as " +"argument to search a specific library." +msgstr "" +"Показывает список примеров для библиотек. Наименование может быть указано " +"как аргумент для поиска определенной библиотеки." + +#: internal/cli/version/version.go:37 +msgid "" +"Shows the version number of Arduino CLI which is installed on your system." +msgstr "Показывает номер версии Arduino CLI, установленной в вашей системе." + +#: internal/cli/version/version.go:36 +msgid "Shows version number of Arduino CLI." +msgstr "Показывает номер версии Arduino CLI." + +#: internal/cli/board/details.go:189 +msgid "Size (bytes):" +msgstr "Размер (байт):" + +#: commands/service_compile.go:286 +msgid "" +"Sketch cannot be located in build path. Please specify a different build " +"path" +msgstr "" +"Нельзя расположить скетч в каталоге сборки. Пожалуйста укажите другой путь " +"сборки" + +#: internal/cli/sketch/new.go:98 +msgid "Sketch created in: %s" +msgstr "Скетч создан в: %s" + +#: internal/cli/arguments/profiles.go:33 +msgid "Sketch profile to use" +msgstr "Использовать профиль скетча" + +#: internal/arduino/builder/sizer.go:193 +msgid "Sketch too big; see %[1]s for tips on reducing it." +msgstr "Скетч слишком большой; прочитайте %[1]s" + +#: internal/arduino/builder/sizer.go:160 +msgid "" +"Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" +" bytes." +msgstr "" +"Скетч использует %[1]s байт (%[3]s%%) памяти устройства. Всего доступно " +"%[2]s байт." + +#: internal/cli/feedback/warn_deprecated.go:39 +msgid "" +"Sketches with .pde extension are deprecated, please rename the following " +"files to .ino:" +msgstr "" +"Скетчи с расширением .pde устарели, пожалуйста, переименуйте следующие файлы" +" в .ino:" + +#: internal/arduino/builder/linker.go:31 +msgid "Skip linking of final executable." +msgstr "Пропустить компоновку конечного исполняемого файла." + +#: commands/service_upload.go:508 +msgid "Skipping 1200-bps touch reset: no serial port selected!" +msgstr "" +"Пропуск сенсорного сброса 1200 бит/с: последовательный порт не выбран!" + +#: internal/arduino/builder/archive_compiled_files.go:28 +msgid "Skipping archive creation of: %[1]s" +msgstr "Пропуск создания архива: %[1]s" + +#: internal/arduino/builder/compilation.go:184 +msgid "Skipping compile of: %[1]s" +msgstr "Пропуск компиляции: %[1]s" + +#: internal/arduino/builder/internal/detector/detector.go:414 +msgid "Skipping dependencies detection for precompiled library %[1]s" +msgstr "" +"Пропуск обнаружения зависимостей для предварительно скомпилированной " +"библиотеки %[1]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 +msgid "Skipping platform configuration." +msgstr "Пропуск конфигурации платформы." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 +msgid "Skipping pre_uninstall script." +msgstr "Пропуск скрипта pre_uninstall." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 +msgid "Skipping tool configuration." +msgstr "Пропуск конфигурации инструмента." + +#: internal/arduino/builder/recipe.go:48 +msgid "Skipping: %[1]s" +msgstr "Пропуск: %[1]s" + +#: commands/instances.go:634 +msgid "Some indexes could not be updated." +msgstr "Некоторые индексы не удалось обновить." + +#: internal/cli/core/upgrade.go:141 +msgid "Some upgrades failed, please check the output for details." +msgstr "" +"Некоторые обновления не удалось выполнить, проверьте вывод для получения " +"подробной информации." + +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" +msgstr "TCP-порт, который будет прослушивать демон" + +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "Формат вывода команды может быть следующим: %s" + +#: internal/cli/cli.go:187 +msgid "The custom config file (if not specified the default will be used)." +msgstr "" +"Пользовательский файл конфигурации (если не указан, будет использован файл " +"по умолчанию)." + +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" +"Флаг --build-cache-path устарел. Используйте только --build-path или " +"настройте путь к кэшу сборки в настройках Arduino CLI." + +#: internal/cli/daemon/daemon.go:103 +msgid "The flag --debug-file must be used with --debug." +msgstr "Флаг --debug-file необходимо использовать совместно с --debug." + +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "Данная конфигурация платы/программатора НЕ поддерживает отладку." + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "Данная конфигурация платы/программатора поддерживает отладку." + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "Экземпляр недействителен и его необходимо повторно инициализировать" + +#: internal/cli/config/add.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't add to it.\n" +"Maybe use '%[2]s'?" +msgstr "" +"Ключ '%[1]v' не является списком элементов, к нему нельзя ничего добавить.\n" +"Может быть, использовать '%[2]s'?" + +#: internal/cli/config/remove.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't remove from it.\n" +"Maybe use '%[2]s'?" +msgstr "" +"Ключ '%[1]v' не является списком элементов, из него нельзя удалить.\n" +"Может быть, использовать '%[2]s'?" + +#: commands/cmderrors/cmderrors.go:858 +msgid "The library %s has multiple installations:" +msgstr "Библиотека %s имеет несколько установок:" + +#: internal/cli/compile/compile.go:118 +msgid "" +"The name of the custom encryption key to use to encrypt a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" +"Имя пользовательского ключа шифрования, используемого для шифрования " +"двоичного файла во время процесса компиляции. Используется только " +"платформами, которые это поддерживают." + +#: internal/cli/compile/compile.go:116 +msgid "" +"The name of the custom signing key to use to sign a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" +"Имя пользовательского ключа подписи, используемого для подписи двоичного " +"файла во время процесса компиляции. Используется только платформами, которые" +" это поддерживают." + +#: internal/cli/cli.go:174 +msgid "The output format for the logs, can be: %s" +msgstr "Формат вывода для логов может быть: %s" + +#: internal/cli/compile/compile.go:114 +msgid "" +"The path of the dir to search for the custom keys to sign and encrypt a " +"binary. Used only by the platforms that support it." +msgstr "" +"Путь к каталогу для поиска пользовательских ключей для подписи и шифрования " +"двоичного файла. Используется только платформами, которые это поддерживают." + +#: internal/arduino/builder/libraries.go:152 +msgid "The platform does not support '%[1]s' for precompiled libraries." +msgstr "" +"Платформа не поддерживает '%[1]s' для предварительно скомпилированных " +"библиотек." + +#: internal/cli/lib/upgrade.go:36 +msgid "" +"This command upgrades an installed library to the latest available version. " +"Multiple libraries can be passed separated by a space. If no arguments are " +"provided, the command will upgrade all the installed libraries where an " +"update is available." +msgstr "" +"Эта команда обновляет установленную библиотеку до последней доступной " +"версии. Можно передать несколько библиотек, разделенных пробелом. Если " +"аргументы не указаны, команда обновит все установленные библиотеки, для " +"которых доступно обновление." + +#: internal/cli/outdated/outdated.go:42 +msgid "" +"This commands shows a list of installed cores and/or libraries\n" +"that can be upgraded. If nothing needs to be updated the output is empty." +msgstr "" +"Эта команда показывает список установленных ядер и/или библиотек, которые можно обновить.\n" +"Если ничего не нужно обновлять, вывод будет пустым." + +#: internal/cli/monitor/monitor.go:80 +msgid "Timestamp each incoming line." +msgstr "Отмечать время каждой входящей строки." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 +msgid "Tool %s already installed" +msgstr "Инструмент %s уже установлен" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 +msgid "Tool %s uninstalled" +msgstr "Инструмент %s удален" + +#: commands/service_debug.go:277 +msgid "Toolchain '%s' is not supported" +msgstr "Набор инструментов '%s' не поддерживается" + +#: internal/cli/debug/debug.go:235 +msgid "Toolchain path" +msgstr "Путь к набору инструментов" + +#: internal/cli/debug/debug.go:236 +msgid "Toolchain prefix" +msgstr "Префикс набора инструментов" + +#: internal/cli/debug/debug.go:234 +msgid "Toolchain type" +msgstr "Тип набора инструментов" + +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 +msgid "Try running %s" +msgstr "Попытка запуска %s" + +#: internal/cli/burnbootloader/burnbootloader.go:63 +msgid "Turns on verbose mode." +msgstr "Включает подробный режим." + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Type" +msgstr "Тип" + +#: internal/cli/lib/search.go:209 +msgid "Types: %s" +msgstr "Типы: %s" + +#: internal/cli/board/details.go:191 +msgid "URL:" +msgstr "URL:" + +#: internal/arduino/builder/core.go:166 +msgid "" +"Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" +msgstr "" +"Невозможно кэшировать сборку ядра, пожалуйста сообщите %[1]s меинтейнерам " +"для решения проблемы %[2]s" + +#: internal/cli/configuration/configuration.go:95 +msgid "Unable to get Documents Folder: %v" +msgstr "Невозможно получить каталог документов: %v" + +#: internal/cli/configuration/configuration.go:70 +msgid "Unable to get Local App Data Folder: %v" +msgstr "Невозможно получить локальный каталог данных приложений: %v" + +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 +msgid "Unable to get user home dir: %v" +msgstr "Невозможно получить домашний каталог пользователя: %v" + +#: internal/cli/cli.go:252 +msgid "Unable to open file for logging: %s" +msgstr "Невозможно открыть файл для логирования: %s" + +#: commands/instances.go:563 +msgid "Unable to parse URL" +msgstr "Невозможно разобрать URL" + +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 +msgid "Uninstalling %s" +msgstr "Удаление %s" + +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 +msgid "Uninstalling %s, tool is no more required" +msgstr "Удаление %s, инструмент больше не нужен" + +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 +msgid "" +"Uninstalls one or more cores and corresponding tool dependencies if no " +"longer used." +msgstr "" +"Удаляет одно или несколько ядер и зависимости соответствующих инструментов, " +"если они больше не используются." + +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 +msgid "Uninstalls one or more libraries." +msgstr "Удаляет одну или несколько библиотек." + +#: internal/cli/board/list.go:174 +msgid "Unknown" +msgstr "Неизвестный" + +#: commands/cmderrors/cmderrors.go:183 +msgid "Unknown FQBN" +msgstr "Неизвестный FQBN" + +#: internal/cli/update/update.go:37 +msgid "Updates the index of cores and libraries" +msgstr "Обновляет индекс ядер и библиотек" + +#: internal/cli/update/update.go:38 +msgid "Updates the index of cores and libraries to the latest versions." +msgstr "Обновляет индекс ядер и библиотек до последних версий." + +#: internal/cli/core/update_index.go:36 +msgid "Updates the index of cores to the latest version." +msgstr "Обновляет индекс ядер до последних версий." + +#: internal/cli/core/update_index.go:35 +msgid "Updates the index of cores." +msgstr "Обновляет индекс ядер." + +#: internal/cli/lib/update_index.go:36 +msgid "Updates the libraries index to the latest version." +msgstr "Обновляет индекс библиотек до последних версий." + +#: internal/cli/lib/update_index.go:35 +msgid "Updates the libraries index." +msgstr "Обновляет индекс библиотек." + +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 +msgid "Upgrade doesn't accept parameters with version" +msgstr "Обновление не принимает параметры с версией" + +#: internal/cli/upgrade/upgrade.go:38 +msgid "Upgrades installed cores and libraries to latest version." +msgstr "Обновляет установленные ядра и библиотеки до последней версии." + +#: internal/cli/upgrade/upgrade.go:37 +msgid "Upgrades installed cores and libraries." +msgstr "Обновляет установленные ядра и библиотеки." + +#: internal/cli/lib/upgrade.go:35 +msgid "Upgrades installed libraries." +msgstr "Обновляет установленные библиотеки." + +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 +msgid "Upgrades one or all installed platforms to the latest version." +msgstr "Обновляет одну или все установленные платформы до последней версии." + +#: internal/cli/upload/upload.go:56 +msgid "Upload Arduino sketches." +msgstr "Загрузить скетчи Arduino." + +#: internal/cli/upload/upload.go:57 +msgid "" +"Upload Arduino sketches. This does NOT compile the sketch prior to upload." +msgstr "Загрузить скетчи Arduino. Это НЕ компилирует скетч перед загрузкой." + +#: internal/cli/arguments/port.go:44 +msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" +msgstr "Адрес порта загрузки, например: COM3 или /dev/ttyACM2" + +#: commands/service_upload.go:532 +msgid "Upload port found on %s" +msgstr "Порт загрузки найден на %s" + +#: internal/cli/arguments/port.go:48 +msgid "Upload port protocol, e.g: serial" +msgstr "Протокол порта загрузки, например: последовательный" + +#: internal/cli/compile/compile.go:123 +msgid "Upload the binary after the compilation." +msgstr "Загрузить двоичный файл после компиляции." + +#: internal/cli/burnbootloader/burnbootloader.go:49 +msgid "Upload the bootloader on the board using an external programmer." +msgstr "Загрузить загрузчик на плату с помощью внешнего программатора." + +#: internal/cli/burnbootloader/burnbootloader.go:48 +msgid "Upload the bootloader." +msgstr " Загрузить загрузчик." + +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 +msgid "" +"Uploading to specified board using %s protocol requires the following info:" +msgstr "" +"Для загрузки на указанную плату используя протокол %s требуется следующая " +"информация:" + +#: internal/cli/config/init.go:160 +msgid "" +"Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" +"%s" +msgstr "" +"URL не могут содержать запятые. Разделите несколько URL, экспортированных как переменные окружения, пробелом:\n" +"%s" + +#: internal/cli/usage.go:22 +msgid "Usage:" +msgstr "Использование:" + +#: internal/cli/usage.go:29 +msgid "Use %s for more information about a command." +msgstr "Используйте %s для получения дополнительной информации о команде." + +#: internal/cli/compile/compile.go:471 +msgid "Used library" +msgstr "Использована библиотека" + +#: internal/cli/compile/compile.go:486 +msgid "Used platform" +msgstr "Использована платформа" + +#: internal/arduino/builder/internal/detector/detector.go:157 +msgid "Used: %[1]s" +msgstr "Используется: %[1]s" + +#: commands/service_compile.go:361 +msgid "Using board '%[1]s' from platform in folder: %[2]s" +msgstr "использование платы '%[1]s' из платформы в каталоге: %[2]s" + +#: internal/arduino/builder/internal/detector/detector.go:351 +msgid "Using cached library dependencies for file: %[1]s" +msgstr "Использование кэшированных библиотечных зависимостей для файла: %[1]s" + +#: commands/service_compile.go:362 +msgid "Using core '%[1]s' from platform in folder: %[2]s" +msgstr "Использование ядра '%[1]s' из платформы в каталоге: %[2]s" + +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "Использование конфигурации монитора по умолчанию для платы: %s" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" +"Использование обобщенной конфигурации монитора.\n" +"ВНИМАНИЕ: для работы вашей платы могут потребоваться другие настройки!\n" + +#: internal/arduino/builder/libraries.go:313 +msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" +msgstr "Используем библиотеку %[1]s версии %[2]s из папки: %[3]s %[4]s" + +#: internal/arduino/builder/libraries.go:307 +msgid "Using library %[1]s in folder: %[2]s %[3]s" +msgstr "Используем библиотеку %[1]s в папке: %[2]s %[3]s" + +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 +msgid "Using precompiled core: %[1]s" +msgstr "Использование предварительно скомпилированного ядра: %[1]s" + +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 +msgid "Using precompiled library in %[1]s" +msgstr "Использование предварительно скомпилированной библиотеки в %[1]s" + +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 +msgid "Using previously compiled file: %[1]s" +msgstr "Используем предварительно скомпилированный файл: %[1]s" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +msgid "VERSION" +msgstr "VERSION" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "VERSION_NUMBER" +msgstr "VERSION_NUMBER" + +#: internal/cli/monitor/monitor.go:331 +msgid "Values" +msgstr "Значения" + +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 +msgid "Verify uploaded binary after the upload." +msgstr "Проверить загруженный двоичный файл после загрузки." + +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 +msgid "Version" +msgstr "Версия" + +#: internal/cli/lib/search.go:210 +msgid "Versions: %s" +msgstr "Версии: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 +msgid "WARNING cannot configure platform: %s" +msgstr "ВНИМАНИЕ: невозможно настроить платформу" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 +msgid "WARNING cannot configure tool: %s" +msgstr "ВНИМАНИЕ: не удалось настроить инструмент: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 +msgid "WARNING cannot run pre_uninstall script: %s" +msgstr "ВНИМАНИЕ: невозможно выполнить скрипт pre_uninstall: %s" + +#: internal/cli/compile/compile.go:339 +msgid "WARNING: The sketch is compiled using one or more custom libraries." +msgstr "" +"ВНИМАНИЕ: Скетч скомпилирован с использованием одной или нескольких " +"пользовательских библиотек." + +#: internal/arduino/builder/libraries.go:284 +msgid "" +"WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " +"incompatible with your current board which runs on %[3]s architecture(s)." +msgstr "" +"ВНИМАНИЕ: библиотека %[1]s должна запускаться на архитектуре(-ах) %[2]s и " +"может быть несовместима с вашей платой на архитектуре(-ах) %[3]s." + +#: commands/service_upload.go:521 +msgid "Waiting for upload port..." +msgstr "Ожидание порта загрузки..." + +#: commands/service_compile.go:367 +msgid "" +"Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" +msgstr "" +"Внимание: Плата %[1]s не определяет свойство %[2]s. Автоматически " +"установлено: %[3]s" + +#: internal/cli/lib/search.go:203 +msgid "Website: %s" +msgstr "Веб-сайт: %s" + +#: internal/cli/config/init.go:45 +msgid "Writes current configuration to a configuration file." +msgstr "Записывает текущую конфигурацию в файл конфигурации." + +#: internal/cli/config/init.go:48 +msgid "" +"Writes current configuration to the configuration file in the data " +"directory." +msgstr "" +"Записывает текущую конфигурацию в файл конфигурации в каталоге данных." + +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 +msgid "You cannot use the %s flag while compiling with a profile." +msgstr "Нельзя использовать флаг %s во время компиляции с профилем." + +#: internal/arduino/resources/checksums.go:79 +msgid "archive hash differs from hash in index" +msgstr "хэш архива отличается от хэша в индексе" + +#: internal/arduino/libraries/librariesmanager/install.go:187 +msgid "archive is not valid: multiple files found in zip file top level" +msgstr "" +"архив не валиден: в верхнем уровне zip-файла обнаружено несколько файлов" + +#: internal/arduino/libraries/librariesmanager/install.go:190 +msgid "archive is not valid: no files found in zip file top level" +msgstr "" +"archive is not valid: в верхнем уровне zip-файла не найдено ни одного файла" + +#: internal/cli/sketch/archive.go:36 +msgid "archivePath" +msgstr "путь к архиву" + +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 +msgid "arduino-preprocessor pattern is missing" +msgstr "отсутствует шаблон препроцессора arduino" + +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" +msgstr "доступно только в текстовом формате" + +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "базовый поиск по \"audio\"" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "базовый поиск по \"esp32\" и \"display\" ограничен официальным меинтейнером" + +#: commands/service_upload.go:792 +msgid "binary file not found in %s" +msgstr "двоичный файл не найден в %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:316 +msgid "board %s not found" +msgstr "плата %s не найдена" + +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 +msgid "boardname" +msgstr "наименование платы" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 +msgid "built-in libraries directory not set" +msgstr "не установлен каталог встроенных библиотек" + +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 +msgid "can't find latest release of %s" +msgstr "не удается найти последний релиз %s" + +#: commands/instances.go:273 +msgid "can't find latest release of tool %s" +msgstr "не удалось найти последний релиз инструмента %s" + +#: internal/arduino/cores/packagemanager/loader.go:709 +msgid "can't find pattern for discovery with id %s" +msgstr "не удалось найти шаблон для обнаружения с идентификатором %s" + +#: internal/arduino/builder/internal/detector/detector.go:93 +msgid "candidates" +msgstr "кандидаты" + +#: commands/service_upload.go:738 commands/service_upload.go:745 +msgid "cannot execute upload tool: %s" +msgstr "не удалось выполнить загрузку инструмента: %s" + +#: internal/arduino/resources/install.go:48 +msgid "checking local archive integrity" +msgstr "проверка целостности локального архива" + +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 +msgid "cleaning build path" +msgstr "очистка пути сборки" + +#: internal/cli/cli.go:90 +msgid "command" +msgstr "команда" + +#: internal/arduino/monitor/monitor.go:149 +msgid "command '%[1]s' failed: %[2]s" +msgstr "команда '%[1]s' не выполнена: %[2]s" + +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 +msgid "communication out of sync, expected '%[1]s', received '%[2]s'" +msgstr "коммуникация не синхронизирована, ожидалось '%[1]s', получено '%[2]s'" + +#: internal/arduino/resources/checksums.go:75 +msgid "computing hash: %s" +msgstr "вычисление хэша: %s" + +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "ключ конфигурации %s содержит недопустимый символ" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "значение конфигурации %s содержит недопустимый символ" + +#: internal/arduino/libraries/librariesmanager/install.go:140 +msgid "copying library to destination directory:" +msgstr "копирование библиотеки в целевой каталог:" + +#: commands/service_upload.go:864 +msgid "could not find a valid build artifact" +msgstr "не удалось найти валидный артефакт сборки" + +#: commands/service_platform_install.go:95 +msgid "could not overwrite" +msgstr "не удалось перезаписать" + +#: commands/service_library_install.go:191 +msgid "could not remove old library" +msgstr "не удалось удалить старую библиотеку" + +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 +msgid "could not update sketch project file" +msgstr "не удалось обновить файл проекта скетча" + +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 +msgid "creating core cache folder: %s" +msgstr "создание основного каталога кэша: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 +msgid "creating installed.json in %[1]s: %[2]s" +msgstr "создание файла installed.json в %[1]s: %[2]s" + +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 +msgid "creating temp dir for extraction: %s" +msgstr " создание временного каталога для извлечения: %s" + +#: internal/arduino/builder/sizer.go:199 +msgid "data section exceeds available space in board" +msgstr "раздел данных превышает доступное пространство на плате" + +#: commands/service_library_resolve_deps.go:86 +msgid "dependency '%s' is not available" +msgstr "зависимость '%s' недоступна" + +#: internal/arduino/libraries/librariesmanager/install.go:93 +msgid "destination dir %s already exists, cannot install" +msgstr "целевой каталог %s уже существует, невозможно установить" + +#: internal/arduino/libraries/librariesmanager/install.go:137 +msgid "destination directory already exists" +msgstr "целевой каталог уже существует" + +#: internal/arduino/libraries/librariesmanager/install.go:305 +msgid "directory doesn't exist: %s" +msgstr "не существует каталог: %s" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "процесс обнаружения %[1]s не запущен" + +#: internal/arduino/cores/packagemanager/loader.go:641 +msgid "discovery %s not found" +msgstr "обнаружение %s не найдено" + +#: internal/arduino/cores/packagemanager/loader.go:645 +msgid "discovery %s not installed" +msgstr "обнаружение %s не установлено" + +#: internal/arduino/cores/packagemanager/package_manager.go:714 +msgid "discovery release not found: %s" +msgstr "релиз обнаружения не найден: %s" + +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 +msgid "download a specific version (in this case 1.6.9)." +msgstr "скачать определенную версию (в данном случае 1.6.9)." + +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 +msgid "download the latest version of Arduino SAMD core." +msgstr "скачать последнюю версию ядра Arduino SAMD." + +#: internal/cli/feedback/rpc_progress.go:74 +msgid "downloaded" +msgstr "скачивание завершено" + +#: commands/instances.go:56 +msgid "downloading %[1]s tool: %[2]s" +msgstr "скачивание %[1]s инструмента: %[2]s" + +#: pkg/fqbn/fqbn.go:63 +msgid "empty board identifier" +msgstr "не заполнен идентификатор платы" + +#: internal/arduino/sketch/sketch.go:93 +msgid "error loading sketch project file:" +msgstr "ошибка загрузки файла проекта скетча:" + +#: internal/arduino/cores/packagemanager/loader.go:612 +msgid "error opening %s" +msgstr "ошибка открытия %s" + +#: internal/arduino/sketch/profiles.go:250 +msgid "error parsing version constraints" +msgstr "ошибка разбора ограничений версии" + +#: commands/service_board_identify.go:203 +msgid "error processing response from server" +msgstr "ошибка обработки ответа от сервера" + +#: commands/service_board_identify.go:183 +msgid "error querying Arduino Cloud Api" +msgstr "ошибка запроса Arduino Cloud Api" + +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" +msgstr "распаковка архива" + +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" +msgstr "распаковка архива: %s" + +#: internal/arduino/resources/checksums.go:143 +msgid "failed to compute hash of file \"%s\"" +msgstr "не удалось вычислить хэш файла \"%s\"" + +#: commands/service_board_identify.go:178 +msgid "failed to initialize http client" +msgstr "не удалось инициализировать http-клиент" + +#: internal/arduino/resources/checksums.go:98 +msgid "fetched archive size differs from size specified in index" +msgstr "" +"размер извлеченного архива отличается от размера, указанного в индексе" + +#: internal/arduino/resources/install.go:132 +msgid "files in archive must be placed in a subdirectory" +msgstr "файлы в архиве должны быть помещены в подкаталог" + +#: internal/arduino/cores/packagemanager/loader.go:59 +msgid "finding absolute path of %s" +msgstr "нахождение абсолютного пути %s" + +#: internal/cli/cli.go:90 +msgid "flags" +msgstr "флаги" + +#: internal/arduino/cores/packagemanager/loader.go:98 +msgid "following symlink %s" +msgstr "следующая символическая ссылка %s" + +#: internal/cli/lib/download.go:40 +msgid "for a specific version." +msgstr "для конкретной версии." + +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 +msgid "for the latest version." +msgstr "для последней версии." + +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 +msgid "for the specific version." +msgstr "для конкретной версии." + +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "поле fqbn %s содержит недопустимый символ" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "генерация installation.id" + +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "генерация installation.secret" + +#: internal/arduino/resources/download.go:55 +msgid "getting archive file info: %s" +msgstr "получение информации об архивном файле: %s" + +#: internal/arduino/resources/checksums.go:93 +msgid "getting archive info: %s" +msgstr "получение информации об архиве: %s" + +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 +msgid "getting archive path: %s" +msgstr "получение пути к архиву: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:322 +msgid "getting build properties for board %[1]s: %[2]s" +msgstr "получение свойств сборки для платы %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:106 +msgid "getting discovery dependencies for platform %[1]s: %[2]s" +msgstr "получение зависимостей обнаружения для платформы %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:114 +msgid "getting monitor dependencies for platform %[1]s: %[2]s" +msgstr "получение зависимостей монитора для платформы %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:99 +msgid "getting tool dependencies for platform %[1]s: %[2]s" +msgstr "получение зависимостей инструмента для платформы %[1]s: %[2]s" + +#: internal/arduino/libraries/librariesmanager/install.go:148 +msgid "install directory not set" +msgstr "не задан каталог для установки" + +#: commands/instances.go:60 +msgid "installing %[1]s tool: %[2]s" +msgstr "установка %[1]s инструмента: %[2]s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 +msgid "installing platform %[1]s: %[2]s" +msgstr "установка платформы %[1]s: %[2]s" + +#: internal/cli/feedback/terminal.go:38 +msgid "interactive terminal not supported for the '%s' output format" +msgstr "интерактивный терминал не поддерживается форматом вывода '%s'" + +#: internal/arduino/sketch/profiles.go:248 +msgid "invalid '%s' directive" +msgstr "неверная директива '%s'" + +#: internal/arduino/resources/checksums.go:44 +msgid "invalid checksum format: %s" +msgstr "неверный формат контрольной суммы: %s" + +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 +msgid "invalid config option: %s" +msgstr "неверный параметр конфигурации: %s" + +#: internal/cli/arguments/reference.go:92 +msgid "invalid empty core architecture '%s'" +msgstr "неверная пустая архитектура ядра '%s'" + +#: internal/cli/arguments/reference.go:69 +msgid "invalid empty core argument" +msgstr "неверный пустой аргумент ядра" + +#: internal/cli/arguments/reference.go:89 +msgid "invalid empty core name '%s'" +msgstr "неверное пустое наименование ядра '%s'" + +#: internal/cli/arguments/reference.go:74 +msgid "invalid empty core reference '%s'" +msgstr "неверная пустая ссылка на ядро '%s'" + +#: internal/cli/arguments/reference.go:79 +msgid "invalid empty core version: '%s'" +msgstr "неверная пустая версия ядра: '%s'" + +#: internal/cli/lib/args.go:49 +msgid "invalid empty library name" +msgstr "неверное пустое наименование библиотеки" + +#: internal/cli/lib/args.go:54 +msgid "invalid empty library version: %s" +msgstr "неверная пустая версия библиотеки: %s" + +#: internal/arduino/cores/board.go:144 +msgid "invalid empty option found" +msgstr "найден неверный пустой параметр" + +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 +msgid "invalid git url" +msgstr "неверный git url" + +#: internal/arduino/resources/checksums.go:48 +msgid "invalid hash '%[1]s': %[2]s" +msgstr "неверный хэш '%[1]s': %[2]s" + +#: internal/cli/arguments/reference.go:86 +msgid "invalid item %s" +msgstr "неверный элемент %s" + +#: internal/arduino/sketch/profiles.go:282 +msgid "invalid library directive:" +msgstr "неверный каталог библиотеки:" + +#: internal/arduino/libraries/libraries_layout.go:67 +msgid "invalid library layout: %s" +msgstr "неверная компоновка библиотеки: %s" + +#: internal/arduino/libraries/libraries_location.go:90 +msgid "invalid library location: %s" +msgstr "неверное расположение библиотеки: %s" + +#: internal/arduino/libraries/loader.go:140 +msgid "invalid library: no header files found" +msgstr "недействительная библиотека: заголовочные файлы не найдены" + +#: internal/arduino/cores/board.go:147 +msgid "invalid option '%s'" +msgstr "недопустимый параметр '%s'" + +#: internal/cli/arguments/show_properties.go:52 +msgid "invalid option '%s'." +msgstr "недопустимый параметр '%s'." + +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "неверный путь создания конфигурационного каталога: %[1]s ошибка" + +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "неверный путь записи файла инвентаризации: %[1]s ошибка" + +#: internal/arduino/sketch/profiles.go:252 +msgid "invalid platform identifier" +msgstr "неверный идентификатор платформы" + +#: internal/arduino/sketch/profiles.go:262 +msgid "invalid platform index URL:" +msgstr "Неверный URL индекса платформы:" + +#: internal/arduino/cores/packagemanager/loader.go:326 +msgid "invalid pluggable monitor reference: %s" +msgstr "неверная ссылка на подключаемый монитор: %s" + +#: internal/cli/monitor/monitor.go:176 +msgid "invalid port configuration value for %s: %s" +msgstr "неверное значение в конфигурации порта для %s: %s" + +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" +msgstr "неверная конфигурация порта: %s=%s" + +#: commands/service_upload.go:725 +msgid "invalid recipe '%[1]s': %[2]s" +msgstr "неверный рецепт '%[1]s': %[2]s" + +#: commands/service_sketch_new.go:86 +msgid "" +"invalid sketch name \"%[1]s\": the first character must be alphanumeric or " +"\"_\", the following ones can also contain \"-\" and \".\". The last one " +"cannot be \".\"." +msgstr "" +"недопустимое наименование скетча \"%[1]s\": первый символ должен быть " +"буквенно-цифровым или \"_\", последующие могут также содержать \"-\" и " +"\".\". Последний не может быть \".\"." + +#: internal/arduino/cores/board.go:151 +msgid "invalid value '%[1]s' for option '%[2]s'" +msgstr "недопустимое значение '%[1]s' для параметра '%[2]s'" + +#: internal/arduino/cores/packagemanager/loader.go:231 +msgid "invalid version directory %s" +msgstr "недействительный каталог версий %s" + +#: internal/arduino/sketch/profiles.go:284 +msgid "invalid version:" +msgstr "недействительная версия:" + +#: internal/cli/core/search.go:39 +msgid "keywords" +msgstr "ключевые слова" + +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "библиотеки авторства Даниэля Гарсия" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "библиотеки, созданные только Adafruit и имеющие в названии «gfx»" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "библиотеки зависящие как минимум от \"IRremote\"" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "библиотеки зависящие только от \"IRremote\"" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "библиотеки, в поле Название которых указано «buzzer»" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "библиотеки с наименованием, точно совпадающим с \"pcf8523\"" + +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" +msgstr "библиотека %s уже установлена" + +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "библиотека не найдена" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" +msgstr "загрузка %[1]s: %[2]s" + +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "загрузка плат: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 +msgid "loading json index file %[1]s: %[2]s" +msgstr "загрузка индексного файла json %[1]s: %[2]s" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 +msgid "loading library from %[1]s: %[2]s" +msgstr "загрузка библиотеки из %[1]s: %[2]s" + +#: internal/arduino/libraries/loader.go:55 +msgid "loading library.properties: %s" +msgstr "загрузка library.properties: %s" + +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 +msgid "loading platform release %s" +msgstr "загрузка релиза платформы %s" + +#: internal/arduino/cores/packagemanager/loader.go:195 +msgid "loading platform.txt" +msgstr "загрузка platform.txt" + +#: internal/arduino/cores/packagemanager/profiles.go:47 +msgid "loading required platform %s" +msgstr "загрузка необходимой платформы %s" + +#: internal/arduino/cores/packagemanager/profiles.go:63 +msgid "loading required tool %s" +msgstr "загрузка необходимого инструмента %s" + +#: internal/arduino/cores/packagemanager/loader.go:587 +msgid "loading tool release in %s" +msgstr "загрузка релиза инструмента в %s" + +#: internal/arduino/cores/packagemanager/loader.go:188 +msgid "looking for boards.txt in %s" +msgstr "поиск boards.txt в %s" + +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "поиск артефактов сборки" + +#: internal/arduino/sketch/sketch.go:77 +msgid "main file missing from sketch: %s" +msgstr "в скетче отсутствует основной файл: %s" + +#: internal/arduino/sketch/profiles.go:246 +msgid "missing '%s' directive" +msgstr "отсутствует директива '%s'" + +#: internal/arduino/resources/checksums.go:40 +msgid "missing checksum for: %s" +msgstr "отсутствует контрольная сумма для: %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:430 +msgid "missing package %[1]s referenced by board %[2]s" +msgstr "отсутствует пакет %[1]s, на который ссылается плата %[2]s" + +#: internal/cli/core/upgrade.go:101 +msgid "missing package index for %s, future updates cannot be guaranteed" +msgstr "" +"отсутствует индекс пакета для %s, последующие обновления не могут быть " +"гарантированы" + +#: internal/arduino/cores/packagemanager/package_manager.go:435 +msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" +msgstr "отсутствует релиз платформы %[1]s:%[2]s на которую ссылается %[3]s" + +#: internal/arduino/cores/packagemanager/package_manager.go:440 +msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" +msgstr "отсутствует релиз платформы %[1]s:%[2]s на которую ссылается %[3]s" + +#: internal/arduino/resources/index.go:153 +msgid "missing signature" +msgstr "отсутствует сигнатура" + +#: internal/arduino/cores/packagemanager/package_manager.go:725 +msgid "monitor release not found: %s" +msgstr "релиз монитора не найден: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 +msgid "moving extracted archive to destination dir: %s" +msgstr "перемещение извлеченного архива в каталог назначения: %s" + +#: commands/service_upload.go:859 +msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" +msgstr "найдено несколько артефактов сборки: '%[1]s' и '%[2]s'" + +#: internal/arduino/sketch/sketch.go:69 +msgid "multiple main sketch files found (%[1]v, %[2]v)" +msgstr "найдено несколько основных файлов скетчей (%[1]v, %[2]v)" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 +msgid "" +"no compatible version of %[1]s tools found for the current os, try " +"contacting %[2]s" +msgstr "" +"для текущей ОС не найдена совместимая версия инструмента %[1]s, обратитесь к" +" %[2]s" + +#: commands/service_board_list.go:106 +msgid "no instance specified" +msgstr "не указан экземпляр" + +#: commands/service_upload.go:814 +msgid "no sketch or build directory/file specified" +msgstr "скетч или каталог/файл сборки не указан" + +#: internal/arduino/sketch/sketch.go:56 +msgid "no such file or directory" +msgstr "файл или каталог не найден" + +#: internal/arduino/resources/install.go:135 +msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" +msgstr "" +"нет уникального корневого каталога в архиве, найдены '%[1]s' и '%[2]s'" + +#: commands/service_upload.go:720 +msgid "no upload port provided" +msgstr "порт загрузки не указан" + +#: internal/arduino/sketch/sketch.go:279 +msgid "no valid sketch found in %[1]s: missing %[2]s" +msgstr "не найдено скетчей в %[1]s: отсутствует %[2]s" + +#: internal/arduino/cores/packagemanager/download.go:128 +msgid "no versions available for the current OS, try contacting %s" +msgstr "нет доступных версий для текущей ОС, попробуйте связаться с %s" + +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "не FQBN: %s" + +#: internal/cli/feedback/terminal.go:52 +msgid "not running in a terminal" +msgstr "не работает в терминале" + +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 +msgid "opening archive file: %s" +msgstr "открытие файла архива: %s" + +#: internal/arduino/cores/packagemanager/loader.go:224 +msgid "opening boards.txt" +msgstr "открытие boards.txt" + +#: internal/arduino/security/signatures.go:82 +msgid "opening signature file: %s" +msgstr "открывается файл сигнатуры:" + +#: internal/arduino/security/signatures.go:78 +msgid "opening target file: %s" +msgstr "открывается целевой файл: %s" + +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 +msgid "package %s not found" +msgstr "пакет %s не найден" + +#: internal/arduino/cores/packagemanager/package_manager.go:498 +msgid "package '%s' not found" +msgstr "пакет '%s' не найден" + +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 +msgid "parsing fqbn: %s" +msgstr "разбор fqbn: %s" + +#: internal/arduino/libraries/librariesindex/json.go:70 +msgid "parsing library_index.json: %s" +msgstr "разбор library_index.json: %s" + +#: internal/arduino/cores/packagemanager/loader.go:179 +msgid "path is not a platform directory: %s" +msgstr "путь не является каталогом платформы: %s" + +#: internal/arduino/cores/packagemanager/download.go:80 +msgid "platform %[1]s not found in package %[2]s" +msgstr "платформа %[1]s не найдена в пакете %[2]s" + +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" +msgstr "платформа %s не установлена" + +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "платформа не доступна для вашей ОС" + +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 +msgid "platform not installed" +msgstr "платформа не установлена" + +#: internal/cli/compile/compile.go:142 +msgid "please use --build-property instead." +msgstr "используйте вместо этого --build-property." + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 +msgid "pluggable discovery already added: %s" +msgstr "подключаемое обнаружение уже добавлено: %s" + +#: internal/cli/board/attach.go:35 +msgid "port" +msgstr "порт" + +#: internal/cli/arguments/port.go:125 +msgid "port not found: %[1]s %[2]s" +msgstr "порт не найден: %[1]s %[2]s" + +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "программатор" + +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" +msgstr "версия протокола не поддерживается: требуется %[1]d, получена %[2]d" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 +msgid "reading dir %[1]s: %[2]s" +msgstr "чтение каталога %[1]s: %[2]s" + +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "чтение содержимого каталога %[1]s " + +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 +msgid "reading directory %s" +msgstr "чтение каталога %s" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" +msgstr "чтение содержимого каталога %s " + +#: internal/arduino/builder/sketch.go:83 +msgid "reading file %[1]s: %[2]s" +msgstr "чтение файла %[1]s: %[2]s" + +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "чтение файлов" + +#: internal/arduino/libraries/librariesresolver/cpp.go:90 +msgid "reading lib headers: %s" +msgstr "чтение заголовков библиотек: %s" + +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "чтение заголовков библиотек" + +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "чтение исходного каталога библиотеки: %s" + +#: internal/arduino/libraries/librariesindex/json.go:64 +msgid "reading library_index.json: %s" +msgstr "чтение library_index.json: %s" + +#: internal/arduino/resources/install.go:125 +msgid "reading package root dir: %s" +msgstr "чтение корневого каталога пакета: %s" + +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "чтение файлов скетчей" + +#: commands/service_upload.go:714 +msgid "recipe not found '%s'" +msgstr "не найден рецепт '%s'" + +#: internal/arduino/cores/packagemanager/package_manager.go:574 +msgid "release %[1]s not found for tool %[2]s" +msgstr "релиз %[1]s не найден для инструмента %[2]s" + +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 +msgid "release cannot be nil" +msgstr "релиз не может быть пустым" + +#: internal/arduino/resources/download.go:46 +msgid "removing corrupted archive file: %s" +msgstr "удаление поврежденного файла архива: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:151 +msgid "removing library directory: %s" +msgstr "удаление каталога библиотеки: %s" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 +msgid "removing platform files: %s" +msgstr "удаление файлов платформы: %s" + +#: internal/arduino/cores/packagemanager/download.go:87 +msgid "required version %[1]s not found for platform %[2]s" +msgstr "не найдена необходимая версия %[1]s для платформы %[2]s" + +#: internal/arduino/security/signatures.go:74 +msgid "retrieving Arduino public keys: %s" +msgstr "получение открытых ключей Arduino: %s" + +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "сканирование примеров скетчей" + +#: internal/arduino/resources/install.go:83 +msgid "searching package root dir: %s" +msgstr "поиск корневого каталога пакета: %s" + +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" +msgstr "подпись истекла: правильно ли установлены системные часы?" + +#: commands/service_sketch_new.go:78 +msgid "sketch name cannot be empty" +msgstr "наименование скетча не может быть пустым" + +#: commands/service_sketch_new.go:91 +msgid "sketch name cannot be the reserved name \"%[1]s\"" +msgstr "" +"наименование скетча не может быть зарезервированным наименованием \"%[1]s\"" + +#: commands/service_sketch_new.go:81 +msgid "" +"sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" +msgstr "" +"наименование скетча слишком длинное (%[1]d символов). Максимально допустимая" +" длина %[2]d" + +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 +msgid "sketch path is not valid" +msgstr "недопустимый путь к скетчу" + +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 +msgid "sketchPath" +msgstr "путь скетча" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 +msgid "starting discovery %s" +msgstr "запуск обнаружения %s" + +#: internal/arduino/resources/checksums.go:117 +msgid "testing archive checksum: %s" +msgstr "проверка контрольной суммы архива: %s" + +#: internal/arduino/resources/checksums.go:112 +msgid "testing archive size: %s" +msgstr "проверка размера архива: %s" + +#: internal/arduino/resources/checksums.go:106 +msgid "testing if archive is cached: %s" +msgstr "проверка кэширован ли архив: %s" + +#: internal/arduino/resources/install.go:46 +msgid "testing local archive integrity: %s" +msgstr "проверка целостности локального архива: %s" + +#: internal/arduino/builder/sizer.go:194 +msgid "text section exceeds available space in board" +msgstr "секция текста превышает доступное пространство на плате" + +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 +msgid "the compilation database may be incomplete or inaccurate" +msgstr "база данных компиляции может быть неполной или неточной" + +#: commands/service_board_identify.go:190 +msgid "the server responded with status %s" +msgstr "сервер ответил статусом %s" + +#: internal/arduino/monitor/monitor.go:139 +msgid "timeout waiting for message" +msgstr "тайм-аут ожидания сообщения" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 +msgid "tool %s is not managed by package manager" +msgstr "инструмент %s не контролируется менеджером пакетов" + +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 +msgid "tool %s not found" +msgstr "инструмент %s не найден" + +#: internal/arduino/cores/packagemanager/package_manager.go:524 +msgid "tool '%[1]s' not found in package '%[2]s'" +msgstr "инструмент '%[1]s' не найден в пакете '%[2]s'" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 +msgid "tool not installed" +msgstr "инструмент не установлен" + +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 +msgid "tool release not found: %s" +msgstr "релиз инструмента не найден: %s" + +#: internal/arduino/cores/status.go:105 +msgid "tool version %s not found" +msgstr "версия инструмента %s не найдена" + +#: commands/service_library_install.go:93 +msgid "" +"two different versions of the library %[1]s are required: %[2]s and %[3]s" +msgstr "две различные версии библиотеки %[1]s необходимы: %[2]s и %[3]s" + +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 +msgid "unable to compute relative path to the sketch for the item" +msgstr "невозможно определить относительный путь к скетчу для элемента" + +#: internal/arduino/builder/sketch.go:45 +msgid "unable to create a folder to save the sketch" +msgstr "невозможно создать каталог для сохранения скетча" + +#: internal/arduino/builder/sketch.go:126 +msgid "unable to create the folder containing the item" +msgstr "невозможно создать каталог для хранения элемента" + +#: internal/cli/config/get.go:85 +msgid "unable to marshal config to YAML: %v" +msgstr "невозможно преобразовать конфигурацию в YAML: %v" + +#: internal/arduino/builder/sketch.go:164 +msgid "unable to read contents of the destination item" +msgstr "невозможно прочитать содержимое целевого элемента" + +#: internal/arduino/builder/sketch.go:137 +msgid "unable to read contents of the source item" +msgstr "невозможно прочитать содержимое исходного элемента" + +#: internal/arduino/builder/sketch.go:147 +msgid "unable to write to destination file" +msgstr "невозможно записать в целевой файл" + +#: internal/arduino/cores/packagemanager/package_manager.go:297 +msgid "unknown package %s" +msgstr "неизвестный пакет %s" + +#: internal/arduino/cores/packagemanager/package_manager.go:304 +msgid "unknown platform %s:%s" +msgstr "неизвестная платформа %s: %s" + +#: internal/arduino/sketch/sketch.go:137 +msgid "unknown sketch file extension '%s'" +msgstr "неизвестное расширение файла скетча '%s'" + +#: internal/arduino/resources/checksums.go:61 +msgid "unsupported hash algorithm: %s" +msgstr "неподдерживаемый алгоритм хэширования: %s" + +#: internal/cli/core/upgrade.go:44 +msgid "upgrade arduino:samd to the latest version" +msgstr "обновить arduino:samd до последней версии" + +#: internal/cli/core/upgrade.go:42 +msgid "upgrade everything to the latest version" +msgstr "обновить все до последней версии" + +#: commands/service_upload.go:760 +msgid "uploading error: %s" +msgstr "ошибка при загрузке: %s" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 +msgid "user directory not set" +msgstr "пользовательский каталог не задан" + +#: internal/cli/feedback/terminal.go:94 +msgid "user input not supported for the '%s' output format" +msgstr "пользовательский ввод не поддерживается для формата вывода '%s'" + +#: internal/cli/feedback/terminal.go:97 +msgid "user input not supported in non interactive mode" +msgstr "пользовательский ввод не поддерживается в неинтерактивном режиме" + +#: internal/arduino/cores/packagemanager/profiles.go:175 +msgid "version %s not available for this operating system" +msgstr "версия %s недоступна для данной операционной системы" + +#: internal/arduino/cores/packagemanager/profiles.go:154 +msgid "version %s not found" +msgstr "версия %s не найдена" + +#: commands/service_board_identify.go:208 +msgid "wrong format in server response" +msgstr "неверный формат в ответе сервера" diff --git a/internal/locales/data/si.po b/internal/locales/data/si.po new file mode 100644 index 00000000000..34a59496557 --- /dev/null +++ b/internal/locales/data/si.po @@ -0,0 +1,3668 @@ +# +# Translators: +# HelaBasa Group <transifex-helabasa-group@yalu.lk>, 2024 +# +msgid "" +msgstr "" +"Last-Translator: HelaBasa Group <transifex-helabasa-group@yalu.lk>, 2024\n" +"Language-Team: Sinhala (https://app.transifex.com/arduino-1/teams/108174/si/)\n" +"Language: si\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: internal/version/version.go:56 +msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:462 +msgid "%[1]s folder is no longer supported! See %[2]s for more information" +msgstr "" + +#: internal/arduino/builder/build_options_manager.go:140 +msgid "%[1]s invalid, rebuilding all" +msgstr "" + +#: internal/cli/lib/check_deps.go:125 +msgid "%[1]s is required but %[2]s is currently installed." +msgstr "" + +#: internal/arduino/builder/builder.go:487 +msgid "%[1]s pattern is missing" +msgstr "" + +#: internal/arduino/resources/download.go:51 +msgid "%s already downloaded" +msgstr "" + +#: commands/service_upload.go:782 +msgid "%s and %s cannot be used together" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 +msgid "%s installed" +msgstr "%s ස්ථාපිතයි" + +#: internal/cli/lib/check_deps.go:122 +msgid "%s is already installed." +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 +msgid "%s is not a directory" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 +msgid "%s is not managed by package manager" +msgstr "" + +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "" + +#: internal/cli/lib/check_deps.go:119 +msgid "%s must be installed." +msgstr "" + +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 +msgid "%s pattern is missing" +msgstr "" + +#: commands/cmderrors/cmderrors.go:818 +msgid "'%s' has an invalid signature" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:416 +msgid "" +"'build.core' and 'build.variant' refer to different platforms: %[1]s and " +"%[2]s" +msgstr "" + +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 +msgid "(hidden)" +msgstr "(සැඟවුණු)" + +#: internal/arduino/builder/libraries.go:303 +msgid "(legacy)" +msgstr "(පරණ)" + +#: internal/cli/lib/install.go:82 +msgid "" +"--git-url and --zip-path are disabled by default, for more information see: " +"%v" +msgstr "" + +#: internal/cli/lib/install.go:84 +msgid "" +"--git-url and --zip-path flags allow installing untrusted files, use it at " +"your own risk." +msgstr "" + +#: internal/cli/lib/install.go:87 +msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" +msgstr "" + +#: commands/service_sketch_new.go:66 +msgid ".ino file already exists" +msgstr "" + +#: internal/cli/updater/updater.go:30 +msgid "A new release of Arduino CLI is available:" +msgstr "" + +#: commands/cmderrors/cmderrors.go:299 +msgid "A programmer is required to upload" +msgstr "" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "ARCH" +msgstr "ARCH" + +#: internal/cli/generatedocs/generatedocs.go:80 +msgid "ARDUINO COMMAND LINE MANUAL" +msgstr "" + +#: internal/cli/usage.go:28 +msgid "Additional help topics:" +msgstr "" + +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 +msgid "Adds one or more values to a setting." +msgstr "" + +#: internal/cli/usage.go:23 +msgid "Aliases:" +msgstr "" + +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "" + +#: internal/cli/core/upgrade.go:87 +msgid "All the cores are already at the latest version" +msgstr "" + +#: commands/service_library_install.go:136 +msgid "Already installed %s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:91 +msgid "Alternatives for %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 +msgid "An error occurred adding prototypes" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:213 +msgid "An error occurred detecting libraries" +msgstr "" + +#: internal/cli/daemon/daemon.go:87 +msgid "Append debug logging to the specified file" +msgstr "" + +#: internal/cli/lib/search.go:208 +msgid "Architecture: %s" +msgstr "" + +#: commands/service_sketch_archive.go:69 +msgid "Archive already exists" +msgstr "" + +#: internal/arduino/builder/core.go:164 +msgid "Archiving built core (caching) in: %[1]s" +msgstr "" + +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 +msgid "Arduino CLI sketch commands." +msgstr "" + +#: internal/cli/cli.go:88 +msgid "Arduino CLI." +msgstr "" + +#: internal/cli/cli.go:89 +msgid "Arduino Command Line Interface (arduino-cli)." +msgstr "" + +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 +msgid "Arduino board commands." +msgstr "" + +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 +msgid "Arduino cache commands." +msgstr "" + +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 +msgid "Arduino commands about libraries." +msgstr "" + +#: internal/cli/config/config.go:35 +msgid "Arduino configuration commands." +msgstr "" + +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 +msgid "Arduino core operations." +msgstr "" + +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 +msgid "Arguments error: %v" +msgstr "" + +#: internal/cli/board/attach.go:36 +msgid "Attaches a sketch to a board." +msgstr "" + +#: internal/cli/lib/search.go:199 +msgid "Author: %s" +msgstr "කර්තෘ: %s" + +#: internal/arduino/libraries/librariesmanager/install.go:78 +msgid "" +"Automatic library install can't be performed in this case, please manually " +"remove all duplicates and retry." +msgstr "" + +#: commands/service_library_uninstall.go:87 +msgid "" +"Automatic library uninstall can't be performed in this case, please manually" +" remove them." +msgstr "" + +#: internal/cli/lib/list.go:138 +msgid "Available" +msgstr "" + +#: internal/cli/usage.go:25 +msgid "Available Commands:" +msgstr "" + +#: internal/cli/upload/upload.go:75 +msgid "Binary file to upload." +msgstr "" + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "Board Name" +msgstr "" + +#: internal/cli/board/details.go:139 +msgid "Board name:" +msgstr "" + +#: internal/cli/board/details.go:141 +msgid "Board version:" +msgstr "" + +#: internal/arduino/builder/sketch.go:245 +msgid "Bootloader file specified but missing: %[1]s" +msgstr "" + +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." +msgstr "" + +#: internal/arduino/resources/index.go:65 +msgid "Can't create data directory %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:511 +msgid "Can't create sketch" +msgstr "" + +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 +msgid "Can't download library" +msgstr "" + +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 +msgid "Can't find dependencies for platform %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:537 +msgid "Can't open sketch" +msgstr "" + +#: commands/cmderrors/cmderrors.go:524 +msgid "Can't update sketch" +msgstr "" + +#: internal/cli/arguments/arguments.go:38 +msgid "Can't use the following flags together: %s" +msgstr "" + +#: internal/cli/daemon/daemon.go:117 +msgid "Can't write debug log: %s" +msgstr "" + +#: commands/service_compile.go:190 commands/service_compile.go:193 +msgid "Cannot create build cache directory" +msgstr "" + +#: commands/service_compile.go:215 +msgid "Cannot create build directory" +msgstr "" + +#: internal/cli/config/init.go:100 +msgid "Cannot create config file directory: %v" +msgstr "" + +#: internal/cli/config/init.go:124 +msgid "Cannot create config file: %v" +msgstr "" + +#: commands/cmderrors/cmderrors.go:781 +msgid "Cannot create temp dir" +msgstr "" + +#: commands/cmderrors/cmderrors.go:799 +msgid "Cannot create temp file" +msgstr "" + +#: internal/cli/config/delete.go:55 +msgid "Cannot delete the key %[1]s: %[2]v" +msgstr "" + +#: commands/service_debug.go:228 +msgid "Cannot execute debug tool" +msgstr "" + +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 +msgid "Cannot find absolute path: %v" +msgstr "" + +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 +msgid "Cannot install platform" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 +msgid "Cannot install tool %s" +msgstr "" + +#: commands/service_upload.go:544 +msgid "Cannot perform port reset: %s" +msgstr "" + +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 +msgid "Cannot upgrade platform" +msgstr "" + +#: internal/cli/lib/search.go:207 +msgid "Category: %s" +msgstr "" + +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 +msgid "Check dependencies status for the specified library." +msgstr "" + +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "" + +#: internal/arduino/resources/checksums.go:166 +msgid "Checksum differs from checksum in package.json" +msgstr "" + +#: internal/cli/board/details.go:190 +msgid "Checksum:" +msgstr "" + +#: internal/cli/cache/cache.go:32 +msgid "Clean caches." +msgstr "" + +#: internal/cli/cli.go:181 +msgid "Comma-separated list of additional URLs for the Boards Manager." +msgstr "" + +#: internal/cli/board/list.go:56 +msgid "" +"Command keeps running and prints list of connected boards whenever there is " +"a change." +msgstr "" + +#: commands/service_debug_config.go:178 commands/service_upload.go:452 +msgid "Compiled sketch not found in %s" +msgstr "" + +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 +msgid "Compiles Arduino sketches." +msgstr "" + +#: internal/arduino/builder/builder.go:421 +msgid "Compiling core..." +msgstr "" + +#: internal/arduino/builder/builder.go:400 +msgid "Compiling libraries..." +msgstr "" + +#: internal/arduino/builder/libraries.go:134 +msgid "Compiling library \"%[1]s\"" +msgstr "" + +#: internal/arduino/builder/builder.go:384 +msgid "Compiling sketch..." +msgstr "" + +#: internal/cli/config/init.go:94 +msgid "" +"Config file already exists, use --overwrite to discard the existing one." +msgstr "" + +#: internal/cli/config/init.go:179 +msgid "Config file written to: %s" +msgstr "" + +#: internal/cli/debug/debug.go:250 +msgid "Configuration options for %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:78 +msgid "" +"Configure communication port settings. The format is " +"<ID>=<value>[,<ID>=<value>]..." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 +msgid "Configuring platform." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 +msgid "Configuring tool." +msgstr "" + +#: internal/cli/board/list.go:198 +msgid "Connected" +msgstr "" + +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "" + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Core" +msgstr "" + +#: internal/cli/configuration/network.go:127 +msgid "Could not connect via HTTP" +msgstr "" + +#: commands/instances.go:487 +msgid "Could not create index directory" +msgstr "" + +#: internal/arduino/builder/core.go:42 +msgid "Couldn't deeply cache core build: %[1]s" +msgstr "" + +#: internal/arduino/builder/sizer.go:155 +msgid "Couldn't determine program size" +msgstr "" + +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 +msgid "Couldn't get current working directory: %v" +msgstr "" + +#: internal/cli/sketch/new.go:37 internal/cli/sketch/new.go:38 +msgid "Create a new Sketch" +msgstr "" + +#: internal/cli/compile/compile.go:101 +msgid "Create and print a profile configuration from the build." +msgstr "" + +#: internal/cli/sketch/archive.go:37 internal/cli/sketch/archive.go:38 +msgid "Creates a zip file containing all sketch files." +msgstr "" + +#: internal/cli/config/init.go:46 +msgid "" +"Creates or updates the configuration file in the data directory or custom " +"directory with the current configuration settings." +msgstr "" + +#: internal/cli/compile/compile.go:340 +msgid "" +"Currently, Build Profiles only support libraries available through Arduino " +"Library Manager." +msgstr "" + +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" +msgstr "" + +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 +msgid "DEPRECATED" +msgstr "" + +#: internal/cli/daemon/daemon.go:195 +msgid "Daemon is now listening on %s:%s" +msgstr "" + +#: internal/cli/debug/debug.go:53 +msgid "Debug Arduino sketches." +msgstr "" + +#: internal/cli/debug/debug.go:54 +msgid "" +"Debug Arduino sketches. (this command opens an interactive gdb session)" +msgstr "" + +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 +msgid "Debug interpreter e.g.: %s" +msgstr "" + +#: commands/service_debug_config.go:215 +msgid "Debugging not supported for board %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:331 +msgid "Default" +msgstr "" + +#: internal/cli/board/attach.go:115 +msgid "Default FQBN set to" +msgstr "" + +#: internal/cli/board/attach.go:114 +msgid "Default port set to" +msgstr "" + +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "" + +#: internal/cli/cache/clean.go:32 +msgid "Delete Boards/Library Manager download cache." +msgstr "" + +#: internal/cli/cache/clean.go:33 +msgid "" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "" + +#: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 +msgid "Deletes a settings key and all its sub keys." +msgstr "" + +#: internal/cli/lib/search.go:215 +msgid "Dependencies: %s" +msgstr "" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 +msgid "Description" +msgstr "" + +#: internal/arduino/builder/builder.go:314 +msgid "Detecting libraries used..." +msgstr "" + +#: internal/cli/board/list.go:46 +msgid "" +"Detects and displays a list of boards connected to the current computer." +msgstr "" + +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 +msgid "Directory containing binaries for debug." +msgstr "" + +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 +msgid "Directory containing binaries to upload." +msgstr "" + +#: internal/cli/generatedocs/generatedocs.go:45 +msgid "" +"Directory where to save generated files. Default is './docs', the directory " +"must exist." +msgstr "" + +#: internal/cli/completion/completion.go:44 +msgid "Disable completion description for shells that support it" +msgstr "" + +#: internal/cli/board/list.go:199 +msgid "Disconnected" +msgstr "" + +#: internal/cli/daemon/daemon.go:90 +msgid "Display only the provided gRPC calls" +msgstr "" + +#: internal/cli/lib/install.go:62 +msgid "Do not install dependencies." +msgstr "" + +#: internal/cli/lib/install.go:63 +msgid "Do not overwrite already installed libraries." +msgstr "" + +#: internal/cli/core/install.go:56 +msgid "Do not overwrite already installed platforms." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 +msgid "Do not perform the actual upload, just log out actions" +msgstr "" + +#: internal/cli/daemon/daemon.go:81 +msgid "Do not terminate daemon process if the parent process dies" +msgstr "" + +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "" + +#: commands/service_library_download.go:92 +msgid "Downloading %s" +msgstr "" + +#: internal/arduino/resources/index.go:137 +msgid "Downloading index signature: %s" +msgstr "" + +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 +msgid "Downloading index: %s" +msgstr "" + +#: commands/instances.go:372 +msgid "Downloading library %s" +msgstr "" + +#: commands/instances.go:54 +msgid "Downloading missing tool %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 +msgid "Downloading packages" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:101 +msgid "Downloading platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:177 +msgid "Downloading tool %s" +msgstr "" + +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 +msgid "Downloads one or more cores and corresponding tool dependencies." +msgstr "" + +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 +msgid "Downloads one or more libraries without installing them." +msgstr "" + +#: internal/cli/daemon/daemon.go:84 +msgid "Enable debug logging of gRPC calls" +msgstr "" + +#: internal/cli/lib/install.go:65 +msgid "Enter a path to zip file" +msgstr "" + +#: internal/cli/lib/install.go:64 +msgid "Enter git url for libraries hosted on repositories" +msgstr "" + +#: commands/service_sketch_archive.go:105 +msgid "Error adding file to sketch archive" +msgstr "" + +#: internal/arduino/builder/core.go:170 +msgid "Error archiving built core (caching) in %[1]s: %[2]s" +msgstr "" + +#: internal/cli/sketch/archive.go:85 +msgid "Error archiving: %v" +msgstr "" + +#: commands/service_sketch_archive.go:93 +msgid "Error calculating relative file path" +msgstr "" + +#: internal/cli/cache/clean.go:48 +msgid "Error cleaning caches: %v" +msgstr "" + +#: internal/cli/compile/compile.go:225 +msgid "Error converting path to absolute: %v" +msgstr "" + +#: commands/service_compile.go:420 +msgid "Error copying output file %s" +msgstr "" + +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + +#: internal/cli/instance/instance.go:43 +msgid "Error creating instance: %v" +msgstr "" + +#: commands/service_compile.go:403 +msgid "Error creating output dir" +msgstr "" + +#: commands/service_sketch_archive.go:81 +msgid "Error creating sketch archive" +msgstr "" + +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 +msgid "Error creating sketch: %v" +msgstr "" + +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 +msgid "Error detecting boards: %v" +msgstr "" + +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 +msgid "Error downloading %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 +msgid "Error downloading %s" +msgstr "" + +#: commands/instances.go:661 internal/arduino/resources/index.go:83 +msgid "Error downloading index '%s'" +msgstr "" + +#: internal/arduino/resources/index.go:138 +msgid "Error downloading index signature '%s'" +msgstr "" + +#: commands/instances.go:382 commands/instances.go:388 +msgid "Error downloading library %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 +msgid "Error downloading platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 +msgid "Error downloading tool %s" +msgstr "" + +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 +msgid "Error during Debug: %v" +msgstr "" + +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 +msgid "Error during JSON encoding of the output: %v" +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 +msgid "Error during Upload: %v" +msgstr "" + +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" +msgstr "" + +#: internal/cli/compile/compile.go:394 +msgid "Error during build: %v" +msgstr "" + +#: internal/cli/core/install.go:81 +msgid "Error during install: %v" +msgstr "" + +#: internal/cli/core/uninstall.go:75 +msgid "Error during uninstall: %v" +msgstr "" + +#: internal/cli/core/upgrade.go:136 +msgid "Error during upgrade: %v" +msgstr "" + +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 +msgid "Error extracting %s" +msgstr "" + +#: commands/service_upload.go:449 +msgid "Error finding build artifacts" +msgstr "" + +#: internal/cli/debug/debug.go:139 +msgid "Error getting Debug info: %v" +msgstr "" + +#: commands/service_sketch_archive.go:57 +msgid "Error getting absolute path of sketch archive" +msgstr "" + +#: internal/cli/board/details.go:74 +msgid "Error getting board details: %v" +msgstr "" + +#: internal/arduino/builder/internal/compilation/database.go:82 +msgid "Error getting current directory for compilation database: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 +msgid "Error getting information for library %s" +msgstr "" + +#: internal/cli/lib/examples.go:75 +msgid "Error getting libraries info: %v" +msgstr "" + +#: internal/cli/arguments/fqbn.go:96 +msgid "Error getting port metadata: %v" +msgstr "" + +#: internal/cli/monitor/monitor.go:154 +msgid "Error getting port settings details: %s" +msgstr "" + +#: internal/cli/upload/upload.go:169 +msgid "Error getting user input" +msgstr "" + +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 +msgid "Error initializing instance: %v" +msgstr "" + +#: internal/cli/lib/install.go:148 +msgid "Error installing %s: %v" +msgstr "" + +#: internal/cli/lib/install.go:122 +msgid "Error installing Git Library: %v" +msgstr "" + +#: internal/cli/lib/install.go:100 +msgid "Error installing Zip Library: %v" +msgstr "" + +#: commands/instances.go:398 +msgid "Error installing library %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 +msgid "Error installing platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 +msgid "Error installing tool %s" +msgstr "" + +#: internal/cli/board/listall.go:66 +msgid "Error listing boards: %v" +msgstr "" + +#: internal/cli/lib/list.go:91 +msgid "Error listing libraries: %v" +msgstr "" + +#: internal/cli/core/list.go:69 +msgid "Error listing platforms: %v" +msgstr "" + +#: commands/cmderrors/cmderrors.go:424 +msgid "Error loading hardware platform" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 +msgid "Error loading index %s" +msgstr "" + +#: internal/arduino/resources/index.go:99 +msgid "Error opening %s" +msgstr "" + +#: internal/cli/daemon/daemon.go:111 +msgid "Error opening debug logging file: %s" +msgstr "" + +#: internal/cli/compile/compile.go:196 +msgid "Error opening source code overrides data file: %v" +msgstr "" + +#: internal/cli/compile/compile.go:209 +msgid "Error parsing --show-properties flag: %v" +msgstr "" + +#: commands/service_compile.go:412 +msgid "Error reading build directory" +msgstr "" + +#: commands/service_sketch_archive.go:75 +msgid "Error reading sketch files" +msgstr "" + +#: internal/cli/lib/check_deps.go:72 +msgid "Error resolving dependencies for %[1]s: %[2]s" +msgstr "" + +#: internal/cli/core/upgrade.go:68 +msgid "Error retrieving core list: %v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 +msgid "Error rolling-back changes: %s" +msgstr "" + +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 +msgid "Error saving downloaded index" +msgstr "" + +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 +msgid "Error saving downloaded index signature" +msgstr "" + +#: internal/cli/board/search.go:63 +msgid "Error searching boards: %v" +msgstr "" + +#: internal/cli/lib/search.go:126 +msgid "Error searching for Libraries: %v" +msgstr "" + +#: internal/cli/core/search.go:82 +msgid "Error searching for platforms: %v" +msgstr "" + +#: internal/arduino/builder/internal/compilation/database.go:67 +msgid "Error serializing compilation database: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 +msgid "Error starting discovery: %v" +msgstr "" + +#: internal/cli/lib/uninstall.go:67 +msgid "Error uninstalling %[1]s: %[2]v" +msgstr "" + +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 +msgid "Error updating library index: %v" +msgstr "" + +#: internal/cli/lib/upgrade.go:75 +msgid "Error upgrading libraries" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 +msgid "Error upgrading platform: %s" +msgstr "" + +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 +msgid "Error verifying signature" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:369 +msgid "Error while detecting libraries included by %[1]s" +msgstr "" + +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 +msgid "Error while determining sketch size: %s" +msgstr "" + +#: internal/arduino/builder/internal/compilation/database.go:70 +msgid "Error writing compilation database: %s" +msgstr "" + +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + +#: internal/cli/completion/completion.go:56 +msgid "Error: command description is not supported by %v" +msgstr "" + +#: internal/cli/compile/compile.go:202 +msgid "Error: invalid source code overrides data file: %v" +msgstr "" + +#: internal/cli/board/list.go:104 +msgid "Event" +msgstr "" + +#: internal/cli/lib/examples.go:123 +msgid "Examples for library %s" +msgstr "" + +#: internal/cli/usage.go:24 +msgid "Examples:" +msgstr "" + +#: internal/cli/debug/debug.go:233 +msgid "Executable to debug" +msgstr "" + +#: commands/service_debug_config.go:181 commands/service_upload.go:455 +msgid "Expected compiled sketch in directory %s, but is a file instead" +msgstr "" + +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 +msgid "FQBN" +msgstr "" + +#: internal/cli/board/details.go:140 +msgid "FQBN:" +msgstr "" + +#: commands/service_upload.go:578 +msgid "Failed chip erase" +msgstr "" + +#: commands/service_upload.go:585 +msgid "Failed programming" +msgstr "" + +#: commands/service_upload.go:581 +msgid "Failed to burn bootloader" +msgstr "" + +#: commands/instances.go:88 +msgid "Failed to create data directory" +msgstr "" + +#: commands/instances.go:77 +msgid "Failed to create downloads directory" +msgstr "" + +#: internal/cli/daemon/daemon.go:150 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." +msgstr "" + +#: internal/cli/daemon/daemon.go:145 +msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." +msgstr "" + +#: internal/cli/daemon/daemon.go:157 +msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" +msgstr "" + +#: internal/cli/daemon/daemon.go:155 +msgid "Failed to listen on TCP port: %s. Address already in use." +msgstr "" + +#: commands/service_upload.go:589 +msgid "Failed uploading" +msgstr "" + +#: internal/cli/board/details.go:188 +msgid "File:" +msgstr "" + +#: commands/service_compile.go:163 +msgid "" +"Firmware encryption/signing requires all the following properties to be " +"defined: %s" +msgstr "" + +#: commands/service_debug.go:187 +msgid "First message must contain debug request, not data" +msgstr "" + +#: internal/cli/arguments/arguments.go:49 +msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" +msgstr "" + +#: internal/cli/usage.go:26 +msgid "Flags:" +msgstr "" + +#: internal/cli/arguments/pre_post_script.go:38 +msgid "" +"Force run of post-install scripts (if the CLI is not running interactively)." +msgstr "" + +#: internal/cli/arguments/pre_post_script.go:40 +msgid "" +"Force run of pre-uninstall scripts (if the CLI is not running " +"interactively)." +msgstr "" + +#: internal/cli/arguments/pre_post_script.go:39 +msgid "" +"Force skip of post-install scripts (if the CLI is running interactively)." +msgstr "" + +#: internal/cli/arguments/pre_post_script.go:41 +msgid "" +"Force skip of pre-uninstall scripts (if the CLI is running interactively)." +msgstr "" + +#: commands/cmderrors/cmderrors.go:839 +msgid "Found %d platforms matching \"%s\": %s" +msgstr "" + +#: internal/cli/arguments/fqbn.go:39 +msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" +msgstr "" + +#: commands/service_debug.go:321 +msgid "GDB server '%s' is not supported" +msgstr "" + +#: internal/cli/generatedocs/generatedocs.go:38 +#: internal/cli/generatedocs/generatedocs.go:39 +msgid "Generates bash completion and command manpages." +msgstr "" + +#: internal/cli/completion/completion.go:38 +msgid "Generates completion scripts" +msgstr "" + +#: internal/cli/completion/completion.go:39 +msgid "Generates completion scripts for various shells" +msgstr "" + +#: internal/arduino/builder/builder.go:334 +msgid "Generating function prototypes..." +msgstr "" + +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "" + +#: internal/cli/usage.go:27 +msgid "Global Flags:" +msgstr "" + +#: internal/arduino/builder/sizer.go:166 +msgid "" +"Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " +"bytes for local variables. Maximum is %[2]s bytes." +msgstr "" + +#: internal/arduino/builder/sizer.go:172 +msgid "Global variables use %[1]s bytes of dynamic memory." +msgstr "" + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 +msgid "ID" +msgstr "" + +#: internal/cli/board/details.go:111 +msgid "Id" +msgstr "" + +#: internal/cli/board/details.go:154 +msgid "Identification properties:" +msgstr "" + +#: internal/cli/compile/compile.go:135 +msgid "If set built binaries will be exported to the sketch folder." +msgstr "" + +#: internal/cli/core/list.go:46 +msgid "" +"If set return all installable and installed cores, including manually " +"installed." +msgstr "" + +#: internal/cli/lib/list.go:55 +msgid "Include built-in libraries (from platforms and IDE) in listing." +msgstr "" + +#: internal/cli/sketch/archive.go:51 +msgid "Includes %s directory in the archive." +msgstr "" + +#: internal/cli/lib/install.go:66 +msgid "Install libraries in the IDE-Builtin directory" +msgstr "" + +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 +msgid "Installed" +msgstr "" + +#: commands/service_library_install.go:201 +msgid "Installed %s" +msgstr "" + +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 +msgid "Installing %s" +msgstr "" + +#: commands/instances.go:396 +msgid "Installing library %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 +msgid "Installing platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:185 +msgid "Installing tool %s" +msgstr "" + +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 +msgid "Installs one or more cores and corresponding tool dependencies." +msgstr "" + +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 +msgid "Installs one or more specified libraries into the system." +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:394 +msgid "Internal error in cache" +msgstr "" + +#: commands/cmderrors/cmderrors.go:377 +msgid "Invalid '%[1]s' property: %[2]s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:60 +msgid "Invalid FQBN" +msgstr "" + +#: internal/cli/daemon/daemon.go:168 +msgid "Invalid TCP address: port is missing" +msgstr "" + +#: commands/cmderrors/cmderrors.go:78 +msgid "Invalid URL" +msgstr "" + +#: commands/instances.go:184 +msgid "Invalid additional URL: %v" +msgstr "" + +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "" + +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 +msgid "Invalid argument passed: %v" +msgstr "" + +#: commands/service_compile.go:282 +msgid "Invalid build properties" +msgstr "" + +#: internal/arduino/builder/sizer.go:253 +msgid "Invalid data size regexp: %s" +msgstr "" + +#: internal/arduino/builder/sizer.go:259 +msgid "Invalid eeprom size regexp: %s" +msgstr "" + +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:46 +msgid "Invalid instance" +msgstr "" + +#: internal/cli/core/upgrade.go:114 +msgid "Invalid item %s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:96 +msgid "Invalid library" +msgstr "" + +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "" + +#: internal/cli/configuration/network.go:83 +msgid "Invalid network.proxy '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/cli.go:222 +msgid "Invalid output format: %s" +msgstr "" + +#: commands/instances.go:581 +msgid "Invalid package index in %s" +msgstr "" + +#: internal/cli/core/uninstall.go:63 +msgid "Invalid parameter %s: version not allowed" +msgstr "" + +#: commands/service_board_identify.go:169 +msgid "Invalid pid value: '%s'" +msgstr "" + +#: commands/cmderrors/cmderrors.go:220 +msgid "Invalid profile" +msgstr "" + +#: commands/service_monitor.go:270 +msgid "Invalid recipe in platform.txt" +msgstr "" + +#: internal/arduino/builder/sizer.go:243 +msgid "Invalid size regexp: %s" +msgstr "" + +#: main.go:86 +msgid "Invalid value in configuration" +msgstr "" + +#: commands/cmderrors/cmderrors.go:114 +msgid "Invalid version" +msgstr "" + +#: commands/service_board_identify.go:166 +msgid "Invalid vid value: '%s'" +msgstr "" + +#: internal/cli/compile/compile.go:132 +msgid "" +"Just produce the compilation database, without actually compiling. All build" +" commands are skipped except pre* hooks." +msgstr "" + +#: internal/cli/lib/list.go:39 +msgid "LIBNAME" +msgstr "" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "LIBRARY" +msgstr "" + +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 +msgid "LIBRARY_NAME" +msgstr "" + +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 +msgid "Latest" +msgstr "" + +#: internal/arduino/builder/libraries.go:92 +msgid "Library %[1]s has been declared precompiled:" +msgstr "" + +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 +msgid "" +"Library %[1]s is already installed, but with a different version: %[2]s" +msgstr "" + +#: commands/service_library_upgrade.go:137 +msgid "Library %s is already at the latest version" +msgstr "" + +#: commands/service_library_uninstall.go:63 +msgid "Library %s is not installed" +msgstr "" + +#: commands/instances.go:375 +msgid "Library %s not found" +msgstr "" + +#: commands/cmderrors/cmderrors.go:445 +msgid "Library '%s' not found" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:471 +msgid "" +"Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." +msgstr "" + +#: commands/cmderrors/cmderrors.go:574 +msgid "Library install failed" +msgstr "" + +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 +msgid "Library installed" +msgstr "" + +#: internal/cli/lib/search.go:205 +msgid "License: %s" +msgstr "" + +#: internal/arduino/builder/builder.go:437 +msgid "Linking everything together..." +msgstr "" + +#: internal/cli/board/listall.go:40 +msgid "" +"List all boards that have the support platform installed. You can search\n" +"for a specific board if you specify the board name" +msgstr "" + +#: internal/cli/board/listall.go:39 +msgid "List all known boards and their corresponding FQBN." +msgstr "" + +#: internal/cli/board/list.go:45 +msgid "List connected boards." +msgstr "" + +#: internal/cli/arguments/fqbn.go:44 +msgid "" +"List of board options separated by commas. Or can be used multiple times for" +" multiple options." +msgstr "" + +#: internal/cli/compile/compile.go:110 +msgid "" +"List of custom build properties separated by commas. Or can be used multiple" +" times for multiple properties." +msgstr "" + +#: internal/cli/lib/list.go:57 +msgid "List updatable libraries." +msgstr "" + +#: internal/cli/core/list.go:45 +msgid "List updatable platforms." +msgstr "" + +#: internal/cli/board/board.go:32 +msgid "Lists all connected boards." +msgstr "" + +#: internal/cli/outdated/outdated.go:41 +msgid "Lists cores and libraries that can be upgraded" +msgstr "" + +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 +msgid "Loading index file: %v" +msgstr "" + +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 +msgid "Location" +msgstr "" + +#: internal/arduino/builder/sizer.go:208 +msgid "Low memory available, stability problems may occur." +msgstr "" + +#: internal/cli/lib/search.go:200 +msgid "Maintainer: %s" +msgstr "" + +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "" + +#: internal/cli/arguments/discovery_timeout.go:32 +msgid "Max time to wait for port discovery, e.g.: 30s, 1m" +msgstr "" + +#: internal/cli/cli.go:170 +msgid "" +"Messages with this level and above will be logged. Valid levels are: %s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:466 +msgid "Missing '%[1]s' from library in %[2]s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:169 +msgid "Missing FQBN (Fully Qualified Board Name)" +msgstr "" + +#: commands/cmderrors/cmderrors.go:260 +msgid "Missing port" +msgstr "" + +#: commands/cmderrors/cmderrors.go:236 +msgid "Missing port address" +msgstr "" + +#: commands/cmderrors/cmderrors.go:248 +msgid "Missing port protocol" +msgstr "" + +#: commands/cmderrors/cmderrors.go:286 +msgid "Missing programmer" +msgstr "" + +#: internal/cli/upload/upload.go:162 +msgid "Missing required upload field: %s" +msgstr "" + +#: internal/arduino/builder/sizer.go:247 +msgid "Missing size regexp" +msgstr "" + +#: commands/cmderrors/cmderrors.go:497 +msgid "Missing sketch path" +msgstr "" + +#: commands/cmderrors/cmderrors.go:358 +msgid "Monitor '%s' not found" +msgstr "" + +#: internal/cli/monitor/monitor.go:261 +msgid "Monitor port settings:" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:156 +msgid "Multiple libraries were found for \"%[1]s\"" +msgstr "" + +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 +msgid "Name" +msgstr "" + +#: internal/cli/lib/search.go:179 +msgid "Name: \"%s\"" +msgstr "" + +#: internal/cli/upload/upload.go:238 +msgid "New upload port: %[1]s (%[2]s)" +msgstr "" + +#: internal/cli/board/list.go:132 +msgid "No boards found." +msgstr "" + +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "" + +#: internal/cli/lib/examples.go:108 +msgid "No libraries found." +msgstr "" + +#: internal/cli/lib/list.go:130 +msgid "No libraries installed." +msgstr "" + +#: internal/cli/lib/search.go:168 +msgid "No libraries matching your search." +msgstr "" + +#: internal/cli/lib/search.go:174 +msgid "" +"No libraries matching your search.\n" +"Did you mean...\n" +msgstr "" + +#: internal/cli/lib/list.go:128 +msgid "No libraries update is available." +msgstr "" + +#: commands/cmderrors/cmderrors.go:274 +msgid "No monitor available for the port protocol %s" +msgstr "" + +#: internal/cli/outdated/outdated.go:95 +msgid "No outdated platforms or libraries found." +msgstr "" + +#: internal/cli/core/list.go:114 +msgid "No platforms installed." +msgstr "" + +#: internal/cli/core/search.go:113 +msgid "No platforms matching your search." +msgstr "" + +#: commands/service_upload.go:534 +msgid "No upload port found, using %s as fallback" +msgstr "" + +#: commands/cmderrors/cmderrors.go:464 +msgid "No valid dependencies solution found" +msgstr "" + +#: internal/arduino/builder/sizer.go:198 +msgid "Not enough memory; see %[1]s for tips on reducing your footprint." +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:159 +msgid "Not used: %[1]s" +msgstr "" + +#: internal/cli/board/details.go:187 +msgid "OS:" +msgstr "" + +#: internal/cli/board/details.go:145 +msgid "Official Arduino board:" +msgstr "" + +#: internal/cli/lib/search.go:98 +msgid "" +"Omit library details far all versions except the latest (produce a more " +"compact JSON output)." +msgstr "" + +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 +msgid "Open a communication port with a board." +msgstr "" + +#: internal/cli/board/details.go:200 +msgid "Option:" +msgstr "" + +#: internal/cli/compile/compile.go:120 +msgid "" +"Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." +msgstr "" + +#: internal/cli/compile/compile.go:133 +msgid "Optional, cleanup the build folder and do not use any cached build." +msgstr "" + +#: internal/cli/compile/compile.go:130 +msgid "" +"Optional, optimize compile output for debugging, rather than for release." +msgstr "" + +#: internal/cli/compile/compile.go:122 +msgid "Optional, suppresses almost every output." +msgstr "" + +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 +msgid "Optional, turns on verbose mode." +msgstr "" + +#: internal/cli/compile/compile.go:136 +msgid "" +"Optional. Path to a .json file that contains a set of replacements of the " +"sketch source code." +msgstr "" + +#: internal/cli/compile/compile.go:112 +msgid "" +"Override a build property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 +msgid "Overwrite existing config file." +msgstr "" + +#: internal/cli/sketch/archive.go:52 +msgid "Overwrites an already existing archive" +msgstr "" + +#: internal/cli/sketch/new.go:46 +msgid "Overwrites an existing .ino sketch." +msgstr "" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 +msgid "PACKAGER" +msgstr "" + +#: internal/cli/board/details.go:165 +msgid "Package URL:" +msgstr "" + +#: internal/cli/board/details.go:164 +msgid "Package maintainer:" +msgstr "" + +#: internal/cli/board/details.go:163 +msgid "Package name:" +msgstr "" + +#: internal/cli/board/details.go:167 +msgid "Package online help:" +msgstr "" + +#: internal/cli/board/details.go:166 +msgid "Package website:" +msgstr "" + +#: internal/cli/lib/search.go:202 +msgid "Paragraph: %s" +msgstr "" + +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 +msgid "Path" +msgstr "" + +#: internal/cli/compile/compile.go:129 +msgid "" +"Path to a collection of libraries. Can be used multiple times or entries can" +" be comma separated." +msgstr "" + +#: internal/cli/compile/compile.go:127 +msgid "" +"Path to a single library’s root folder. Can be used multiple times or " +"entries can be comma separated." +msgstr "" + +#: internal/cli/cli.go:172 +msgid "Path to the file where logs will be written." +msgstr "" + +#: internal/cli/compile/compile.go:108 +msgid "" +"Path where to save compiled files. If omitted, a directory will be created " +"in the default temporary path of your OS." +msgstr "" + +#: commands/service_upload.go:515 +msgid "Performing 1200-bps touch reset on serial port %s" +msgstr "" + +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 +msgid "Platform %s already installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 +msgid "Platform %s installed" +msgstr "" + +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 +msgid "" +"Platform %s is not found in any known index\n" +"Maybe you need to add a 3rd party URL?" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 +msgid "Platform %s uninstalled" +msgstr "" + +#: commands/cmderrors/cmderrors.go:482 +msgid "Platform '%s' is already at the latest version" +msgstr "" + +#: commands/cmderrors/cmderrors.go:406 +msgid "Platform '%s' not found" +msgstr "" + +#: internal/cli/board/search.go:85 +msgid "Platform ID" +msgstr "" + +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 +msgid "Platform ID is not correct" +msgstr "" + +#: internal/cli/board/details.go:173 +msgid "Platform URL:" +msgstr "" + +#: internal/cli/board/details.go:172 +msgid "Platform architecture:" +msgstr "" + +#: internal/cli/board/details.go:171 +msgid "Platform category:" +msgstr "" + +#: internal/cli/board/details.go:178 +msgid "Platform checksum:" +msgstr "" + +#: internal/cli/board/details.go:174 +msgid "Platform file name:" +msgstr "" + +#: internal/cli/board/details.go:170 +msgid "Platform name:" +msgstr "" + +#: internal/cli/board/details.go:176 +msgid "Platform size (bytes):" +msgstr "" + +#: commands/cmderrors/cmderrors.go:153 +msgid "" +"Please specify an FQBN. Multiple possible boards detected on port %[1]s with" +" protocol %[2]s" +msgstr "" + +#: commands/cmderrors/cmderrors.go:133 +msgid "" +"Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" +" identified" +msgstr "" + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Port" +msgstr "" + +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 +msgid "Port closed: %v" +msgstr "" + +#: commands/cmderrors/cmderrors.go:668 +msgid "Port monitor error" +msgstr "" + +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 +msgid "Precompiled library in \"%[1]s\" not found" +msgstr "" + +#: internal/cli/board/details.go:42 +msgid "Print details about a board." +msgstr "" + +#: internal/cli/compile/compile.go:103 +msgid "Print preprocessed code to stdout instead of compiling." +msgstr "" + +#: internal/cli/cli.go:166 internal/cli/cli.go:168 +msgid "Print the logs on the standard output." +msgstr "" + +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + +#: internal/cli/config/dump.go:31 +msgid "Prints the current configuration" +msgstr "" + +#: internal/cli/config/dump.go:32 +msgid "Prints the current configuration." +msgstr "" + +#: commands/cmderrors/cmderrors.go:202 +msgid "Profile '%s' not found" +msgstr "" + +#: commands/cmderrors/cmderrors.go:339 +msgid "Programmer '%s' not found" +msgstr "" + +#: internal/cli/board/details.go:111 +msgid "Programmer name" +msgstr "" + +#: internal/cli/arguments/programmer.go:35 +msgid "Programmer to use, e.g: atmel_ice" +msgstr "" + +#: internal/cli/board/details.go:216 +msgid "Programmers:" +msgstr "" + +#: commands/cmderrors/cmderrors.go:391 +msgid "Property '%s' is undefined" +msgstr "" + +#: internal/cli/board/list.go:142 +msgid "Protocol" +msgstr "" + +#: internal/cli/lib/search.go:212 +msgid "Provides includes: %s" +msgstr "" + +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 +msgid "Removes one or more values from a setting." +msgstr "" + +#: commands/service_library_install.go:188 +msgid "Replacing %[1]s with %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 +msgid "Replacing platform %[1]s with %[2]s" +msgstr "" + +#: internal/cli/board/details.go:184 +msgid "Required tool:" +msgstr "" + +#: internal/cli/monitor/monitor.go:79 +msgid "Run in silent mode, show only monitor input and output." +msgstr "" + +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "" + +#: internal/arduino/builder/core.go:43 +msgid "Running normal build of the core..." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 +msgid "Running pre_uninstall script." +msgstr "" + +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "" + +#: internal/cli/debug/debug.go:238 +msgid "SVD file path" +msgstr "" + +#: internal/cli/compile/compile.go:106 +msgid "Save build artifacts in this directory." +msgstr "" + +#: internal/cli/board/search.go:39 +msgid "Search for a board in the Boards Manager using the specified keywords." +msgstr "" + +#: internal/cli/board/search.go:38 +msgid "Search for a board in the Boards Manager." +msgstr "" + +#: internal/cli/core/search.go:41 +msgid "Search for a core in Boards Manager using the specified keywords." +msgstr "" + +#: internal/cli/core/search.go:40 +msgid "Search for a core in Boards Manager." +msgstr "" + +#: internal/cli/lib/search.go:41 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "" + +#: internal/cli/lib/search.go:201 +msgid "Sentence: %s" +msgstr "" + +#: internal/cli/debug/debug.go:246 +msgid "Server path" +msgstr "" + +#: internal/arduino/httpclient/httpclient.go:61 +msgid "Server responded with: %s" +msgstr "" + +#: internal/cli/debug/debug.go:245 +msgid "Server type" +msgstr "" + +#: internal/cli/upload/upload.go:83 +msgid "Set a value for a field required to upload." +msgstr "" + +#: internal/cli/monitor/monitor.go:76 +msgid "Set terminal in raw mode (unbuffered)." +msgstr "" + +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 +msgid "Sets a setting value." +msgstr "" + +#: internal/cli/cli.go:189 +msgid "" +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." +msgstr "" + +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 +msgid "Sets where to save the configuration file." +msgstr "" + +#: internal/cli/monitor/monitor.go:331 +msgid "Setting" +msgstr "" + +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" + +#: internal/cli/core/search.go:48 +msgid "Show all available core versions." +msgstr "" + +#: internal/cli/monitor/monitor.go:77 +msgid "Show all the settings of the communication port." +msgstr "" + +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 +msgid "Show also boards marked as 'hidden' in the platform" +msgstr "" + +#: internal/cli/arguments/show_properties.go:60 +msgid "" +"Show build properties. The properties are expanded, use \"--show-" +"properties=unexpanded\" if you want them exactly as they are defined." +msgstr "" + +#: internal/cli/board/details.go:52 +msgid "Show full board details" +msgstr "" + +#: internal/cli/board/details.go:43 +msgid "" +"Show information about a board, in particular if the board has options to be" +" specified in the FQBN." +msgstr "" + +#: internal/cli/lib/search.go:97 +msgid "Show library names only." +msgstr "" + +#: internal/cli/board/details.go:53 +msgid "Show list of available programmers" +msgstr "" + +#: internal/cli/debug/debug.go:73 +msgid "" +"Show metadata about the debug session instead of starting the debugger." +msgstr "" + +#: internal/cli/update/update.go:45 +msgid "Show outdated cores and libraries after index update" +msgstr "" + +#: internal/cli/lib/list.go:40 +msgid "Shows a list of installed libraries." +msgstr "" + +#: internal/cli/lib/list.go:41 +msgid "" +"Shows a list of installed libraries.\n" +"\n" +"If the LIBNAME parameter is specified the listing is limited to that specific\n" +"library. By default the libraries provided as built-in by platforms/core are\n" +"not listed, they can be listed by adding the --all flag." +msgstr "" + +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 +msgid "Shows the list of installed platforms." +msgstr "" + +#: internal/cli/lib/examples.go:44 +msgid "Shows the list of the examples for libraries." +msgstr "" + +#: internal/cli/lib/examples.go:45 +msgid "" +"Shows the list of the examples for libraries. A name may be given as " +"argument to search a specific library." +msgstr "" + +#: internal/cli/version/version.go:37 +msgid "" +"Shows the version number of Arduino CLI which is installed on your system." +msgstr "" + +#: internal/cli/version/version.go:36 +msgid "Shows version number of Arduino CLI." +msgstr "" + +#: internal/cli/board/details.go:189 +msgid "Size (bytes):" +msgstr "" + +#: commands/service_compile.go:286 +msgid "" +"Sketch cannot be located in build path. Please specify a different build " +"path" +msgstr "" + +#: internal/cli/sketch/new.go:98 +msgid "Sketch created in: %s" +msgstr "" + +#: internal/cli/arguments/profiles.go:33 +msgid "Sketch profile to use" +msgstr "" + +#: internal/arduino/builder/sizer.go:193 +msgid "Sketch too big; see %[1]s for tips on reducing it." +msgstr "" + +#: internal/arduino/builder/sizer.go:160 +msgid "" +"Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" +" bytes." +msgstr "" + +#: internal/cli/feedback/warn_deprecated.go:39 +msgid "" +"Sketches with .pde extension are deprecated, please rename the following " +"files to .ino:" +msgstr "" + +#: internal/arduino/builder/linker.go:31 +msgid "Skip linking of final executable." +msgstr "" + +#: commands/service_upload.go:508 +msgid "Skipping 1200-bps touch reset: no serial port selected!" +msgstr "" + +#: internal/arduino/builder/archive_compiled_files.go:28 +msgid "Skipping archive creation of: %[1]s" +msgstr "" + +#: internal/arduino/builder/compilation.go:184 +msgid "Skipping compile of: %[1]s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:414 +msgid "Skipping dependencies detection for precompiled library %[1]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 +msgid "Skipping platform configuration." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 +msgid "Skipping pre_uninstall script." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 +msgid "Skipping tool configuration." +msgstr "" + +#: internal/arduino/builder/recipe.go:48 +msgid "Skipping: %[1]s" +msgstr "" + +#: commands/instances.go:634 +msgid "Some indexes could not be updated." +msgstr "" + +#: internal/cli/core/upgrade.go:141 +msgid "Some upgrades failed, please check the output for details." +msgstr "" + +#: internal/cli/daemon/daemon.go:78 +msgid "The TCP port the daemon will listen to" +msgstr "" + +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" + +#: internal/cli/cli.go:187 +msgid "The custom config file (if not specified the default will be used)." +msgstr "" + +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 +msgid "The flag --debug-file must be used with --debug." +msgstr "" + +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "" + +#: internal/cli/config/add.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't add to it.\n" +"Maybe use '%[2]s'?" +msgstr "" + +#: internal/cli/config/remove.go:57 +msgid "" +"The key '%[1]v' is not a list of items, can't remove from it.\n" +"Maybe use '%[2]s'?" +msgstr "" + +#: commands/cmderrors/cmderrors.go:858 +msgid "The library %s has multiple installations:" +msgstr "" + +#: internal/cli/compile/compile.go:118 +msgid "" +"The name of the custom encryption key to use to encrypt a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" + +#: internal/cli/compile/compile.go:116 +msgid "" +"The name of the custom signing key to use to sign a binary during the " +"compile process. Used only by the platforms that support it." +msgstr "" + +#: internal/cli/cli.go:174 +msgid "The output format for the logs, can be: %s" +msgstr "" + +#: internal/cli/compile/compile.go:114 +msgid "" +"The path of the dir to search for the custom keys to sign and encrypt a " +"binary. Used only by the platforms that support it." +msgstr "" + +#: internal/arduino/builder/libraries.go:152 +msgid "The platform does not support '%[1]s' for precompiled libraries." +msgstr "" + +#: internal/cli/lib/upgrade.go:36 +msgid "" +"This command upgrades an installed library to the latest available version. " +"Multiple libraries can be passed separated by a space. If no arguments are " +"provided, the command will upgrade all the installed libraries where an " +"update is available." +msgstr "" + +#: internal/cli/outdated/outdated.go:42 +msgid "" +"This commands shows a list of installed cores and/or libraries\n" +"that can be upgraded. If nothing needs to be updated the output is empty." +msgstr "" + +#: internal/cli/monitor/monitor.go:80 +msgid "Timestamp each incoming line." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 +msgid "Tool %s already installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 +msgid "Tool %s uninstalled" +msgstr "" + +#: commands/service_debug.go:277 +msgid "Toolchain '%s' is not supported" +msgstr "" + +#: internal/cli/debug/debug.go:235 +msgid "Toolchain path" +msgstr "" + +#: internal/cli/debug/debug.go:236 +msgid "Toolchain prefix" +msgstr "" + +#: internal/cli/debug/debug.go:234 +msgid "Toolchain type" +msgstr "" + +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 +msgid "Try running %s" +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:63 +msgid "Turns on verbose mode." +msgstr "" + +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +msgid "Type" +msgstr "" + +#: internal/cli/lib/search.go:209 +msgid "Types: %s" +msgstr "" + +#: internal/cli/board/details.go:191 +msgid "URL:" +msgstr "" + +#: internal/arduino/builder/core.go:166 +msgid "" +"Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" +msgstr "" + +#: internal/cli/configuration/configuration.go:95 +msgid "Unable to get Documents Folder: %v" +msgstr "" + +#: internal/cli/configuration/configuration.go:70 +msgid "Unable to get Local App Data Folder: %v" +msgstr "" + +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 +msgid "Unable to get user home dir: %v" +msgstr "" + +#: internal/cli/cli.go:252 +msgid "Unable to open file for logging: %s" +msgstr "" + +#: commands/instances.go:563 +msgid "Unable to parse URL" +msgstr "" + +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 +msgid "Uninstalling %s" +msgstr "" + +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 +msgid "Uninstalling %s, tool is no more required" +msgstr "" + +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 +msgid "" +"Uninstalls one or more cores and corresponding tool dependencies if no " +"longer used." +msgstr "" + +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 +msgid "Uninstalls one or more libraries." +msgstr "" + +#: internal/cli/board/list.go:174 +msgid "Unknown" +msgstr "" + +#: commands/cmderrors/cmderrors.go:183 +msgid "Unknown FQBN" +msgstr "" + +#: internal/cli/update/update.go:37 +msgid "Updates the index of cores and libraries" +msgstr "" + +#: internal/cli/update/update.go:38 +msgid "Updates the index of cores and libraries to the latest versions." +msgstr "" + +#: internal/cli/core/update_index.go:36 +msgid "Updates the index of cores to the latest version." +msgstr "" + +#: internal/cli/core/update_index.go:35 +msgid "Updates the index of cores." +msgstr "" + +#: internal/cli/lib/update_index.go:36 +msgid "Updates the libraries index to the latest version." +msgstr "" + +#: internal/cli/lib/update_index.go:35 +msgid "Updates the libraries index." +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 +msgid "Upgrade doesn't accept parameters with version" +msgstr "" + +#: internal/cli/upgrade/upgrade.go:38 +msgid "Upgrades installed cores and libraries to latest version." +msgstr "" + +#: internal/cli/upgrade/upgrade.go:37 +msgid "Upgrades installed cores and libraries." +msgstr "" + +#: internal/cli/lib/upgrade.go:35 +msgid "Upgrades installed libraries." +msgstr "" + +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 +msgid "Upgrades one or all installed platforms to the latest version." +msgstr "" + +#: internal/cli/upload/upload.go:56 +msgid "Upload Arduino sketches." +msgstr "" + +#: internal/cli/upload/upload.go:57 +msgid "" +"Upload Arduino sketches. This does NOT compile the sketch prior to upload." +msgstr "" + +#: internal/cli/arguments/port.go:44 +msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" +msgstr "" + +#: commands/service_upload.go:532 +msgid "Upload port found on %s" +msgstr "" + +#: internal/cli/arguments/port.go:48 +msgid "Upload port protocol, e.g: serial" +msgstr "" + +#: internal/cli/compile/compile.go:123 +msgid "Upload the binary after the compilation." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:49 +msgid "Upload the bootloader on the board using an external programmer." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:48 +msgid "Upload the bootloader." +msgstr "" + +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 +msgid "" +"Uploading to specified board using %s protocol requires the following info:" +msgstr "" + +#: internal/cli/config/init.go:160 +msgid "" +"Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" +"%s" +msgstr "" + +#: internal/cli/usage.go:22 +msgid "Usage:" +msgstr "" + +#: internal/cli/usage.go:29 +msgid "Use %s for more information about a command." +msgstr "" + +#: internal/cli/compile/compile.go:471 +msgid "Used library" +msgstr "" + +#: internal/cli/compile/compile.go:486 +msgid "Used platform" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:157 +msgid "Used: %[1]s" +msgstr "" + +#: commands/service_compile.go:361 +msgid "Using board '%[1]s' from platform in folder: %[2]s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:351 +msgid "Using cached library dependencies for file: %[1]s" +msgstr "" + +#: commands/service_compile.go:362 +msgid "Using core '%[1]s' from platform in folder: %[2]s" +msgstr "" + +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 +msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" +msgstr "" + +#: internal/arduino/builder/libraries.go:307 +msgid "Using library %[1]s in folder: %[2]s %[3]s" +msgstr "" + +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 +msgid "Using precompiled core: %[1]s" +msgstr "" + +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 +msgid "Using precompiled library in %[1]s" +msgstr "" + +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 +msgid "Using previously compiled file: %[1]s" +msgstr "" + +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +msgid "VERSION" +msgstr "" + +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 +msgid "VERSION_NUMBER" +msgstr "" + +#: internal/cli/monitor/monitor.go:331 +msgid "Values" +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 +msgid "Verify uploaded binary after the upload." +msgstr "" + +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 +msgid "Version" +msgstr "" + +#: internal/cli/lib/search.go:210 +msgid "Versions: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 +msgid "WARNING cannot configure platform: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 +msgid "WARNING cannot configure tool: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 +msgid "WARNING cannot run pre_uninstall script: %s" +msgstr "" + +#: internal/cli/compile/compile.go:339 +msgid "WARNING: The sketch is compiled using one or more custom libraries." +msgstr "" + +#: internal/arduino/builder/libraries.go:284 +msgid "" +"WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " +"incompatible with your current board which runs on %[3]s architecture(s)." +msgstr "" + +#: commands/service_upload.go:521 +msgid "Waiting for upload port..." +msgstr "" + +#: commands/service_compile.go:367 +msgid "" +"Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" +msgstr "" + +#: internal/cli/lib/search.go:203 +msgid "Website: %s" +msgstr "" + +#: internal/cli/config/init.go:45 +msgid "Writes current configuration to a configuration file." +msgstr "" + +#: internal/cli/config/init.go:48 +msgid "" +"Writes current configuration to the configuration file in the data " +"directory." +msgstr "" + +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 +msgid "You cannot use the %s flag while compiling with a profile." +msgstr "" + +#: internal/arduino/resources/checksums.go:79 +msgid "archive hash differs from hash in index" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:187 +msgid "archive is not valid: multiple files found in zip file top level" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:190 +msgid "archive is not valid: no files found in zip file top level" +msgstr "" + +#: internal/cli/sketch/archive.go:36 +msgid "archivePath" +msgstr "" + +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 +msgid "arduino-preprocessor pattern is missing" +msgstr "" + +#: internal/cli/feedback/stdio.go:37 +msgid "available only in text format" +msgstr "" + +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "" + +#: commands/service_upload.go:792 +msgid "binary file not found in %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:316 +msgid "board %s not found" +msgstr "" + +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 +msgid "boardname" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 +msgid "built-in libraries directory not set" +msgstr "" + +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 +msgid "can't find latest release of %s" +msgstr "" + +#: commands/instances.go:273 +msgid "can't find latest release of tool %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:709 +msgid "can't find pattern for discovery with id %s" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:93 +msgid "candidates" +msgstr "" + +#: commands/service_upload.go:738 commands/service_upload.go:745 +msgid "cannot execute upload tool: %s" +msgstr "" + +#: internal/arduino/resources/install.go:48 +msgid "checking local archive integrity" +msgstr "" + +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 +msgid "cleaning build path" +msgstr "" + +#: internal/cli/cli.go:90 +msgid "command" +msgstr "" + +#: internal/arduino/monitor/monitor.go:149 +msgid "command '%[1]s' failed: %[2]s" +msgstr "" + +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 +msgid "communication out of sync, expected '%[1]s', received '%[2]s'" +msgstr "" + +#: internal/arduino/resources/checksums.go:75 +msgid "computing hash: %s" +msgstr "" + +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:140 +msgid "copying library to destination directory:" +msgstr "" + +#: commands/service_upload.go:864 +msgid "could not find a valid build artifact" +msgstr "" + +#: commands/service_platform_install.go:95 +msgid "could not overwrite" +msgstr "" + +#: commands/service_library_install.go:191 +msgid "could not remove old library" +msgstr "" + +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 +msgid "could not update sketch project file" +msgstr "" + +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 +msgid "creating core cache folder: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 +msgid "creating installed.json in %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 +msgid "creating temp dir for extraction: %s" +msgstr "" + +#: internal/arduino/builder/sizer.go:199 +msgid "data section exceeds available space in board" +msgstr "" + +#: commands/service_library_resolve_deps.go:86 +msgid "dependency '%s' is not available" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:93 +msgid "destination dir %s already exists, cannot install" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:137 +msgid "destination directory already exists" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:305 +msgid "directory doesn't exist: %s" +msgstr "" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:641 +msgid "discovery %s not found" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:645 +msgid "discovery %s not installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:714 +msgid "discovery release not found: %s" +msgstr "" + +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 +msgid "download a specific version (in this case 1.6.9)." +msgstr "" + +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 +msgid "download the latest version of Arduino SAMD core." +msgstr "" + +#: internal/cli/feedback/rpc_progress.go:74 +msgid "downloaded" +msgstr "" + +#: commands/instances.go:56 +msgid "downloading %[1]s tool: %[2]s" +msgstr "" + +#: pkg/fqbn/fqbn.go:63 +msgid "empty board identifier" +msgstr "" + +#: internal/arduino/sketch/sketch.go:93 +msgid "error loading sketch project file:" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:612 +msgid "error opening %s" +msgstr "" + +#: internal/arduino/sketch/profiles.go:250 +msgid "error parsing version constraints" +msgstr "" + +#: commands/service_board_identify.go:203 +msgid "error processing response from server" +msgstr "" + +#: commands/service_board_identify.go:183 +msgid "error querying Arduino Cloud Api" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" +msgstr "" + +#: internal/arduino/resources/install.go:77 +msgid "extracting archive: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:143 +msgid "failed to compute hash of file \"%s\"" +msgstr "" + +#: commands/service_board_identify.go:178 +msgid "failed to initialize http client" +msgstr "" + +#: internal/arduino/resources/checksums.go:98 +msgid "fetched archive size differs from size specified in index" +msgstr "" + +#: internal/arduino/resources/install.go:132 +msgid "files in archive must be placed in a subdirectory" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:59 +msgid "finding absolute path of %s" +msgstr "" + +#: internal/cli/cli.go:90 +msgid "flags" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:98 +msgid "following symlink %s" +msgstr "" + +#: internal/cli/lib/download.go:40 +msgid "for a specific version." +msgstr "" + +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 +msgid "for the latest version." +msgstr "" + +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 +msgid "for the specific version." +msgstr "" + +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "" + +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "" + +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" + +#: internal/arduino/resources/download.go:55 +msgid "getting archive file info: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:93 +msgid "getting archive info: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 +msgid "getting archive path: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:322 +msgid "getting build properties for board %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:106 +msgid "getting discovery dependencies for platform %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:114 +msgid "getting monitor dependencies for platform %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:99 +msgid "getting tool dependencies for platform %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:148 +msgid "install directory not set" +msgstr "" + +#: commands/instances.go:60 +msgid "installing %[1]s tool: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 +msgid "installing platform %[1]s: %[2]s" +msgstr "" + +#: internal/cli/feedback/terminal.go:38 +msgid "interactive terminal not supported for the '%s' output format" +msgstr "" + +#: internal/arduino/sketch/profiles.go:248 +msgid "invalid '%s' directive" +msgstr "" + +#: internal/arduino/resources/checksums.go:44 +msgid "invalid checksum format: %s" +msgstr "" + +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 +msgid "invalid config option: %s" +msgstr "" + +#: internal/cli/arguments/reference.go:92 +msgid "invalid empty core architecture '%s'" +msgstr "" + +#: internal/cli/arguments/reference.go:69 +msgid "invalid empty core argument" +msgstr "" + +#: internal/cli/arguments/reference.go:89 +msgid "invalid empty core name '%s'" +msgstr "" + +#: internal/cli/arguments/reference.go:74 +msgid "invalid empty core reference '%s'" +msgstr "" + +#: internal/cli/arguments/reference.go:79 +msgid "invalid empty core version: '%s'" +msgstr "" + +#: internal/cli/lib/args.go:49 +msgid "invalid empty library name" +msgstr "" + +#: internal/cli/lib/args.go:54 +msgid "invalid empty library version: %s" +msgstr "" + +#: internal/arduino/cores/board.go:144 +msgid "invalid empty option found" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 +msgid "invalid git url" +msgstr "" + +#: internal/arduino/resources/checksums.go:48 +msgid "invalid hash '%[1]s': %[2]s" +msgstr "" + +#: internal/cli/arguments/reference.go:86 +msgid "invalid item %s" +msgstr "" + +#: internal/arduino/sketch/profiles.go:282 +msgid "invalid library directive:" +msgstr "" + +#: internal/arduino/libraries/libraries_layout.go:67 +msgid "invalid library layout: %s" +msgstr "" + +#: internal/arduino/libraries/libraries_location.go:90 +msgid "invalid library location: %s" +msgstr "" + +#: internal/arduino/libraries/loader.go:140 +msgid "invalid library: no header files found" +msgstr "" + +#: internal/arduino/cores/board.go:147 +msgid "invalid option '%s'" +msgstr "" + +#: internal/cli/arguments/show_properties.go:52 +msgid "invalid option '%s'." +msgstr "" + +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "" + +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "" + +#: internal/arduino/sketch/profiles.go:252 +msgid "invalid platform identifier" +msgstr "" + +#: internal/arduino/sketch/profiles.go:262 +msgid "invalid platform index URL:" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:326 +msgid "invalid pluggable monitor reference: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:176 +msgid "invalid port configuration value for %s: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" +msgstr "" + +#: commands/service_upload.go:725 +msgid "invalid recipe '%[1]s': %[2]s" +msgstr "" + +#: commands/service_sketch_new.go:86 +msgid "" +"invalid sketch name \"%[1]s\": the first character must be alphanumeric or " +"\"_\", the following ones can also contain \"-\" and \".\". The last one " +"cannot be \".\"." +msgstr "" + +#: internal/arduino/cores/board.go:151 +msgid "invalid value '%[1]s' for option '%[2]s'" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:231 +msgid "invalid version directory %s" +msgstr "" + +#: internal/arduino/sketch/profiles.go:284 +msgid "invalid version:" +msgstr "" + +#: internal/cli/core/search.go:39 +msgid "keywords" +msgstr "" + +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:125 +msgid "library %s already installed" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:342 +msgid "library not valid" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 +msgid "loading %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:314 +msgid "loading boards: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 +msgid "loading json index file %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 +msgid "loading library from %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/libraries/loader.go:55 +msgid "loading library.properties: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 +msgid "loading platform release %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:195 +msgid "loading platform.txt" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:47 +msgid "loading required platform %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:63 +msgid "loading required tool %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:587 +msgid "loading tool release in %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:188 +msgid "looking for boards.txt in %s" +msgstr "" + +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "" + +#: internal/arduino/sketch/sketch.go:77 +msgid "main file missing from sketch: %s" +msgstr "" + +#: internal/arduino/sketch/profiles.go:246 +msgid "missing '%s' directive" +msgstr "" + +#: internal/arduino/resources/checksums.go:40 +msgid "missing checksum for: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:430 +msgid "missing package %[1]s referenced by board %[2]s" +msgstr "" + +#: internal/cli/core/upgrade.go:101 +msgid "missing package index for %s, future updates cannot be guaranteed" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:435 +msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:440 +msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" +msgstr "" + +#: internal/arduino/resources/index.go:153 +msgid "missing signature" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:725 +msgid "monitor release not found: %s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 +msgid "moving extracted archive to destination dir: %s" +msgstr "" + +#: commands/service_upload.go:859 +msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" +msgstr "" + +#: internal/arduino/sketch/sketch.go:69 +msgid "multiple main sketch files found (%[1]v, %[2]v)" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 +msgid "" +"no compatible version of %[1]s tools found for the current os, try " +"contacting %[2]s" +msgstr "" + +#: commands/service_board_list.go:106 +msgid "no instance specified" +msgstr "" + +#: commands/service_upload.go:814 +msgid "no sketch or build directory/file specified" +msgstr "" + +#: internal/arduino/sketch/sketch.go:56 +msgid "no such file or directory" +msgstr "" + +#: internal/arduino/resources/install.go:135 +msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" +msgstr "" + +#: commands/service_upload.go:720 +msgid "no upload port provided" +msgstr "" + +#: internal/arduino/sketch/sketch.go:279 +msgid "no valid sketch found in %[1]s: missing %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:128 +msgid "no versions available for the current OS, try contacting %s" +msgstr "" + +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 +msgid "not running in a terminal" +msgstr "" + +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 +msgid "opening archive file: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:224 +msgid "opening boards.txt" +msgstr "" + +#: internal/arduino/security/signatures.go:82 +msgid "opening signature file: %s" +msgstr "" + +#: internal/arduino/security/signatures.go:78 +msgid "opening target file: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 +msgid "package %s not found" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:498 +msgid "package '%s' not found" +msgstr "" + +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 +msgid "parsing fqbn: %s" +msgstr "" + +#: internal/arduino/libraries/librariesindex/json.go:70 +msgid "parsing library_index.json: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:179 +msgid "path is not a platform directory: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:80 +msgid "platform %[1]s not found in package %[2]s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:309 +msgid "platform %s is not installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "" + +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 +msgid "platform not installed" +msgstr "" + +#: internal/cli/compile/compile.go:142 +msgid "please use --build-property instead." +msgstr "" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 +msgid "pluggable discovery already added: %s" +msgstr "" + +#: internal/cli/board/attach.go:35 +msgid "port" +msgstr "" + +#: internal/cli/arguments/port.go:125 +msgid "port not found: %[1]s %[2]s" +msgstr "" + +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "" + +#: internal/arduino/monitor/monitor.go:235 +msgid "protocol version not supported: requested %[1]d, got %[2]d" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 +msgid "reading dir %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "" + +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 +msgid "reading directory %s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" +msgstr "" + +#: internal/arduino/builder/sketch.go:83 +msgid "reading file %[1]s: %[2]s" +msgstr "" + +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "" + +#: internal/arduino/libraries/librariesresolver/cpp.go:90 +msgid "reading lib headers: %s" +msgstr "" + +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "" + +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "" + +#: internal/arduino/libraries/librariesindex/json.go:64 +msgid "reading library_index.json: %s" +msgstr "" + +#: internal/arduino/resources/install.go:125 +msgid "reading package root dir: %s" +msgstr "" + +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "" + +#: commands/service_upload.go:714 +msgid "recipe not found '%s'" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:574 +msgid "release %[1]s not found for tool %[2]s" +msgstr "" + +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 +msgid "release cannot be nil" +msgstr "" + +#: internal/arduino/resources/download.go:46 +msgid "removing corrupted archive file: %s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/install.go:151 +msgid "removing library directory: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 +msgid "removing platform files: %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/download.go:87 +msgid "required version %[1]s not found for platform %[2]s" +msgstr "" + +#: internal/arduino/security/signatures.go:74 +msgid "retrieving Arduino public keys: %s" +msgstr "" + +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "" + +#: internal/arduino/resources/install.go:83 +msgid "searching package root dir: %s" +msgstr "" + +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" +msgstr "" + +#: commands/service_sketch_new.go:78 +msgid "sketch name cannot be empty" +msgstr "" + +#: commands/service_sketch_new.go:91 +msgid "sketch name cannot be the reserved name \"%[1]s\"" +msgstr "" + +#: commands/service_sketch_new.go:81 +msgid "" +"sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" +msgstr "" + +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 +msgid "sketch path is not valid" +msgstr "" + +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 +msgid "sketchPath" +msgstr "" + +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 +msgid "starting discovery %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:117 +msgid "testing archive checksum: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:112 +msgid "testing archive size: %s" +msgstr "" + +#: internal/arduino/resources/checksums.go:106 +msgid "testing if archive is cached: %s" +msgstr "" + +#: internal/arduino/resources/install.go:46 +msgid "testing local archive integrity: %s" +msgstr "" + +#: internal/arduino/builder/sizer.go:194 +msgid "text section exceeds available space in board" +msgstr "" + +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 +msgid "the compilation database may be incomplete or inaccurate" +msgstr "" + +#: commands/service_board_identify.go:190 +msgid "the server responded with status %s" +msgstr "" + +#: internal/arduino/monitor/monitor.go:139 +msgid "timeout waiting for message" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 +msgid "tool %s is not managed by package manager" +msgstr "" + +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 +msgid "tool %s not found" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:524 +msgid "tool '%[1]s' not found in package '%[2]s'" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 +msgid "tool not installed" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 +msgid "tool release not found: %s" +msgstr "" + +#: internal/arduino/cores/status.go:105 +msgid "tool version %s not found" +msgstr "" + +#: commands/service_library_install.go:93 +msgid "" +"two different versions of the library %[1]s are required: %[2]s and %[3]s" +msgstr "" + +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 +msgid "unable to compute relative path to the sketch for the item" +msgstr "" + +#: internal/arduino/builder/sketch.go:45 +msgid "unable to create a folder to save the sketch" +msgstr "" + +#: internal/arduino/builder/sketch.go:126 +msgid "unable to create the folder containing the item" +msgstr "" + +#: internal/cli/config/get.go:85 +msgid "unable to marshal config to YAML: %v" +msgstr "" + +#: internal/arduino/builder/sketch.go:164 +msgid "unable to read contents of the destination item" +msgstr "" + +#: internal/arduino/builder/sketch.go:137 +msgid "unable to read contents of the source item" +msgstr "" + +#: internal/arduino/builder/sketch.go:147 +msgid "unable to write to destination file" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:297 +msgid "unknown package %s" +msgstr "" + +#: internal/arduino/cores/packagemanager/package_manager.go:304 +msgid "unknown platform %s:%s" +msgstr "" + +#: internal/arduino/sketch/sketch.go:137 +msgid "unknown sketch file extension '%s'" +msgstr "" + +#: internal/arduino/resources/checksums.go:61 +msgid "unsupported hash algorithm: %s" +msgstr "" + +#: internal/cli/core/upgrade.go:44 +msgid "upgrade arduino:samd to the latest version" +msgstr "" + +#: internal/cli/core/upgrade.go:42 +msgid "upgrade everything to the latest version" +msgstr "" + +#: commands/service_upload.go:760 +msgid "uploading error: %s" +msgstr "" + +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 +msgid "user directory not set" +msgstr "" + +#: internal/cli/feedback/terminal.go:94 +msgid "user input not supported for the '%s' output format" +msgstr "" + +#: internal/cli/feedback/terminal.go:97 +msgid "user input not supported in non interactive mode" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:175 +msgid "version %s not available for this operating system" +msgstr "" + +#: internal/arduino/cores/packagemanager/profiles.go:154 +msgid "version %s not found" +msgstr "" + +#: commands/service_board_identify.go:208 +msgid "wrong format in server response" +msgstr "" diff --git a/i18n/data/zh.po b/internal/locales/data/zh.po similarity index 58% rename from i18n/data/zh.po rename to internal/locales/data/zh.po index 0043b12c174..2f51dcfd2a1 100644 --- a/i18n/data/zh.po +++ b/internal/locales/data/zh.po @@ -1,136 +1,124 @@ # # Translators: -# CLI team <prj_cli_team@arduino.cc>, 2022 # Kuo Szu-Wei, 2022 # ZW, 2022 # Mimi <stevenjoezhang@gmail.com>, 2023 -# cike567, 2023 +# cike567, 2024 +# HalfSweet, 2024 # msgid "" msgstr "" -"Last-Translator: cike567, 2023\n" +"Last-Translator: HalfSweet, 2024\n" "Language-Team: Chinese (https://app.transifex.com/arduino-1/teams/108174/zh/)\n" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s %[2]s 版本:%[3]s 提交:%[4]s 日期:%[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "%[1]s 文件夹不再受支持!有关详细信息,请参见 %[2]s" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s 无效,全部重建" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "%[1]s 是必需的,但当前已安装 %[2]s。" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "%[1]s 模式丢失" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s,消息:%[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s,端口:%[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s,端口:%[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s,协议版本:%[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s 已经下载" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "%s 和 %s 不能一起使用" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%s 已安装" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "%s 已安装" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "%s 不是目录" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "%s 不是由软件包管理器管理的" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "%s 必须安装" -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%s 模式丢失" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "‘%s’ 的签名无效" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "‘build.core’ 和 ‘build.variant’ 指的是不同的平台:%[1]s 和 %[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(隐藏)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "(遗留)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "--git-url 和 --zip-path 默认是禁用的,更多信息参考: %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "--git-url 和 --zip-path 参数允许安装不受信任的文件,使用该标志风险自负。" -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "--git-url 或 --zip-path 不能与 --install-in-builtin-dir 一起使用。" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr ".ino 文件已存在" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "新版本的 Arduino CLI 可用:" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" -msgstr "需要编译器上传" +msgstr "需要编程器上传" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "ARCH" @@ -138,115 +126,119 @@ msgstr "ARCH" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "ARDUINO 命令行手册" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "更多帮助:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "将一个或多个值添加到设置中。" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "别名:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "所有平台都是最新的。" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "所有内核都是最新版本" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "已经安装 %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "%[1]s 的替代方案:%[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "添加原型时出错" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "检测库时出错" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "附加除错日志到特定文件" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "架构:%s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "存档已经存在" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "存档构建代码(缓存):%[1]s" -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Arduino CLI 项目命令" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI。" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Arduino 命令行界面 (arduino-cli)" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Arduino 开发板命令" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Arduino 缓存命令。" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Arduino 关于库的命令。" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Arduino 配置命令。" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Arduino 内核操作。" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "参数错误:%v" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "将项目写入开发板上。" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "作者:%s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "在这种情况下不能进行自动安装库,请手动删除所有重复的库并重试。" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "在这种情况下不能进行自动卸载库,请手动删除它们。" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "可用" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "可用命令:" @@ -254,234 +246,240 @@ msgstr "可用命令:" msgid "Binary file to upload." msgstr "要上传的二进制文件。" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "开发板名" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "开发板名:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "开发板版本:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "已指定引导加载程序文件,缺少:%[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." -msgstr "‘core.a’ 的构建被保存到这个路径中,以便被缓存和重复使用。" +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." +msgstr "" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "无法新建 %s 数据目录" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "无法新建项目" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "无法下载库" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "找不到 %s 平台的依赖" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "无法打开项目" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "无法在 %v 键中设置多个值" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" -msgstr "" +msgstr "无法更新项目" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "不能同时使用以下参数:%s" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "无法写入配置文件:%v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "无法写入调试日志:%s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "无法新建构建缓存目录" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "无法新建构建目录" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "无法新建配置文件目录:%v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "无法新建配置文件:%v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "无法新建临时目录" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "无法新建临时文件" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" -msgstr "" +msgstr "无法删除位于%[2]v的%[1]s" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "无法运行调试工具" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "找不到绝对路径:%v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "无法从配置中取得键值对 %[1]s:%[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "无法安装平台" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "无法安装 %s 工具 " -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "无法执行端口重置:%s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 msgid "Cannot upgrade platform" msgstr "无法升级平台" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "类别:%s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "检查指定库的依赖状态。" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "请提供给定的开发板/编程器组合以检查是否支持调试。" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "校验码与 package.json 中的校验码不同" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "校验码:" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "清理缓存。" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "以逗号分隔的开发板管理器附加地址列表。" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "命令保持运行,并在发生更改时打印已连接开发板的列表。" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "在 %s 中找不到已编译项目" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "编译 Arduino 项目" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "正在编译内核。。。" -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "正在编译库。。。" -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "正在编译 “%[1]s” 库" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "正在编译项目。。。" -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "配置文件已经存在,使用 --overwrite 弃用现有的配置文件。" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "配置文件写入:%s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "%s 的配置选项" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." -msgstr "" +msgstr "用于通信的端口设置格式为:<ID>=<value>[,<ID>=<value>]……" -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "配置平台。" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "配置工具。" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "已连接" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "已连接到 %s!按 CTRL-C 退出。" +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "内核" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "无法通过 HTTP 连接" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "无法新建索引目录" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "无法深度缓存内核构建:%[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "无法确定程序大小" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "无法获得当前工作目录:%v" @@ -489,7 +487,7 @@ msgstr "无法获得当前工作目录:%v" msgid "Create a new Sketch" msgstr "新建项目" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "从构建中创建并打印一个配置文件的内容。" @@ -497,100 +495,100 @@ msgstr "从构建中创建并打印一个配置文件的内容。" msgid "Creates a zip file containing all sketch files." msgstr "新建包含所有项目文件的 zip 文件。" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "用当前的配置创建或更新数据目录或自定义目录中的配置文件。" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "目前,Build Profiles 只支持通过 Arduino Library Manager 提供的库。" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" +msgstr "%s的个性化设置:" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "已弃用" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "守护进程正在监听 %s:%s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "调试 Arduino 项目" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "调试 Arduino 项目(此命令打开交互式 gdb 会话)" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "调试解释器,例如:%s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "%s 开发板不支持调试" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "支持调试:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "默认" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "默认的 FQBN 设置为" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "默认的端口设置为" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "默认编程器设置为" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "删除开发板/库管理器下载缓存" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." -msgstr "删除下载文件夹内的内容,在安装库和开发板平台期间暂存存档文件。" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "删除设置键及其所有子键。" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "依赖:%s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "说明" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "正在检测使用的库。。。" -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "检测并显示连接到电脑的开发板的列表。" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "包含用于调试的二进制文件的目录。" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "包含用于上传的二进制文件的目录。" @@ -604,246 +602,257 @@ msgstr "保存生成文件的目录。默认为 ./docs,该目录必须存在 msgid "Disable completion description for shells that support it" msgstr "对于支持完成描述的 shell,禁用完成描述" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "已断开连接" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "只显示提供的 gRPC 调用" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "不要安装依赖。" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "不要覆盖已经安装的库。" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "不要覆盖已经安装的平台。" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "不执行实际上传操作,只注销操作" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "如果父进程终止,则守护进程不终止。" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "如果已经安装了库依赖项,请不要尝试更新它们。" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "正在下载 %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "正在下载 %s 索引签名" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "正在下载 %s 索引" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "正在下载 %s 库" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "正在下载丢失的 %s 工具 " -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "正在下载软件包" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "正在下载 %s 平台" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "正在下载 %s 工具" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "下载一个或多个内核和相应的工具依赖" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "下载一个或多个库而不安装它们。" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "启用 gRPC 调用的调试日志" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "输入压缩文件的路径" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "输入在存储库上托管的库的 git 地址" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "将文件添加到项目存档时出错" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "在 %[1]s 中存档构建内核(缓存)时出错:%[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "错误归档:%v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "计算相对文件路径时出错" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "清理缓存出错:%v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "将路径转换为绝对路径时出错:%v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "复制输出 %s 文件时出错" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "新建实例时出错:%v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "新建输出目录时出错" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "新建项目存档时出错" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "新建项目时出错:%v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "检测开发板时出错:%v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "下载 %[1]s 时出错:%[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "下载 %s 时出错" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "下载 ‘%s’ 索引时出错" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "下载 ‘%s’ 索引签名时出错" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "下载 %s 库时出错" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "下载 %s 平台时出错" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "下载 %s 工具时出错" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "调试时出错:%v" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "检测 FQBN 时出错:%v" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "输出编码 JSON 过程时出错:%v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "上传时出错:%v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "输出编码 YAML 过程时出错:%v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" +msgstr "" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "构建时出错:%v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "安装时出错:%v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "卸载时出错:%v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "升级时出错:%v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "提取 %s 时出错" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "查找构建项目时出错" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "获取调试信息时出错:%v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "获取项目存档的绝对路径时出错" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "获取开发板详细信息时出错:%v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "获取编译数据库的当前目录时出错:%s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "从 `sketch.yaml` 获取默认端口时出错。检查是否在正确的 sketch 文件夹中,或提供 --port 标志: " + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "获取 %s 库的信息时出错" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "获取库信息时出错:%v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "获取端口元数据出错:%v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "获取端口设置详细信息时出错:%s" @@ -851,42 +860,42 @@ msgstr "获取端口设置详细信息时出错:%s" msgid "Error getting user input" msgstr "获取用户输入时出错" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "初始化实例时出错:%v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "安装 %s 时出错:%v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "安装 Git 库时出错:%v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "安装 Zip 库时出错:%v" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "安装 %s 库时出错" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "安装 %s 平台时出错" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "安装 %s 工具时出错" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "列出开发板列表时出错:%v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "列出库时出错:%v" @@ -894,44 +903,40 @@ msgstr "列出库时出错:%v" msgid "Error listing platforms: %v" msgstr "列出平台列表时出错:%v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "加载硬件平台时出错" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "加载 %s 索引时出错" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "打开 %s 时出错" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "打开调试日志文件出错:%s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "打开源代码覆盖数据文件时出错:%v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "解析 --show-properties 参数时出错:%v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "读取构建目录时出错" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "读取配置文件时出错:%v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "读取项目文件时出错" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "解析 %[1]s 的依赖时出错:%[2]s" @@ -939,203 +944,218 @@ msgstr "解析 %[1]s 的依赖时出错:%[2]s" msgid "Error retrieving core list: %v" msgstr "检索内核列表时出错:%v" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "回滚更改时出错:%s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "保存下载的索引时出错" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "保存已下载的索引签名时出错" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "搜索开发板时错误:%v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "搜索库时出现错误:%v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "搜索平台时出错:%v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "序列化编译数据库时出错:%s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "原始的设置出错:%s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "启动时发现出错:%v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "卸载 %[1]s 时出错:%[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "更新库索引时出错:%v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "升级库时出错" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "更新平台时出错:%s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "验证签名时出错" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "检测 %[1]s 包含的库时出错" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "确定项目大小时出错:%s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "写入编译数据库时出错:%s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "错误:%v 不支持命令说明" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "错误:无效的源代码覆盖了数据文件:%v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "事件" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "%s 库的示例" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "示例:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "可执行调试" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "应在 %s 目录中编译项目,但它是一个文件" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "芯片擦除失败" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "编译失败" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "无法烧录引导加载程序" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "新建数据目录失败" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "新建下载文件夹失败" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "未能侦听 TCP 端口:%[1]s。%[2]s 是无效端口。" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "未能侦听 TCP 端口:%[1]s。%[2]s 是未知名称。" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "未能侦听 TCP 端口:%[1]s。意外错误:%[2]v" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "未能侦听 TCP 端口:%s。地址已被使用。" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "上传失败" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "文件:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "固件加密或签名需要定义以下所有属性:%s" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "第一条消息必须包含调试请求,而不是数据" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "参数 %[1]s 是强制使用的,当与以下内容一起使用时:%[2]s" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "参数:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "强制运行安装后脚本(如果 CLI 未以交互方式运行)。" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." -msgstr "" +msgstr "强制运行 pre-uninstall 命令(如果 CLI 不是交互式运行)。" -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "强制跳过安装后脚本(如果 CLI 以交互方式运行)。" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." -msgstr "" +msgstr "强制跳过 pre-uninstall 命令(如果 CLI 以交互方式运行)。" -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" -msgstr "" +msgstr "找到%d平台有符合的 \"%s\": %s" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "完全合格开发板名,例如:arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "不支持 GDB 服务器 ‘%s’" @@ -1152,311 +1172,319 @@ msgstr "已生成脚本" msgid "Generates completion scripts for various shells" msgstr "已为各种 shell 生成脚本" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "生成函数原型。。。" -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "取得设定的键值对。" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "全局参数:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." -msgstr " 个全局变量使用 %[1]s 个字节(%[3]s%%)的动态内存,剩下 %[4]s 个字节用于局部变量。最大值为 %[2]s 字节。" +msgstr "全局变量使用 %[1]s 个字节(%[3]s%%)的动态内存。剩下 %[4]s 个字节将被用于局部变量,最大可用值为 %[2]s 字节。" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "全局变量使用 %[1]s 字节的动态内存。" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "标识属性:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "如果设定,则构建的二进制文件将导出到项目文件夹。" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "如果设定,则返回所有可安装和已安装的内核,包括手动安装的内核。" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "在列表中包含内置库(来自平台和 IDE)。" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "在存档中包含 %s 目录。" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "在 IDE-Builtin 目录下安装库" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "已安装" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "已安装 %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "正在安装 %s" -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "正在安装 %s 库" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "正在安装 %s 平台" -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "正在安装 %s 工具" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "安装一个或多个内核和相应的工具依赖。" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "在系统中安装一个或多个指定的库。" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "缓存中的内部错误" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "无效的 ‘%[1]s’ 属性:%[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "无效调用:应显示帮助,但仅在文本模式下可用。" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "无效的 FQBN" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "无效的 TCP 地址:缺少端口" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "无效的地址" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "无效的附加地址:%v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" -msgstr "无效存档:在存档 %{1}s 中未找到文件 %{2}s" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "传递的参数无效:%v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "无效的构建属性" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "无效的数据大小正则表达式:%s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "无效的 eeprom 大小正则表达式:%s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "无效的网站主页: %s" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "无效的实例" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "无效的 %s 条目" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "无效的库" -#: configuration/network.go:63 +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "" + +#: internal/cli/configuration/network.go:83 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "无效的 ‘%[1]s’ 网络代理: %[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "--log-level 选项无效:%s" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "无效的输出格式:%s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "%s 中的软件包索引无效" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "无效 %s 参数:版本不允许" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "无效的pid值:‘%s’" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "无效的配置文件" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "platform.txt 中的方法无效" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "无效的大小正则表达式:%s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "超时无效:%s" +#: main.go:86 +msgid "Invalid value in configuration" +msgstr "" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "无效的版本" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "无效的 vid 值:‘%s’" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "只生成编译数据库,不实际编译。跳过除 pre*hook 之外的所有生成命令。" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "库名" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "库" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "库_名" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "最新的" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "%[1]s 库已声明为预编译:" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "库 %[1]s 已经安装,但有不同的版本。:%[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "库 %s 已经是最新版本" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "%s 库未安装" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "未找到 %s 库" -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "未找到 %s 库" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "库不能同时使用 ‘%[1]s’ 和 ‘%[2]s’ 文件夹。在 ‘%[3]s’ 再次检查。" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "库安装失败" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "已安装的库" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "许可证:%s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "将所有内容链接在一起。。。" -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "列出已安装的受支持的平台的所有开发板。如果指定开发板名,则可以搜索指定开发板" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "列出所有已知开发板及其相应的 FQBN。" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "列出已连接的开发板。" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "用逗号分隔的开发板选项列表。可以对多个选项多次使用。" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "用逗号分隔的自定义构建属性列表。可以对多个属性多次使用。" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "列出可更新的库。" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "列出可更新的平台。" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "列出所有已连接的开发板。" @@ -1464,115 +1492,121 @@ msgstr "列出所有已连接的开发板。" msgid "Lists cores and libraries that can be upgraded" msgstr "列出可以升级的内核和库" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "正在加载索引文件:%v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "位置" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "可用内存不足,可能会出现稳定性问题。" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "维护者:%s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "最大并行编译数。如果设置为 0,则将使用可用的 CPU 核心数。" + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "等待端口发现的最长时间,例如:30s, 1m" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "记录此级别及以上的消息。有效级别为 %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "%[2]s 中的库中缺少 ‘%[1]s’" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "缺少 FQBN(完全合格开发板名)" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "找不到端口" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "缺少端口地址" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "找不到端口协议" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" -msgstr "找不到编译器" +msgstr "找不到编程器" #: internal/cli/upload/upload.go:162 msgid "Missing required upload field: %s" -msgstr "" +msgstr "缺少必要的上传字段:%s" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "缺少大小正则表达式" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "缺少项目路径" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "未找到 ‘%s’ 监视器" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "监视端口设置:" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "为 “%[1]s” 找到了多个库" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "名" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "名:“%s”" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" -msgstr "" +msgstr "新的上传端口%[1]s(%[2]s)" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "没有找到开发板" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "未设置默认端口或 FQBN" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "未设置默认端口、FQBN 或编程器" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "没有找到库。" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "没有安装库。" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "没有与你的搜索相匹配的库。" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1580,178 +1614,192 @@ msgstr "" "没有与您的搜索匹配的库。\n" "你的意思是。。。\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "没有可用的库更新。" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "没有可用于端口协议 %s 的监视器" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "没有找到过时的平台或库。" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." -msgstr "" +msgstr "没有任何平台被安装。" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "没有与你的搜索匹配的平台。" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "未找到上传端口,使用 %s 作为后备" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "找不到有效的依赖解决方案" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "内存不足;有关减少空间的提示,请参见 %[1]s。" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "未使用:%[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "操作系统:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "官方 Arduino 开发板:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "省略库中除最新版本之外的所有版本(生成更紧凑的 JSON 输出)。" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "开启开发板的通信端口。" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "选项:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "可选,可以是:%s。用于告诉 gcc 使用哪个警告级别(-W 参数)。" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "可选,清理构建文件夹并且不使用任何缓存构建。" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "可选,优化编译输出用于调试,而不是发布。" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "可选,禁止几乎所有输出。" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "可选,开启详细模式。" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "可选。 包含一组替换项目源代码的文件的路径。" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "使用自定义值替代构建属性。可以对多个属性多次使用。" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "覆盖现有的配置文件。" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "覆盖一个已经存在的存档文件" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "覆盖现有的 .ino 项目。" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "打包程序" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "软件包地址:" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "软件包维护者:" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "软件包名:" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "软件包在线帮助" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "软件包网站:" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "段落:%s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "路径" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "一个库的集合的路径。可以多次使用,或者可以用逗号分隔条目。" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "单个库的根文件夹的路径。可以多次使用,或者可以用逗号分隔条目。" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "写入日志的文件的路径。" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "保存已编译文件的路径。如果省略,将在操作系统的默认临时路径中创建目录。" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "在 %s 端口上执行 1200-bps TOUCH 重置" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "%s 平台已经安装" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "已安装 %s 平台" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1759,94 +1807,99 @@ msgstr "" "在任何已知索引中都找不到 %s 平台\n" "也许你需要添加一个第 3 方地址?" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "%s 平台已卸载" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "‘%s’ 平台已经是最新版本" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "未找到 ‘%s’ 平台" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "平台 ID" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "平台 ID 不正确" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "平台地址:" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "平台架构:" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "平台类别:" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "平台校验码:" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "平台文件名:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "平台名称:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "平台大小(字节):" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "请指定一个 FQBN。在 %[1]s 端口上检测到多个可能的开发板,协议为 %[2]s" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "请指定一个 FQBN。%[1]s 端口上的开发板与协议 %[2]s 不能被识别" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "端口" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "端口关闭:%v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "端口监视器错误" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "在 “%[1]s” 中找不到预编译库" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "打印开发板的详细信息。" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "将预处理的代码打印到标准输出,而不是编译。" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "在标准输出上打印日志。" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "打印当前配置" @@ -1855,192 +1908,282 @@ msgstr "打印当前配置" msgid "Prints the current configuration." msgstr "打印当前配置。" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "未找到 ‘%s’ 的配置文件''。" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" -msgstr "未找到 ‘%s’ 编译器" +msgstr "未找到 ‘%s’ 编程器" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" -msgstr "编译器名" +msgstr "编程器名" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" -msgstr "要使用的编译器,例如:atmel_ice" +msgstr "要使用的编程器,例如:atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" -msgstr "编译器:" +msgstr "编程器:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "‘%s’ 属性未定义" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "协议" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "提供包括:%s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "从设置中删除一个或多个值。" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "将 %[1]s 替换为 %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "用 %[2]s 替换 %[1]s 平台" -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "需要的工具:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "在端口上作为守护进程运行:%s" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "以静默模式运行,仅显示监视器输入和输出。" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "作为守护进程运行时,只执行一次内核和库的初始化。" +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "正在运行正常的内核构建。。。" -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." -msgstr "" +msgstr "运行 pre_uninstall 命令。" -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "搜索_条件" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" -msgstr "" +msgstr "SVD 文件路径" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "将生成文件保存在此目录中。" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "使用指定的关键词在开发板管理器中搜索一个开发板。" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "在开发板管理器中搜索一个开发板。" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "使用指定的关键字在开发板管理器中搜索内核。" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "在开发板管理器中搜索内核。" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "搜索一个或多个库数据(不区分大小写的搜索)。" - #: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "搜索一个或多个库数据。" - -#: internal/cli/lib/search.go:157 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"搜索满足条件的库文件。\n" +"\n" +"所有搜索均不区分大小写。多词搜索只会返回全部满足条件的库文件。\n" +"\n" +"不符合QV语法的将为基本搜索,将查找符合以下条件的库文件:\n" +" - Author\n" +"- Name\n" +"- Paragraph\n" +"- Provides\n" +"- Sentence\n" +"\n" +"有一种特殊的语法,称为限定符-值 (QV),表示搜索词\n" +"应只与每个库索引条目的一个字段进行比较。这种 语法\n" +"使用索引字段的名称 (不区分大小写)、等号 (=) 或冒号 (:),\n" +"以及一个值,例如 \"name=ArduinoJson \"或 \"provides:tinyusb.h\"。\n" +"\n" +"使用冒号分隔符的 QV 搜索词将匹配命名字段中任意位置\n" +"具有该值的所有库,而使用等号分隔符的 QV 搜索词将\n" +"只匹配命名字段中具有所提供值的库文件。\n" +"\n" +"QV 搜索词可以包括嵌入的空格,在值或整个词周围使用双引号 (\")\n" +"字符,例如 \"category=\"Data Processing\"\n" +"和\"category=Data Processing\"是等价的。\n" +"QV 术语可以包括一个字面双引号字符,方法是在它前面加上一个\n" +"反斜杠 (\\)字符。\n" +"\n" +"注意:使用双引号或反斜杠字符作为命令行参数传递的 QV 搜索条件\n" +"作为命令行参数传递时,可能需要加引号或转义,以防止 shell 解释这些字符。\n" +"\n" +"除上述字段外,QV 术语还可以使用这些限定符:\n" +" - Architectures\n" +"- Category\n" +"- Dependencies\n" +"- License\n" +"- Maintainer\n" +"- Types\n" +"- Version\n" +"- Website\n" +"\t\t" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "搜索与查询匹配的一个或多个库文件。" + +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "句子:%s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" -msgstr "" +msgstr "服务器路径" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "服务器响应:%s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" -msgstr "" +msgstr "服务器类型" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." -msgstr "" +msgstr "为上传所需的字段设置值。" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." -msgstr "" +msgstr "将终端设置为原始模式(无缓冲)。" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "设置一个值。" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." -msgstr "设置端口和 FQBN 的默认值。如果没有指定端口或 FQBN,将显示当前的默认端口和 FQBN。" +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." +msgstr "" + +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "设置端口和 FQBN 的默认值。如果未指定端口、FQBN 或编程器,则显示当前默认端口、FQBN 和编程器。" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "设置保存配置文件的位置。" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "设置" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "设置键不存在" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "显示所有可用的内核版本。" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "显示通讯端口的所有设置。" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "在平台上显示标记为隐藏的开发板" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." -msgstr "" +msgstr "显示构建属性。这些属性是展开的,如果你希望它们完全按照定义的样子显示,请使用\"--show-properties=unexpanded\"。" -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "显示完整的开发板详细信息" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "显示有关开发板的信息,特别是如果开发板在 FQBN 中有指定的选项。" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "只显示库名。" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" -msgstr "显示可用编译器列表" +msgstr "显示可用编程器列表" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "显示有关调试会话的元数据,而不是启动调试器。" @@ -2049,11 +2192,11 @@ msgstr "显示有关调试会话的元数据,而不是启动调试器。" msgid "Show outdated cores and libraries after index update" msgstr "在索引更新后显示过时的内核和库" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "显示已安装库的列表。" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2064,125 +2207,143 @@ msgstr "" "显示已安装库的列表。如果指定了 LIBNAME 范围,则列表仅限于该特定库。默认情况下,不会列出 ‘平台/核心’ 内置的库,可以通过添加 --all " "参数来列出它们。" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "显示已安装平台的列表。" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "显示库示例列表。" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "显示库的示例列表。可以指定名称作为搜索特定库的参数。" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "显示您系统上安装的 Arduino CLI 的版本号。" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "显示 Arduino CLI 的版本号。" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "大小(字节):" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "项目不能位于生成路径中。请指定其他生成路径" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "项目新建于:%s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "使用项目配置文件" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "项目太大;请参阅 %[1]s,以获取减少项目大小的提示。" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr " 项目使用 %[1]s 字节(%[3]s%%)的程序存储空间。最大值为 %[2]s 字节。" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "项目 .pde 扩展名已弃用,请将以下文件重命名为 .ino:" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "跳过最终可执行文件的链接。" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "跳过 1200-bps TOUCH 重置:未选择串口!" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "正在跳过以下内容的存档创建:%[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "跳过编译:%[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "跳过 %[1]s 预编译库的依赖检测" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "跳过平台配置。" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." -msgstr "" +msgstr "跳过 pre_uninstall 命令" -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "跳过工具配置。" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "跳过:%[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "一些索引无法更新。" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "有一些升级失败了,请查看输出结果以了解详情。" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOUCH:重置时出错:%s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:78 msgid "The TCP port the daemon will listen to" msgstr "守护进程将监听的 TCP 端口" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "" + +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "自定义配置文件(如果未指定,将使用默认值)。" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "参数 --debug-file 必须与 --debug 一起使用。" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "给定的开发板/编程器配置不支持调试。" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "给定的开发板/编程器配置支持调试。" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "实例不再有效,需要重新初始化" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2190,7 +2351,7 @@ msgstr "" "‘%[1]v’ 键不是列表中的条目,无法添加到其中。\n" "是否可以使用 ‘%[2]s’?" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2198,37 +2359,37 @@ msgstr "" "‘%[1]v’ 键不是列表中的条目,无法从中删除。\n" "是否可以使用 ‘%[2]s’?" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "库 %s 有多个安装。" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "自定义加密密钥的名称,用于在编译过程中对二进制文件进行加密。只在支持它的平台上使用。" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "自定义签名密钥的名称,用于在编译过程中对二进制文件进行签名。只在支持它的平台上使用。" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "日志的输出格​​式,可以是:%s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "搜索自定义密钥以签署和加密二进制文件的文件夹的路径。只在支持它的平台上使用。" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "该平台不支持预编译库的 ‘%[1]s’。" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2242,105 +2403,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "此命令显示可升级的已安装内核和库或其一的列表。如果不需要更新任何内容,则输出为空。" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." -msgstr "" +msgstr "显示时间戳。" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "%s 工具已经安装" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "%s 工具已经卸载" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "不支持 ‘%s’ 工具链" -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "工具链路径" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "工具链前缀" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "工具链类型" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "尝试运行 %s" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "打开详细模式。" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "类型" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "类型:%s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "地址:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "无法缓存构建的内核,请告知 %[1]s 维护者关注 %[2]s" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "无法获取文档文件夹:%v" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "无法获取本地应用程序数据文件夹:%v" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "无法获取用户主目录:%v" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "无法打开文件进行日志记录:%s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "无法解析地址" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "正在卸载 %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "卸载 %s,工具不再需要了" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "如果不再使用,卸载一个或多个内核和相应的工具依赖。" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "卸载一个或多个库。" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "未知" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "未知 FQBN" @@ -2352,23 +2514,23 @@ msgstr "更新内核和库的索引" msgid "Updates the index of cores and libraries to the latest versions." msgstr "将内核和库的索引更新到最新版本。" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "更新内核索引到最新版本。" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "更新内核索引。" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "更新库索引到最新版本。" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "更新库索引。" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "升级不接受带有版本范围" @@ -2380,53 +2542,53 @@ msgstr "将安装的内核和库升级到最新版本。" msgid "Upgrades installed cores and libraries." msgstr "升级已安装的内核和库。" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "升级已安装的库。" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "将一个或所有已安装的平台升级到最新版本。" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "上传 Arduino 项目。" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "上传 Arduino 项目。不会在上传之前编译项目。" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "上传端口地址,例如:COM3 或 /dev/ttyACM2" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "在 %s 上找到上传端口" -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "上传端口协议,例如:串行" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "编译后上传二进制文件。" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." -msgstr "使用外部编译器将引导加载程序上传到板上。" +msgstr "使用外部编程器将引导加载程序上传到板上。" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "上传引导加载程序。" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "使用 %s 协议上传到指定的开发板需要以下信息:" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2434,148 +2596,155 @@ msgstr "" "链接不能包含逗号。用空格隔开作为 env var 导出的多个链接:\n" "%s" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "用法:" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "使用 %s 获取有关命令的更多信息。" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "已使用的库" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "已使用的平台" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "使用:%[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "使用平台的 ‘%[1]s’ 开发板,在列出的文件夹中:%[2]s" -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "使用缓存库文件依赖项:%[1]s" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "使用平台的 ‘%[1]s’ 代码,在列出的文件夹中:%[2]s" -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "使用 %[2]s 版本的 %[1]s 库,在列出的文件夹中:%[3]s%[4]s" -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "使用的 %[1]s 库,在列出的文件夹中:%[2]s%[3]s" -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "使用预编译代码:%[1]s" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "在 %[1]s 中使用预编译库" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "使用以前编译的文件:%[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "版本" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "版本号" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "值" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "上传后验证上传的二进制文件。" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "版本" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "版本:%s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "警告:无法配置平台:%s" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "警告无法配置工具:%s" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" -msgstr "" +msgstr "警告!无法运行 pre_uninstall 命令%s" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "警告:该项目是用一个或多个自定义库编译的。" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "警告:%[1]s 库声称在 %[2]s 体系结构上运行,可能与当前在 %[3]s 体系结构上运行的开发板不兼容。" -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "正在等待上传端口。。。" -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "警告:%[1]s 开发板未定义 %[2]s 首选项。自动设置为:%[3]s" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "网站:%s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "将当前配置写入配置文件。" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "将当前配置写入数据目录中的配置文件。" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "正在写入配置文件:%v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "在用配置文件编译时,你不能使用 %s 参数。" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "存档哈希与索引中的哈希不同" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "存档无效:在 zip 文件顶层中找到多个文件" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "存档无效:在压缩文件的顶层没有找到文件" @@ -2583,370 +2752,341 @@ msgstr "存档无效:在压缩文件的顶层没有找到文件" msgid "archivePath" msgstr "存档路径" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "缺少 arduino 预处理器程序" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "自动检测生成项目:%s" - -#: internal/cli/feedback/stdio.go:35 +#: internal/cli/feedback/stdio.go:37 msgid "available only in text format" msgstr "仅以文本格式提供" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "基本搜索 \"audio\"" + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "基础搜索只由官方维护的 \"esp32\" 和 \"display\" 字段" + +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "在 %s 中找不到二进制文件" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "未找到开发板 %s" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "开发板名" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "未设置内置库目录" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "调用 %[1]s: %[2]w" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "找不到 %s 的最新版本" -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "找不到 %s 工具的最新版本" -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "在 %s 中找不到主项目文件" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "找不到 id 为 %s 的 discovery" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "无法检索标准错误流:%s" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "无法检索标准输出流:%s" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "候选" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "无法使用上传工具:%s" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "检查本地存档完整性" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "清理构建路径" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "命令" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "‘%[1]s’ 命令失败:%[2]s" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "命令失败:%s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "通信不同步,应为 ‘%[1]s’,收到 ‘%[2]s’" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "计算哈希:%s" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "配置的键 %s 包含无效字符" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "配置的值 %s 包含无效字符" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "将库复制到目标目录:" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "找不到有效的构建项目" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "无法覆盖" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "无法删除旧库" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "无法更新项目文件" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "创建核心缓存文件夹:%s" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "在 %[1]s 中创建 installed.json:%[2]s" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "新建用于提取的临时目录:%s" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "数据部分超出开发板中的可用空间" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "‘%s’ 依赖不可用" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "目标已存在" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "%s 目录已经存在,无法安装" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "目标目录已经存在" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "目录不存在:%s" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "发现 %[1]s 进程未启动:%[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "未找到 %s discovery" -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "%s discovery 未安装" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "未找到 discovery 版本:%s" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "下载特定版本(在本例中为 1.6.9)。" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "下载最新版本的 Arduino SAMD 内核。" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "下载" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "正在下载 %[1]s 工具:%[2]s" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "空开发板标识符" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "加载项目文件时错误:" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr " 开启 %s 时错误" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "错误解析值:%v" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "解析版本约束时错误" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "处理来自服务器的响应时出错" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "查询 Arduino Cloud Api 时出错" -#: arduino/resources/install.go:67 +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" +msgstr "" + +#: internal/arduino/resources/install.go:77 msgid "extracting archive: %s" msgstr "正在提取存档:%s" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "正在提取存档:%w" - -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "无法计算 “%s” 文件的哈希值" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "未能初始化 http 客户端" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "提取的档存大小与索引中指定的大小不同" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "存档中的文件必须放在子目录中" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "寻找 %s 的绝对路径" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "参数" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "接下来的符号链接 %s" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "针对特定版本。" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "最新版本。" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "针对特定版本。" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "正在生成安装 id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "fqbn 的字段 %s 包含无效字符" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "生成 installation.secret:%w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "" + +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "" -#: arduino/resources/download.go:53 +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "正在获取存档文件信息:%s" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "正在获取存档信息:%s" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "正在获取存档路径:%s" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "正在获取 %[1]s 开发板的构建属性:%[2]s" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "获取 %[1]s 平台的 discovery 依赖:%[2]s" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "获取 %[1]s 平台的监视器依赖项:%[2]s" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "正在获取 %[1]s 的父目录:%[2]s" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "正在获取 %[1]s 平台的工具依赖:%[2]s" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "未设置安装目录" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "正在安装 %[1]s 工具:%[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "安装 %[1]s 平台: %[2]s" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "“%s” 的输出格式不支持交互式终端" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "无效的 ‘%s’ 指令" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "无效的 “添加” 消息:找不到端口" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "无效的 “删除” 消息:找不到端口" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "无效的校验码格式:%s" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "无效的配置选项:%s" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "无效的空内核架构 ’%s‘" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "无效的空内核参数" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "无效的空内核名称 ’%s‘" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "无效的空内核引用 ’%s‘" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "无效的空内核版本:’%s‘" @@ -2958,343 +3098,348 @@ msgstr "无效的空库名" msgid "invalid empty library version: %s" msgstr "无效的空库版本:%s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "发现无效的空选项" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "无效的 git 地址" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "无效的 ‘%[1]s’ 哈希:%[2]s" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "无效的 %s 条目" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "无效的库指令:" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "无效的库 layout:%s" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "无效的库 location:%s" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "无效库:没有找到头文件" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "无效的 ‘%s’ 选项 " -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "无效选项 '%s'。" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "新建配置目录的路径无效:%[1]s 错误:%[2]w" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "写入库存文件的路径无效:%[1]s 错误:%[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" -msgstr "无效的平台存档大小:%s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "无效的平台标识符" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "无效的平台索引网址:" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "无效的热插拔监视器引用:%s" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "%s 的端口配置值无效:%s" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" -msgstr "无效的端口配置:%s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" +msgstr "" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "无效的 ‘%[1]s’ 方法: %[2]s" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." -msgstr "" +msgstr "无效的工程命名 \"%[1]s\": 第一个字符必须是字母数字或\"_\",后面的字符也可以包含\"-\"和\".\"。最后一个字符不能是\".\"。" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "‘%[2]s’ 选项的 ‘%[1]s’ 值无效" -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "%s 版本目录无效" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "无效的版本:" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "在设置中找不到键" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "关键字" -#: arduino/libraries/librariesmanager/install.go:130 +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "Daniel Garcia编写的库文件" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "仅限由 Adafruit 维护,名称中含有 \"gfx\" 的库文件" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "至少依赖于 \"IRremote\" 的库" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "仅依赖于 \"IRremote\" 的库" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "名称中含有 \"buzzer\" 的库" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "名称与 \"pcf8523 \"完全匹配的库" + +#: internal/arduino/libraries/librariesmanager/install.go:125 msgid "library %s already installed" msgstr "%s 库已安装" -#: arduino/libraries/librariesmanager/install.go:319 +#: internal/arduino/libraries/librariesmanager/install.go:342 msgid "library not valid" msgstr "库无效" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "库路径不存在:%s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "列出串口" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 msgid "loading %[1]s: %[2]s" msgstr "正在加载 %[1]s: %[2]s" -#: arduino/cores/packagemanager/loader.go:351 +#: internal/arduino/cores/packagemanager/loader.go:314 msgid "loading boards: %s" msgstr "正在加载开发板:%s" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "正在从 %s 下载附加工具" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "正在加载 %[1]s json 索引文件:%[2]s" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "正在从 %[1]s 加载库:%[2]s" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "正在加载库属性:%s" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "正在加载平台 %s 发行版本" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "正在加载 platform.txt" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "安装所需 %s 平台" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "安装所需 %s 工具" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "在 %s 中加载工具发行版本" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "在 %s 中查找 boards.txt" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "寻找构建产物" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "项目中缺少主文件:%s" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "缺少 ‘%s’ 指令" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "缺少校验码:%s" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "缺少 %[2]s 开发板引用的 %[1]s 软件包 " -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" -msgstr "" +msgstr "缺少软件包索引%s,无法保证未来的更新" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "缺少 %[1]s 平台:%[2]s 被开发板 %[3]s 引用" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "缺少平台 %[1]s 发行版本:%[2]s 被开发板 %[3]s 引用" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" -msgstr "" +msgstr "缺少签名" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "未找到公开监视器:%s" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "正在将提取的存档移动到目标目录:%s" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "找到多个构建文件:‘%[1]s’ 和 ‘%[2]s’" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "找到多个主项目文件 (%[1]v, %[2]v)" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "没有找到适用于当前操作系统的 %[1]s 工具的兼容版本,请尝试联系 %[2]s" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "没有指定可执行文件" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "没有指定实例" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "未指定项目或构建目录/文件" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "没有这样的文件或目录" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "存档中没有唯一的根目录,找到了 ‘%[1]s’ 和 ‘%[2]s’" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "未提供上传端口" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "在 %[1]s 中找不到有效的项目:缺少 %[2]s" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "对于当前的操作系统没有可用的版本,请尝试联系 %s" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "未在终端中运行" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "正在打开存档文件:%s" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "正在打开 boards.txt" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "以 1200bps 的速率打开端口" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "打开签名文件:%s" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "打开目标文件:%s" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "未找到 %s 软件包 " -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "未找到 ‘%s’ 软件包 " -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "正在解析 IDE 附加索引" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "解析 FQBN:%s" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "解析 library_index.json: %s" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "路径不是平台目录:%s" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "在 %[2]s 软件包中找不到 %[1]s 平台" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "%s 平台没有可用的版本" - -#: arduino/cores/packagemanager/package_manager.go:298 +#: internal/arduino/cores/packagemanager/package_manager.go:309 msgid "platform %s is not installed" msgstr "%s 平台未安装" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "该平台不适用于您的操作系统" + +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "平台未安装" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "请改用 --build-property。" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "已添加可插入 discovery:%s" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "端口" @@ -3302,291 +3447,277 @@ msgstr "端口" msgid "port not found: %[1]s %[2]s" msgstr "未找到端口:%[1]s %[2]s" -#: arduino/monitor/monitor.go:236 +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "编程器" + +#: internal/arduino/monitor/monitor.go:235 msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "不支持协议版本:请求了 %[1]d,获得了 %[2]d" -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "不支持协议版本:请求 1,得到 %d" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "正在读取 %[1]s: %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "正在读取 %[1]s 目录 : %[2]s" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "阅读目录 %[1]s 内容:%[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "正在读取 %s 目录" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "正在读取 %s 目录的内容:%w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" +msgstr "" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "正在读取 %[1]s 文件: %[2]s" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "正在读取文件:%v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "读取文件" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "正在读取 lib 头文件:%s" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "正在读取 lib src 目录:%s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "正在读取库头文件:%w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "正在读取 library_index.json: %s" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "正在读取软件包根目录:%s" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "阅读项目文件" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "未找到 ‘%s’ 方法" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "找不到 %[2]s 工具的 %[1]s 发行版本" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "发行不能为无" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "正在删除损坏的存档文件:%s" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "删除库目录:%s" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "正在删除平台文件:%s" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "找不到 %[2]s 平台所需的 %[1]s 版本" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "正在检索Arduino密钥:%s" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "扫描示例:%s" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "扫描项目示例" -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "在 %[1]s 中搜索 builtin_tools_versions.txt:%[2]s" - -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "正在搜索软件包根目录:%s" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "将 DTR 设置为 OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" +msgstr "" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "项目名称不能为空" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" -msgstr "" +msgstr "工程命名不能是保留名称 \"%[1]s\"" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "项目名称过长(%[1]d 个字符)。 最大允许长度为 %[2]d" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "项目路径无效" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "项目路径" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "来源不是目录" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "开始发现 %s" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "测试存档校验码:%s" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "测试存档大小:%s" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "测试存档是否被缓存:%s" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "测试本地存档完整性:%s" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "文本部分超出开发板的可用空间" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "编译数据库可能不完整或不准确" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "该平台没有发行版本" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "服务器响应状态 %s" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "等待消息超时" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "等待来自 %s 的消息超时" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "%s 工具不是由软件包管理器管理的" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "未找到 %s 工具" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "在 ‘%[2]s’ 软件包中找不到 ‘%[1]s’ 工具" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "工具未安装" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "找不到发行工具:%s" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "未找到工具的 %s 版本" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "需要 %[1]s 库的两个不同版本:%[2]s 和 %[3]s" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "无法计算项目的相对路径" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "无法新建文件夹来保存项目" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "无法新建包含该项目的文件夹" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "无法将 config 编码成 YAML:%v" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "无法读取目标项目的内容" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "无法读取源项目的内容" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "无法写入目标文件" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "未知 %s 软件包 " -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "未知 %s 平台:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "未知的项目文件扩展名 ‘%s’" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "不支持的哈希算法:%s" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "将 arduino:samd 升级到最新版本" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "将所有内容升级到最新版本" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "上传错误:%s" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "未设置用户目录" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "'%s' 输出格式不支持用户输入" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "在非互动模式下不支持用户输入" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "%s 版本不适用于此操作系统" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "未找到 %s 版本" -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "服务器响应格式错误" diff --git a/i18n/data/zh_TW.po b/internal/locales/data/zh_TW.po similarity index 58% rename from i18n/data/zh_TW.po rename to internal/locales/data/zh_TW.po index 382039fdaaf..8176dccf4a9 100644 --- a/i18n/data/zh_TW.po +++ b/internal/locales/data/zh_TW.po @@ -1,132 +1,120 @@ # # Translators: -# you bike, 2023 +# coby2023t, 2024 # msgid "" msgstr "" -"Last-Translator: you bike, 2023\n" +"Last-Translator: coby2023t, 2024\n" "Language-Team: Chinese (Taiwan) (https://app.transifex.com/arduino-1/teams/108174/zh_TW/)\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: version/version.go:59 +#: internal/version/version.go:56 msgid "%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s" msgstr "%[1]s %[2]s 版本:%[3]s 交付:%[4]s 日期:%[5]s" -#: arduino/builder/internal/detector/detector.go:455 +#: internal/arduino/builder/internal/detector/detector.go:462 msgid "%[1]s folder is no longer supported! See %[2]s for more information" msgstr "已不支援%[1]s 檔案夾!詳細資訊,請見 %[2]s" -#: arduino/builder/build_options_manager.go:142 +#: internal/arduino/builder/build_options_manager.go:140 msgid "%[1]s invalid, rebuilding all" msgstr "%[1]s 無效,重新建構全部" -#: internal/cli/lib/check_deps.go:111 +#: internal/cli/lib/check_deps.go:125 msgid "%[1]s is required but %[2]s is currently installed." msgstr "需要 %[1]s ,但已安裝 %[2]s" -#: arduino/builder/builder.go:466 +#: internal/arduino/builder/builder.go:487 msgid "%[1]s pattern is missing" msgstr "%[1]s 樣態遺失" -#: arduino/discovery/discovery.go:74 -msgid "%[1]s, message: %[2]s" -msgstr "%[1]s,訊息:%[2]s" - -#: arduino/discovery/discovery.go:83 -msgid "%[1]s, port: %[2]s" -msgstr "%[1]s,連接埠:%[2]s" - -#: arduino/discovery/discovery.go:80 -msgid "%[1]s, ports: %[2]s" -msgstr "%[1]s,連接埠:%[2]s" - -#: arduino/discovery/discovery.go:77 -msgid "%[1]s, protocol version: %[2]d" -msgstr "%[1]s,協議版本:%[2]d" - -#: arduino/resources/download.go:49 +#: internal/arduino/resources/download.go:51 msgid "%s already downloaded" msgstr "%s 已經下載" -#: commands/upload/upload.go:690 +#: commands/service_upload.go:782 msgid "%s and %s cannot be used together" msgstr "%s 和 %s 不能一起使用" -#: arduino/cores/packagemanager/install_uninstall.go:368 +#: internal/arduino/cores/packagemanager/install_uninstall.go:373 msgid "%s installed" msgstr "%s 已安裝" -#: internal/cli/lib/check_deps.go:108 +#: internal/cli/lib/check_deps.go:122 msgid "%s is already installed." msgstr "%s 已安裝" -#: arduino/cores/packagemanager/loader.go:65 -#: arduino/cores/packagemanager/loader.go:652 +#: internal/arduino/cores/packagemanager/loader.go:63 +#: internal/arduino/cores/packagemanager/loader.go:614 msgid "%s is not a directory" msgstr "%s 不是目錄" -#: arduino/cores/packagemanager/install_uninstall.go:288 +#: internal/arduino/cores/packagemanager/install_uninstall.go:292 msgid "%s is not managed by package manager" msgstr "%s 不是由套件管理員管理的" -#: internal/cli/lib/check_deps.go:105 +#: internal/cli/daemon/daemon.go:67 +msgid "%s must be >= 1024" +msgstr "%s 必須 >= 1024" + +#: internal/cli/lib/check_deps.go:119 msgid "%s must be installed." msgstr "必須安裝 %s " -#: arduino/builder/internal/preprocessor/ctags.go:190 -#: arduino/builder/internal/preprocessor/gcc.go:58 +#: internal/arduino/builder/internal/preprocessor/ctags.go:193 +#: internal/arduino/builder/internal/preprocessor/gcc.go:62 msgid "%s pattern is missing" msgstr "%s 樣態遺失" -#: arduino/errors.go:819 +#: commands/cmderrors/cmderrors.go:818 msgid "'%s' has an invalid signature" msgstr "'%s'的簽名無效" -#: arduino/cores/packagemanager/package_manager.go:400 +#: internal/arduino/cores/packagemanager/package_manager.go:416 msgid "" "'build.core' and 'build.variant' refer to different platforms: %[1]s and " "%[2]s" msgstr "'build.core' 和 'build.variant' 參照到不同的平台: %[1]s 和 %[2]s" -#: internal/cli/board/listall.go:89 internal/cli/board/search.go:86 +#: internal/cli/board/listall.go:97 internal/cli/board/search.go:94 msgid "(hidden)" msgstr "(隱藏)" -#: arduino/builder/libraries.go:302 +#: internal/arduino/builder/libraries.go:303 msgid "(legacy)" msgstr "(舊版)" -#: internal/cli/lib/install.go:81 +#: internal/cli/lib/install.go:82 msgid "" "--git-url and --zip-path are disabled by default, for more information see: " "%v" msgstr "--git-url 和 --zip-path 預設為不能使用, 詳情請見: %v" -#: internal/cli/lib/install.go:83 +#: internal/cli/lib/install.go:84 msgid "" "--git-url and --zip-path flags allow installing untrusted files, use it at " "your own risk." msgstr "--git-url 和 --zip-path 旗標允許安裝未被信任的檔案, 使用風險自負." -#: internal/cli/lib/install.go:86 +#: internal/cli/lib/install.go:87 msgid "--git-url or --zip-path can't be used with --install-in-builtin-dir" msgstr "--git-url 或 --zip-path 不能和 --install-in-builtin-dir 一起使用" -#: commands/sketch/new.go:66 +#: commands/service_sketch_new.go:66 msgid ".ino file already exists" msgstr ".ino 檔已存在" -#: internal/cli/updater/updater.go:71 +#: internal/cli/updater/updater.go:30 msgid "A new release of Arduino CLI is available:" msgstr "有新版的 Arduino CLI" -#: arduino/errors.go:300 +#: commands/cmderrors/cmderrors.go:299 msgid "A programmer is required to upload" msgstr "上傳需要編寫器/燒錄器" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "ARCH" msgstr "架構" @@ -134,115 +122,119 @@ msgstr "架構" msgid "ARDUINO COMMAND LINE MANUAL" msgstr "ARDUINO 命令列手冊" -#: internal/cli/usage.go:32 +#: internal/cli/usage.go:28 msgid "Additional help topics:" msgstr "更多協助主題:" -#: internal/cli/config/add.go:73 internal/cli/config/add.go:74 +#: internal/cli/config/add.go:34 internal/cli/config/add.go:35 msgid "Adds one or more values to a setting." msgstr "加入一或多個值到設定中" -#: internal/cli/usage.go:27 +#: internal/cli/usage.go:23 msgid "Aliases:" msgstr "別名:" -#: internal/cli/core/upgrade.go:72 +#: internal/cli/core/list.go:112 +msgid "All platforms are up to date." +msgstr "全平台已是最新版" + +#: internal/cli/core/upgrade.go:87 msgid "All the cores are already at the latest version" msgstr "所有核心都已是最新版" -#: commands/lib/install.go:86 +#: commands/service_library_install.go:136 msgid "Already installed %s" msgstr "已安裝 %s" -#: arduino/builder/internal/detector/detector.go:88 +#: internal/arduino/builder/internal/detector/detector.go:91 msgid "Alternatives for %[1]s: %[2]s" msgstr "%[1]s 的替代品: %[2]s" -#: arduino/builder/internal/preprocessor/ctags.go:69 +#: internal/arduino/builder/internal/preprocessor/ctags.go:69 msgid "An error occurred adding prototypes" msgstr "新增原型時出錯" -#: arduino/builder/internal/detector/detector.go:209 +#: internal/arduino/builder/internal/detector/detector.go:213 msgid "An error occurred detecting libraries" msgstr "偵測程式庫時出錯" -#: internal/cli/daemon/daemon.go:62 +#: internal/cli/daemon/daemon.go:87 msgid "Append debug logging to the specified file" msgstr "添加除錯日誌到指定檔案" -#: internal/cli/lib/search.go:164 +#: internal/cli/lib/search.go:208 msgid "Architecture: %s" msgstr "架構:%s" -#: commands/sketch/archive.go:71 +#: commands/service_sketch_archive.go:69 msgid "Archive already exists" msgstr "壓縮檔已存在" -#: arduino/builder/core.go:141 +#: internal/arduino/builder/core.go:164 msgid "Archiving built core (caching) in: %[1]s" msgstr "壓縮在: %[1]s 裏已編譯核心 (快取) " -#: internal/cli/sketch/sketch.go:31 internal/cli/sketch/sketch.go:32 +#: internal/cli/sketch/sketch.go:30 internal/cli/sketch/sketch.go:31 msgid "Arduino CLI sketch commands." msgstr "Arduino CLI sketch 命令" -#: internal/cli/cli.go:70 +#: internal/cli/cli.go:88 msgid "Arduino CLI." msgstr "Arduino CLI 命令列介面" -#: internal/cli/cli.go:71 +#: internal/cli/cli.go:89 msgid "Arduino Command Line Interface (arduino-cli)." msgstr "Arduino 命令列界面 (arduino-cli)" -#: internal/cli/board/board.go:31 internal/cli/board/board.go:32 +#: internal/cli/board/board.go:30 internal/cli/board/board.go:31 msgid "Arduino board commands." msgstr "Arduino 開發板指令" -#: internal/cli/cache/cache.go:31 internal/cli/cache/cache.go:32 +#: internal/cli/cache/cache.go:30 internal/cli/cache/cache.go:31 msgid "Arduino cache commands." msgstr "Arduino 快取指令" -#: internal/cli/lib/lib.go:31 internal/cli/lib/lib.go:32 +#: internal/cli/lib/lib.go:30 internal/cli/lib/lib.go:31 msgid "Arduino commands about libraries." msgstr "Arduino 程式庫指令" -#: internal/cli/config/config.go:33 +#: internal/cli/config/config.go:35 msgid "Arduino configuration commands." msgstr "Arduino 設定指令" -#: internal/cli/core/core.go:31 internal/cli/core/core.go:32 +#: internal/cli/core/core.go:30 internal/cli/core/core.go:31 msgid "Arduino core operations." msgstr "Arduino 核心作業" -#: internal/cli/lib/check_deps.go:56 internal/cli/lib/install.go:127 +#: internal/cli/lib/check_deps.go:62 internal/cli/lib/install.go:130 msgid "Arguments error: %v" msgstr "參數錯誤:%v" -#: internal/cli/board/attach.go:35 +#: internal/cli/board/attach.go:36 msgid "Attaches a sketch to a board." msgstr "將 sketch 放入開發板" -#: internal/cli/lib/search.go:155 +#: internal/cli/lib/search.go:199 msgid "Author: %s" msgstr "作者: %s" -#: arduino/libraries/librariesmanager/install.go:78 +#: internal/arduino/libraries/librariesmanager/install.go:78 msgid "" "Automatic library install can't be performed in this case, please manually " "remove all duplicates and retry." msgstr "在這情況下無法自動化程式庫安裝, 請手動移除重覆的再試" -#: commands/lib/uninstall.go:57 +#: commands/service_library_uninstall.go:87 msgid "" "Automatic library uninstall can't be performed in this case, please manually" " remove them." msgstr "在這情況下無法自動化程式庫卸除, 請手動移除" -#: internal/cli/lib/list.go:136 +#: internal/cli/lib/list.go:138 msgid "Available" msgstr "可用的" -#: internal/cli/usage.go:29 +#: internal/cli/usage.go:25 msgid "Available Commands:" msgstr "可用命令:" @@ -250,234 +242,240 @@ msgstr "可用命令:" msgid "Binary file to upload." msgstr "要上傳的二進位檔" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "Board Name" msgstr "開發板名" -#: internal/cli/board/details.go:138 +#: internal/cli/board/details.go:139 msgid "Board name:" msgstr "開發板名:" -#: internal/cli/board/details.go:140 +#: internal/cli/board/details.go:141 msgid "Board version:" msgstr "開發板版本:" -#: arduino/builder/sketch.go:245 +#: internal/arduino/builder/sketch.go:245 msgid "Bootloader file specified but missing: %[1]s" msgstr "找不到指定的 Bootloader 檔: %[1]s" -#: internal/cli/compile/compile.go:99 -msgid "Builds of 'core.a' are saved into this path to be cached and reused." -msgstr "'core.a'的編譯檔已存到這路徑,方便快取和重複使用" +#: internal/cli/compile/compile.go:104 +msgid "" +"Builds of cores and sketches are saved into this path to be cached and " +"reused." +msgstr "相關 core 和 sketch 的編譯檔案將快取在這路徑上。" -#: arduino/resources/index.go:64 +#: internal/arduino/resources/index.go:65 msgid "Can't create data directory %s" msgstr "無法建立 %s 資料目錄" -#: arduino/errors.go:512 +#: commands/cmderrors/cmderrors.go:511 msgid "Can't create sketch" msgstr "無法建立 sketch" -#: commands/lib/download.go:63 commands/lib/download.go:66 +#: commands/service_library_download.go:95 +#: commands/service_library_download.go:98 msgid "Can't download library" msgstr "無法下載程式庫" -#: arduino/cores/packagemanager/install_uninstall.go:134 -#: commands/core/uninstall.go:64 +#: commands/service_platform_uninstall.go:89 +#: internal/arduino/cores/packagemanager/install_uninstall.go:138 msgid "Can't find dependencies for platform %s" msgstr "找不到 %s 平台的相依" -#: arduino/errors.go:538 +#: commands/cmderrors/cmderrors.go:537 msgid "Can't open sketch" msgstr "無法打開 sketch" -#: internal/cli/config/set.go:54 -msgid "Can't set multiple values in key %v" -msgstr "無法在 %v 鍵設多個值" - -#: arduino/errors.go:525 +#: commands/cmderrors/cmderrors.go:524 msgid "Can't update sketch" msgstr "無法更新 sketch" -#: internal/cli/arguments/arguments.go:36 +#: internal/cli/arguments/arguments.go:38 msgid "Can't use the following flags together: %s" msgstr "不能同時使用下列參數: %s" -#: internal/cli/config/add.go:103 internal/cli/config/remove.go:69 -msgid "Can't write config file: %v" -msgstr "無法寫入設定檔: %v" - -#: internal/cli/daemon/daemon.go:91 +#: internal/cli/daemon/daemon.go:117 msgid "Can't write debug log: %s" msgstr "無法寫入除錯日誌: %s" -#: commands/compile/compile.go:160 commands/compile/compile.go:163 +#: commands/service_compile.go:190 commands/service_compile.go:193 msgid "Cannot create build cache directory" msgstr "無法建立編譯快取的目錄" -#: commands/compile/compile.go:148 +#: commands/service_compile.go:215 msgid "Cannot create build directory" msgstr "無法建立編譯目錄" -#: internal/cli/config/init.go:94 +#: internal/cli/config/init.go:100 msgid "Cannot create config file directory: %v" msgstr "無法建立設定檔的目錄: %v" -#: internal/cli/config/init.go:109 +#: internal/cli/config/init.go:124 msgid "Cannot create config file: %v" msgstr "無法建立設定檔: %v" -#: arduino/errors.go:782 +#: commands/cmderrors/cmderrors.go:781 msgid "Cannot create temp dir" msgstr "無法建立暫存目錄" -#: arduino/errors.go:800 +#: commands/cmderrors/cmderrors.go:799 msgid "Cannot create temp file" msgstr "無法建立暫存檔" -#: internal/cli/config/delete.go:53 +#: internal/cli/config/delete.go:55 msgid "Cannot delete the key %[1]s: %[2]v" msgstr "無法刪除鍵值 %[1]s: %[2]v" -#: commands/debug/debug.go:72 +#: commands/service_debug.go:228 msgid "Cannot execute debug tool" msgstr "無法執行除錯工具" -#: internal/cli/config/init.go:72 internal/cli/config/init.go:82 +#: internal/cli/config/init.go:77 internal/cli/config/init.go:84 msgid "Cannot find absolute path: %v" msgstr "找不到絕對路徑: %v" -#: arduino/cores/packagemanager/install_uninstall.go:141 +#: internal/cli/config/add.go:63 internal/cli/config/add.go:65 +#: internal/cli/config/get.go:59 internal/cli/config/remove.go:63 +#: internal/cli/config/remove.go:65 +msgid "Cannot get the configuration key %[1]s: %[2]v" +msgstr "無法從設定裏取得鍵值 %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:145 msgid "Cannot install platform" msgstr "無法安裝平台" -#: arduino/cores/packagemanager/install_uninstall.go:346 +#: internal/arduino/cores/packagemanager/install_uninstall.go:351 msgid "Cannot install tool %s" msgstr "無法安裝工具 %s" -#: commands/upload/upload.go:468 +#: commands/service_upload.go:544 msgid "Cannot perform port reset: %s" msgstr "無法執行連接埠重設: %s" -#: arduino/cores/packagemanager/install_uninstall.go:159 +#: internal/cli/config/add.go:75 internal/cli/config/add.go:77 +#: internal/cli/config/remove.go:73 internal/cli/config/remove.go:75 +msgid "Cannot remove the configuration key %[1]s: %[2]v" +msgstr "無法移除設定鍵 %[1]s: %[2]v" + +#: internal/arduino/cores/packagemanager/install_uninstall.go:163 msgid "Cannot upgrade platform" msgstr "無法升級平台" -#: internal/cli/config/delete.go:57 -msgid "Cannot write the file %[1]s: %[2]v" -msgstr "無法寫入檔案 %[1]s: %[2]v" - -#: internal/cli/lib/search.go:163 +#: internal/cli/lib/search.go:207 msgid "Category: %s" msgstr "類別:%s" -#: internal/cli/lib/check_deps.go:37 internal/cli/lib/check_deps.go:38 +#: internal/cli/lib/check_deps.go:39 internal/cli/lib/check_deps.go:40 msgid "Check dependencies status for the specified library." msgstr "檢查指定程式庫的相依狀態" -#: arduino/resources/checksums.go:167 +#: internal/cli/debug/debug_check.go:42 +msgid "Check if the given board/programmer combination supports debugging." +msgstr "檢查指定的板子/燒錄器是否支援除錯。" + +#: internal/arduino/resources/checksums.go:166 msgid "Checksum differs from checksum in package.json" msgstr "校驗碼和 package.json 檔內的不同" -#: internal/cli/board/details.go:188 +#: internal/cli/board/details.go:190 msgid "Checksum:" msgstr "校驗碼:" -#: internal/cli/cache/cache.go:33 +#: internal/cli/cache/cache.go:32 msgid "Clean caches." msgstr "清除快取" -#: internal/cli/cli.go:126 +#: internal/cli/cli.go:181 msgid "Comma-separated list of additional URLs for the Boards Manager." msgstr "給開發板管理員用的網址清單,以逗號分隔" -#: internal/cli/board/list.go:54 +#: internal/cli/board/list.go:56 msgid "" "Command keeps running and prints list of connected boards whenever there is " "a change." msgstr "命令保持執行, 在有更動時列出連接的開發板" -#: commands/debug/debug_info.go:128 commands/upload/upload.go:376 +#: commands/service_debug_config.go:178 commands/service_upload.go:452 msgid "Compiled sketch not found in %s" msgstr "在 %s 中找不到已編譯的 sketch" -#: internal/cli/compile/compile.go:83 internal/cli/compile/compile.go:84 +#: internal/cli/compile/compile.go:80 internal/cli/compile/compile.go:81 msgid "Compiles Arduino sketches." msgstr "編譯 Arduino sketch" -#: arduino/builder/builder.go:400 +#: internal/arduino/builder/builder.go:421 msgid "Compiling core..." msgstr "編譯核心..." -#: arduino/builder/builder.go:379 +#: internal/arduino/builder/builder.go:400 msgid "Compiling libraries..." msgstr "編譯程式庫..." -#: arduino/builder/libraries.go:133 +#: internal/arduino/builder/libraries.go:134 msgid "Compiling library \"%[1]s\"" msgstr "編譯程式庫 “%[1]s”" -#: arduino/builder/builder.go:363 +#: internal/arduino/builder/builder.go:384 msgid "Compiling sketch..." msgstr "編譯 sketch ..." -#: internal/cli/config/init.go:88 +#: internal/cli/config/init.go:94 msgid "" "Config file already exists, use --overwrite to discard the existing one." msgstr "設定檔已存在,使用 --overwrite 覆蓋它" -#: internal/cli/config/init.go:112 +#: internal/cli/config/init.go:179 msgid "Config file written to: %s" msgstr "設定檔寫入:%s" -#: internal/cli/debug/debug.go:197 +#: internal/cli/debug/debug.go:250 msgid "Configuration options for %s" msgstr "%s 的設定選項" -#: internal/cli/monitor/monitor.go:70 +#: internal/cli/monitor/monitor.go:78 msgid "" "Configure communication port settings. The format is " "<ID>=<value>[,<ID>=<value>]..." msgstr "通訊埠設定, 格式為 <ID>=<value>[,<ID>=<value>]..." -#: arduino/cores/packagemanager/install_uninstall.go:175 +#: internal/arduino/cores/packagemanager/install_uninstall.go:179 msgid "Configuring platform." msgstr "設定平台" -#: arduino/cores/packagemanager/install_uninstall.go:356 +#: internal/arduino/cores/packagemanager/install_uninstall.go:361 msgid "Configuring tool." msgstr "設定工具" -#: internal/cli/board/list.go:188 +#: internal/cli/board/list.go:198 msgid "Connected" msgstr "已連接" -#: internal/cli/monitor/monitor.go:158 -msgid "Connected to %s! Press CTRL-C to exit." -msgstr "已連到 %s!按 CTRL-C 退出" +#: internal/cli/monitor/monitor.go:275 +msgid "Connecting to %s. Press CTRL-C to exit." +msgstr "連接 %s 中。按 CTRL-C 結束。" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Core" msgstr "核心" -#: arduino/httpclient/httpclient.go:112 +#: internal/cli/configuration/network.go:127 msgid "Could not connect via HTTP" msgstr "無法通過 HTTP 連接" -#: commands/instances.go:503 +#: commands/instances.go:487 msgid "Could not create index directory" msgstr "無法建立索引目錄" -#: arduino/builder/core.go:41 +#: internal/arduino/builder/core.go:42 msgid "Couldn't deeply cache core build: %[1]s" msgstr "無法深入快取核心編譯:%[1]s" -#: arduino/builder/sizer.go:153 +#: internal/arduino/builder/sizer.go:155 msgid "Couldn't determine program size" msgstr "無法確定程式大小" -#: internal/cli/arguments/sketch.go:34 internal/cli/lib/install.go:109 +#: internal/cli/arguments/sketch.go:37 internal/cli/lib/install.go:111 msgid "Couldn't get current working directory: %v" msgstr "無法取得工作目錄:%v" @@ -485,7 +483,7 @@ msgstr "無法取得工作目錄:%v" msgid "Create a new Sketch" msgstr "建立新 sketch" -#: internal/cli/compile/compile.go:96 +#: internal/cli/compile/compile.go:101 msgid "Create and print a profile configuration from the build." msgstr "從建構中建立並印出設定檔內容" @@ -493,100 +491,100 @@ msgstr "從建構中建立並印出設定檔內容" msgid "Creates a zip file containing all sketch files." msgstr "建立含全部 sketch 檔的 zip 壓縮檔" -#: internal/cli/config/init.go:43 +#: internal/cli/config/init.go:46 msgid "" "Creates or updates the configuration file in the data directory or custom " "directory with the current configuration settings." msgstr "用目前的設定值建立或更新資料或自定義目錄內的設定檔" -#: internal/cli/compile/compile.go:308 +#: internal/cli/compile/compile.go:340 msgid "" "Currently, Build Profiles only support libraries available through Arduino " "Library Manager." msgstr "目前建構方案只支援 Arduino 程式庫管理員所提供的程式庫" -#: internal/cli/debug/debug.go:211 -msgid "Custom configuration for cortex-debug IDE plugin:" -msgstr "cortex-debug IDE plugin 客製化設定:" +#: internal/cli/debug/debug.go:266 +msgid "Custom configuration for %s:" +msgstr "%s的客製化設定:" -#: internal/cli/core/list.go:93 internal/cli/core/search.go:104 -#: internal/cli/outdated/outdated.go:98 +#: internal/cli/feedback/result/rpc.go:146 +#: internal/cli/outdated/outdated.go:119 msgid "DEPRECATED" msgstr "已棄用" -#: internal/cli/daemon/daemon.go:174 +#: internal/cli/daemon/daemon.go:195 msgid "Daemon is now listening on %s:%s" msgstr "背景程式正在監聽 %s:%s" -#: internal/cli/debug/debug.go:51 +#: internal/cli/debug/debug.go:53 msgid "Debug Arduino sketches." msgstr "除錯 Arduino sketch" -#: internal/cli/debug/debug.go:52 +#: internal/cli/debug/debug.go:54 msgid "" "Debug Arduino sketches. (this command opens an interactive gdb session)" msgstr "除錯 Arduino sketch (此命令會開啟互動式 gdb 對話)" -#: internal/cli/debug/debug.go:61 +#: internal/cli/debug/debug.go:70 internal/cli/debug/debug_check.go:51 msgid "Debug interpreter e.g.: %s" msgstr "除錯解譯器,例如:%s" -#: commands/debug/debug_info.go:151 +#: commands/service_debug_config.go:215 msgid "Debugging not supported for board %s" msgstr "不支援 %s 開發板除錯" -#: internal/cli/board/details.go:142 -msgid "Debugging supported:" -msgstr "支援除錯:" - -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Default" msgstr "預設" -#: internal/cli/board/attach.go:108 +#: internal/cli/board/attach.go:115 msgid "Default FQBN set to" msgstr "預設 FQBN 設定為" -#: internal/cli/board/attach.go:107 +#: internal/cli/board/attach.go:114 msgid "Default port set to" msgstr "預設連接埠設定為" -#: internal/cli/cache/clean.go:30 +#: internal/cli/board/attach.go:116 +msgid "Default programmer set to" +msgstr "預設燒錄器設為" + +#: internal/cli/cache/clean.go:32 msgid "Delete Boards/Library Manager download cache." msgstr "刪除開發板/程式庫管理員下載快取" -#: internal/cli/cache/clean.go:31 +#: internal/cli/cache/clean.go:33 msgid "" -"Delete contents of the `directories.downloads` folder, where archive files " -"are staged during installation of libraries and boards platforms." -msgstr "刪除 `directories.downloads` 目錄裏面的內容,內有在安裝程式庫和開發板平台時所暫存的檔案" +"Delete contents of the downloads cache folder, where archive files are " +"staged during installation of libraries and boards platforms." +msgstr "刪除下載快取目錄裏,含有安裝程式庫和開發板平台時存放的資料。" #: internal/cli/config/delete.go:32 internal/cli/config/delete.go:33 msgid "Deletes a settings key and all its sub keys." msgstr "刪除某設定鍵和所有子鍵" -#: internal/cli/lib/search.go:171 +#: internal/cli/lib/search.go:215 msgid "Dependencies: %s" msgstr "相依: %s" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:88 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:106 msgid "Description" msgstr "說明" -#: arduino/builder/builder.go:289 +#: internal/arduino/builder/builder.go:314 msgid "Detecting libraries used..." msgstr "檢測有使用的程式庫..." -#: internal/cli/board/list.go:44 +#: internal/cli/board/list.go:46 msgid "" "Detects and displays a list of boards connected to the current computer." msgstr "檢測並顯示連接到電腦的開發板清單" -#: internal/cli/debug/debug.go:62 +#: internal/cli/debug/debug.go:71 internal/cli/debug/debug.go:72 msgid "Directory containing binaries for debug." msgstr "目錄內有除錯用二進位檔" -#: internal/cli/upload/upload.go:74 +#: internal/cli/upload/upload.go:73 internal/cli/upload/upload.go:74 msgid "Directory containing binaries to upload." msgstr "目錄內有上傳用二進位檔" @@ -600,246 +598,257 @@ msgstr "目錄用來保存生成檔。預設為 ./docs,本目錄必須存在" msgid "Disable completion description for shells that support it" msgstr "關閉 shell 的完成描述功能" -#: internal/cli/board/list.go:189 +#: internal/cli/board/list.go:199 msgid "Disconnected" msgstr "斷開連接" -#: internal/cli/daemon/daemon.go:63 +#: internal/cli/daemon/daemon.go:90 msgid "Display only the provided gRPC calls" msgstr "只顯示提供的 gRPC 呼叫" -#: internal/cli/lib/install.go:61 +#: internal/cli/lib/install.go:62 msgid "Do not install dependencies." msgstr "不安裝相依" -#: internal/cli/lib/install.go:62 +#: internal/cli/lib/install.go:63 msgid "Do not overwrite already installed libraries." msgstr "不要覆蓋已安裝的程式庫" -#: internal/cli/core/install.go:55 +#: internal/cli/core/install.go:56 msgid "Do not overwrite already installed platforms." msgstr "不要覆蓋已安裝的平台" -#: internal/cli/burnbootloader/burnbootloader.go:58 -#: internal/cli/upload/upload.go:79 +#: internal/cli/burnbootloader/burnbootloader.go:64 +#: internal/cli/upload/upload.go:81 msgid "Do not perform the actual upload, just log out actions" msgstr "不要真的上傳,取消動作" -#: internal/cli/daemon/daemon.go:60 +#: internal/cli/daemon/daemon.go:81 msgid "Do not terminate daemon process if the parent process dies" msgstr "就算父程序已 GG,也不要中止背景程式" -#: commands/lib/download.go:60 +#: internal/cli/lib/check_deps.go:52 +msgid "Do not try to update library dependencies if already installed." +msgstr "如果已安裝好切勿試著再更新程式庫相依" + +#: commands/service_library_download.go:92 msgid "Downloading %s" msgstr "下載 %s" -#: arduino/resources/index.go:136 +#: internal/arduino/resources/index.go:137 msgid "Downloading index signature: %s" msgstr "下載索引簽名: %s" -#: arduino/resources/index.go:81 commands/instances.go:543 -#: commands/instances.go:552 +#: commands/instances.go:564 commands/instances.go:582 +#: commands/instances.go:596 commands/instances.go:613 +#: internal/arduino/resources/index.go:82 msgid "Downloading index: %s" msgstr "下載索引: %s" -#: commands/instances.go:439 +#: commands/instances.go:372 msgid "Downloading library %s" msgstr "下載程式庫 %s" -#: commands/instances.go:136 +#: commands/instances.go:54 msgid "Downloading missing tool %s" msgstr "下載缺少的工具 %s" -#: arduino/cores/packagemanager/install_uninstall.go:94 +#: internal/arduino/cores/packagemanager/install_uninstall.go:98 msgid "Downloading packages" msgstr "下載安裝包" -#: arduino/cores/packagemanager/profiles.go:98 +#: internal/arduino/cores/packagemanager/profiles.go:101 msgid "Downloading platform %s" msgstr "下載平台 %s" -#: arduino/cores/packagemanager/profiles.go:178 +#: internal/arduino/cores/packagemanager/profiles.go:177 msgid "Downloading tool %s" msgstr "下載工具 %s" -#: internal/cli/core/download.go:35 internal/cli/core/download.go:36 +#: internal/cli/core/download.go:36 internal/cli/core/download.go:37 msgid "Downloads one or more cores and corresponding tool dependencies." msgstr "下載一或多個核心及工具相依" -#: internal/cli/lib/download.go:35 internal/cli/lib/download.go:36 +#: internal/cli/lib/download.go:36 internal/cli/lib/download.go:37 msgid "Downloads one or more libraries without installing them." msgstr "下載一或多個程式庫, 但不安裝" -#: internal/cli/daemon/daemon.go:61 +#: internal/cli/daemon/daemon.go:84 msgid "Enable debug logging of gRPC calls" msgstr "啟用 gRPC 呼叫的除錯記錄" -#: internal/cli/lib/install.go:64 +#: internal/cli/lib/install.go:65 msgid "Enter a path to zip file" msgstr "輸入 zip 壓縮檔的路徑" -#: internal/cli/lib/install.go:63 +#: internal/cli/lib/install.go:64 msgid "Enter git url for libraries hosted on repositories" msgstr "輸入托管程式庫的 git 位址" -#: commands/sketch/archive.go:107 +#: commands/service_sketch_archive.go:105 msgid "Error adding file to sketch archive" msgstr "將檔案加入 sketch 時出錯" -#: arduino/builder/core.go:147 +#: internal/arduino/builder/core.go:170 msgid "Error archiving built core (caching) in %[1]s: %[2]s" msgstr "在 %[1]s 中儲存編譯核心(快取)時出錯:%[2]s" -#: internal/cli/sketch/archive.go:81 +#: internal/cli/sketch/archive.go:85 msgid "Error archiving: %v" msgstr "錯誤歸檔:%v" -#: commands/sketch/archive.go:95 +#: commands/service_sketch_archive.go:93 msgid "Error calculating relative file path" msgstr "計算相對檔案路徑時出錯" -#: internal/cli/cache/clean.go:45 +#: internal/cli/cache/clean.go:48 msgid "Error cleaning caches: %v" msgstr "清理快取時出錯: %v" -#: internal/cli/compile/compile.go:217 +#: internal/cli/compile/compile.go:225 msgid "Error converting path to absolute: %v" msgstr "將路徑轉換成絕對路徑時出錯: %v" -#: commands/compile/compile.go:335 +#: commands/service_compile.go:420 msgid "Error copying output file %s" msgstr "複製輸出檔 %s 時出錯" +#: internal/cli/config/init.go:106 internal/cli/config/init.go:113 +#: internal/cli/config/init.go:120 internal/cli/config/init.go:134 +#: internal/cli/config/init.go:138 +msgid "Error creating configuration: %v" +msgstr "建立設定檔出錯: %v" + #: internal/cli/instance/instance.go:43 msgid "Error creating instance: %v" msgstr "建立實例時出錯: %v" -#: commands/compile/compile.go:319 +#: commands/service_compile.go:403 msgid "Error creating output dir" msgstr "建立輸出目錄時出錯" -#: commands/sketch/archive.go:83 +#: commands/service_sketch_archive.go:81 msgid "Error creating sketch archive" msgstr "建立 sketch 檔時出錯" -#: internal/cli/sketch/new.go:69 internal/cli/sketch/new.go:81 +#: internal/cli/sketch/new.go:71 internal/cli/sketch/new.go:83 msgid "Error creating sketch: %v" msgstr "建立 sketch 時出錯: %v" -#: internal/cli/board/list.go:79 internal/cli/board/list.go:90 +#: internal/cli/board/list.go:83 internal/cli/board/list.go:97 msgid "Error detecting boards: %v" msgstr "偵測開發板時出錯: %v" -#: internal/cli/core/download.go:68 internal/cli/lib/download.go:65 +#: internal/cli/core/download.go:71 internal/cli/lib/download.go:69 msgid "Error downloading %[1]s: %[2]v" msgstr "下載 %[1]s 出錯: %[2]v" -#: arduino/cores/packagemanager/profiles.go:106 -#: arduino/cores/packagemanager/profiles.go:107 -#: arduino/cores/packagemanager/profiles.go:111 -#: arduino/cores/packagemanager/profiles.go:112 +#: internal/arduino/cores/packagemanager/profiles.go:110 +#: internal/arduino/cores/packagemanager/profiles.go:111 msgid "Error downloading %s" msgstr "下載 %s 出錯" -#: arduino/resources/index.go:82 commands/instances.go:603 +#: commands/instances.go:661 internal/arduino/resources/index.go:83 msgid "Error downloading index '%s'" msgstr "下載索引'%s'時出錯" -#: arduino/resources/index.go:137 +#: internal/arduino/resources/index.go:138 msgid "Error downloading index signature '%s'" msgstr "下載索引簽名 '%s' 出錯" -#: commands/instances.go:451 +#: commands/instances.go:382 commands/instances.go:388 msgid "Error downloading library %s" msgstr "下載程式庫 %s 出錯" -#: arduino/cores/packagemanager/profiles.go:129 -#: arduino/cores/packagemanager/profiles.go:130 +#: internal/arduino/cores/packagemanager/profiles.go:128 +#: internal/arduino/cores/packagemanager/profiles.go:129 msgid "Error downloading platform %s" msgstr "下載平台 %s 出錯" -#: arduino/cores/packagemanager/download.go:127 -#: arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/download.go:127 +#: internal/arduino/cores/packagemanager/profiles.go:179 msgid "Error downloading tool %s" msgstr "下載工具 %s 出錯" -#: internal/cli/debug/debug.go:112 internal/cli/debug/debug.go:144 -#: internal/cli/debug/debug.go:155 +#: internal/cli/debug/debug.go:162 internal/cli/debug/debug.go:195 msgid "Error during Debug: %v" msgstr "除錯時出錯: %v" -#: internal/cli/arguments/port.go:144 -msgid "Error during FQBN detection: %v" -msgstr "FQBN 偵測時出錯: %v" - -#: internal/cli/feedback/feedback.go:244 internal/cli/feedback/feedback.go:250 +#: internal/cli/feedback/feedback.go:236 internal/cli/feedback/feedback.go:242 msgid "Error during JSON encoding of the output: %v" msgstr "輸出 JSON 編碼過程出錯:%v" -#: internal/cli/burnbootloader/burnbootloader.go:72 -#: internal/cli/burnbootloader/burnbootloader.go:85 -#: internal/cli/compile/compile.go:257 internal/cli/compile/compile.go:283 -#: internal/cli/upload/upload.go:100 internal/cli/upload/upload.go:127 +#: internal/cli/burnbootloader/burnbootloader.go:78 +#: internal/cli/burnbootloader/burnbootloader.go:100 +#: internal/cli/compile/compile.go:269 internal/cli/compile/compile.go:311 +#: internal/cli/upload/upload.go:99 internal/cli/upload/upload.go:128 msgid "Error during Upload: %v" msgstr "上傳時出錯: %v" -#: internal/cli/feedback/feedback.go:256 -msgid "Error during YAML encoding of the output: %v" -msgstr "輸出 YAML 編碼過程出錯: %v" +#: internal/cli/arguments/port.go:144 +msgid "Error during board detection" +msgstr "開發板偵測時出現錯誤。" -#: internal/cli/compile/compile.go:354 +#: internal/cli/compile/compile.go:394 msgid "Error during build: %v" msgstr "建構時出錯: %v" -#: internal/cli/core/install.go:80 +#: internal/cli/core/install.go:81 msgid "Error during install: %v" msgstr "安裝時出錯: %v" -#: internal/cli/core/uninstall.go:73 +#: internal/cli/core/uninstall.go:75 msgid "Error during uninstall: %v" msgstr "卸載時出錯: %v" -#: internal/cli/core/upgrade.go:120 +#: internal/cli/core/upgrade.go:136 msgid "Error during upgrade: %v" msgstr "升級時出錯: %v" -#: arduino/resources/index.go:104 arduino/resources/index.go:123 +#: internal/arduino/resources/index.go:105 +#: internal/arduino/resources/index.go:124 msgid "Error extracting %s" msgstr "解開 %s 時出錯" -#: commands/upload/upload.go:373 +#: commands/service_upload.go:449 msgid "Error finding build artifacts" msgstr "尋找建構成品時出錯" -#: internal/cli/debug/debug.go:96 +#: internal/cli/debug/debug.go:139 msgid "Error getting Debug info: %v" msgstr "取得除錯資訊時出錯: %v" -#: commands/sketch/archive.go:59 +#: commands/service_sketch_archive.go:57 msgid "Error getting absolute path of sketch archive" msgstr "取得 sketch 檔絕對路徑時出錯" -#: internal/cli/board/details.go:73 +#: internal/cli/board/details.go:74 msgid "Error getting board details: %v" msgstr "取得開發板細節時出錯: %v" -#: arduino/builder/internal/compilation/database.go:81 +#: internal/arduino/builder/internal/compilation/database.go:82 msgid "Error getting current directory for compilation database: %s" msgstr "取得編譯資料庫所在目錄時出錯: %s" -#: commands/compile/compile.go:257 commands/lib/list.go:108 +#: internal/cli/monitor/monitor.go:105 +msgid "" +"Error getting default port from `sketch.yaml`. Check if you're in the " +"correct sketch folder or provide the --port flag: %s" +msgstr "從 `sketch.yaml` 取得預設連接埠出錯. 請檢查是否在正確的 sketch 目錄下, 或者提供 --port 參數: %s" + +#: commands/service_compile.go:338 commands/service_library_list.go:115 msgid "Error getting information for library %s" msgstr "取得程式庫 %s 資訊時出錯" -#: internal/cli/lib/examples.go:72 +#: internal/cli/lib/examples.go:75 msgid "Error getting libraries info: %v" msgstr "取得程式庫資訊時出錯: %v" -#: internal/cli/arguments/fqbn.go:90 +#: internal/cli/arguments/fqbn.go:96 msgid "Error getting port metadata: %v" msgstr "取得連接埠資訊出錯: %v" -#: internal/cli/monitor/monitor.go:98 +#: internal/cli/monitor/monitor.go:154 msgid "Error getting port settings details: %s" msgstr "取得連接埠設定細節出錯: %s" @@ -847,42 +856,42 @@ msgstr "取得連接埠設定細節出錯: %s" msgid "Error getting user input" msgstr "取得用戶輸入時出錯" -#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:99 +#: internal/cli/instance/instance.go:82 internal/cli/instance/instance.go:100 msgid "Error initializing instance: %v" msgstr "初始化實例時出錯: %v" -#: internal/cli/lib/install.go:145 +#: internal/cli/lib/install.go:148 msgid "Error installing %s: %v" msgstr "安裝 %s 時出錯: %v" -#: internal/cli/lib/install.go:119 +#: internal/cli/lib/install.go:122 msgid "Error installing Git Library: %v" msgstr "安裝 Git 程式庫出錯: %v" -#: internal/cli/lib/install.go:98 +#: internal/cli/lib/install.go:100 msgid "Error installing Zip Library: %v" msgstr "安裝 Zip 程式庫出錯: %v" -#: commands/instances.go:461 +#: commands/instances.go:398 msgid "Error installing library %s" msgstr "安裝程式庫 %s 出錯" -#: arduino/cores/packagemanager/profiles.go:137 -#: arduino/cores/packagemanager/profiles.go:138 +#: internal/arduino/cores/packagemanager/profiles.go:136 +#: internal/arduino/cores/packagemanager/profiles.go:137 msgid "Error installing platform %s" msgstr "安裝 %s 平台出錯" -#: arduino/cores/packagemanager/profiles.go:181 -#: arduino/cores/packagemanager/profiles.go:188 -#: arduino/cores/packagemanager/profiles.go:189 +#: internal/arduino/cores/packagemanager/profiles.go:180 +#: internal/arduino/cores/packagemanager/profiles.go:187 +#: internal/arduino/cores/packagemanager/profiles.go:188 msgid "Error installing tool %s" msgstr "安裝 %s 工具出錯" -#: internal/cli/board/listall.go:63 +#: internal/cli/board/listall.go:66 msgid "Error listing boards: %v" msgstr "列出開發板出錯: %v" -#: internal/cli/lib/list.go:89 +#: internal/cli/lib/list.go:91 msgid "Error listing libraries: %v" msgstr "列出程式庫出錯: %v" @@ -890,44 +899,40 @@ msgstr "列出程式庫出錯: %v" msgid "Error listing platforms: %v" msgstr "列出平台出錯: %v" -#: arduino/errors.go:425 +#: commands/cmderrors/cmderrors.go:424 msgid "Error loading hardware platform" msgstr "載入硬體平台時出錯" -#: arduino/cores/packagemanager/profiles.go:115 -#: arduino/cores/packagemanager/profiles.go:116 +#: internal/arduino/cores/packagemanager/profiles.go:114 +#: internal/arduino/cores/packagemanager/profiles.go:115 msgid "Error loading index %s" msgstr "載入索引 %s 出錯" -#: arduino/resources/index.go:98 +#: internal/arduino/resources/index.go:99 msgid "Error opening %s" msgstr "開啟 %s 時出錯" -#: internal/cli/daemon/daemon.go:85 +#: internal/cli/daemon/daemon.go:111 msgid "Error opening debug logging file: %s" msgstr "打開除錯日誌檔出錯: %s" -#: internal/cli/compile/compile.go:190 +#: internal/cli/compile/compile.go:196 msgid "Error opening source code overrides data file: %v" msgstr "打開原始碼覆寫資料檔時出錯: %v" -#: internal/cli/compile/compile.go:203 +#: internal/cli/compile/compile.go:209 msgid "Error parsing --show-properties flag: %v" msgstr "解析 --show-properties 參數出錯: %v" -#: commands/compile/compile.go:328 +#: commands/service_compile.go:412 msgid "Error reading build directory" msgstr "讀取建構目錄時出錯" -#: configuration/configuration.go:65 -msgid "Error reading config file: %v" -msgstr "讀取設定檔時出錯: %v" - -#: commands/sketch/archive.go:77 +#: commands/service_sketch_archive.go:75 msgid "Error reading sketch files" msgstr "讀取 sketch 檔出錯" -#: internal/cli/lib/check_deps.go:65 +#: internal/cli/lib/check_deps.go:72 msgid "Error resolving dependencies for %[1]s: %[2]s" msgstr "解析 %[1]s 的相依時出錯: %[2]s" @@ -935,203 +940,218 @@ msgstr "解析 %[1]s 的相依時出錯: %[2]s" msgid "Error retrieving core list: %v" msgstr "取得核心列表出錯: %v" -#: arduino/cores/packagemanager/install_uninstall.go:156 +#: internal/arduino/cores/packagemanager/install_uninstall.go:160 msgid "Error rolling-back changes: %s" msgstr "回復更改時出錯: %s" -#: arduino/resources/index.go:164 arduino/resources/index.go:176 +#: internal/arduino/resources/index.go:165 +#: internal/arduino/resources/index.go:177 msgid "Error saving downloaded index" msgstr "儲存下載的索引出錯" -#: arduino/resources/index.go:171 arduino/resources/index.go:180 +#: internal/arduino/resources/index.go:172 +#: internal/arduino/resources/index.go:181 msgid "Error saving downloaded index signature" msgstr "儲存下載的索引簽名時出錯" -#: internal/cli/board/search.go:60 +#: internal/cli/board/search.go:63 msgid "Error searching boards: %v" msgstr "搜尋開發板時出錯: %v" -#: internal/cli/lib/search.go:79 +#: internal/cli/lib/search.go:126 msgid "Error searching for Libraries: %v" msgstr "搜尋程式庫時出錯: %v" -#: internal/cli/core/search.go:80 +#: internal/cli/core/search.go:82 msgid "Error searching for platforms: %v" msgstr "搜尋平台時出錯: %v" -#: arduino/builder/internal/compilation/database.go:66 +#: internal/arduino/builder/internal/compilation/database.go:67 msgid "Error serializing compilation database: %s" msgstr "序列化編譯資料庫時出錯: %s" -#: internal/cli/board/list.go:82 +#: internal/cli/monitor/monitor.go:224 +msgid "Error setting raw mode: %s" +msgstr "設定原始模式出錯: %s" + +#: internal/cli/config/set.go:67 internal/cli/config/set.go:74 +msgid "Error setting value: %v" +msgstr "設定鍵值時出錯: %v" + +#: internal/cli/board/list.go:86 msgid "Error starting discovery: %v" msgstr "啟動探索時出錯:%v" -#: internal/cli/lib/uninstall.go:63 +#: internal/cli/lib/uninstall.go:67 msgid "Error uninstalling %[1]s: %[2]v" msgstr "卸載 %[1]s 時出錯: %[2]v" -#: internal/cli/lib/search.go:68 internal/cli/lib/update_index.go:54 +#: internal/cli/lib/search.go:113 internal/cli/lib/update_index.go:59 msgid "Error updating library index: %v" msgstr "更新程式庫索引時出錯: %v" -#: internal/cli/lib/upgrade.go:71 +#: internal/cli/lib/upgrade.go:75 msgid "Error upgrading libraries" msgstr "更新程式庫時出錯" -#: arduino/cores/packagemanager/install_uninstall.go:151 +#: internal/arduino/cores/packagemanager/install_uninstall.go:155 msgid "Error upgrading platform: %s" msgstr "更新平台時出錯: %s" -#: arduino/resources/index.go:146 arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:147 +#: internal/arduino/resources/index.go:153 msgid "Error verifying signature" msgstr "驗證簽名時出錯" -#: arduino/builder/internal/detector/detector.go:365 +#: internal/arduino/builder/internal/detector/detector.go:369 msgid "Error while detecting libraries included by %[1]s" msgstr "偵測 %[1]s 所包含的程式庫時出錯" -#: arduino/builder/sizer.go:78 arduino/builder/sizer.go:87 -#: arduino/builder/sizer.go:90 arduino/builder/sizer.go:109 -#: arduino/builder/sizer.go:214 arduino/builder/sizer.go:224 -#: arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:80 internal/arduino/builder/sizer.go:89 +#: internal/arduino/builder/sizer.go:92 internal/arduino/builder/sizer.go:111 +#: internal/arduino/builder/sizer.go:218 internal/arduino/builder/sizer.go:228 +#: internal/arduino/builder/sizer.go:232 msgid "Error while determining sketch size: %s" msgstr "確定 sketch 大小時出錯: %s" -#: arduino/builder/internal/compilation/database.go:69 +#: internal/arduino/builder/internal/compilation/database.go:70 msgid "Error writing compilation database: %s" msgstr "寫入編譯資料庫時出錯: %s" +#: internal/cli/config/config.go:84 internal/cli/config/config.go:91 +msgid "Error writing to file: %v" +msgstr "寫入檔案時出錯: %v" + #: internal/cli/completion/completion.go:56 msgid "Error: command description is not supported by %v" msgstr "錯誤: %v 不支持命令說明" -#: internal/cli/compile/compile.go:196 +#: internal/cli/compile/compile.go:202 msgid "Error: invalid source code overrides data file: %v" msgstr "錯誤: 無效原始碼覆蓋了資料檔: %v" -#: internal/cli/board/list.go:96 +#: internal/cli/board/list.go:104 msgid "Event" msgstr "事件" -#: internal/cli/lib/examples.go:120 +#: internal/cli/lib/examples.go:123 msgid "Examples for library %s" msgstr "%s 程式庫的範例" -#: internal/cli/usage.go:28 +#: internal/cli/usage.go:24 msgid "Examples:" msgstr "範例:" -#: internal/cli/debug/debug.go:180 +#: internal/cli/debug/debug.go:233 msgid "Executable to debug" msgstr "可執行來除錯" -#: commands/debug/debug_info.go:131 commands/upload/upload.go:379 +#: commands/service_debug_config.go:181 commands/service_upload.go:455 msgid "Expected compiled sketch in directory %s, but is a file instead" msgstr "%s 目錄內應該有已編譯的 sketch,卻只有個檔案" -#: internal/cli/board/attach.go:34 internal/cli/board/details.go:40 -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 -#: internal/cli/board/listall.go:85 internal/cli/board/search.go:82 +#: internal/cli/board/attach.go:35 internal/cli/board/details.go:41 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 +#: internal/cli/board/listall.go:84 internal/cli/board/search.go:85 msgid "FQBN" msgstr "FQBN" -#: internal/cli/board/details.go:139 +#: internal/cli/board/details.go:140 msgid "FQBN:" msgstr "FQBN:" -#: commands/upload/upload.go:502 +#: commands/service_upload.go:578 msgid "Failed chip erase" msgstr "晶片擦除失敗" -#: commands/upload/upload.go:509 +#: commands/service_upload.go:585 msgid "Failed programming" msgstr "燒錄失敗" -#: commands/upload/upload.go:505 +#: commands/service_upload.go:581 msgid "Failed to burn bootloader" msgstr "燒錄 bootloader 失敗" -#: commands/instances.go:166 +#: commands/instances.go:88 msgid "Failed to create data directory" msgstr "建立資料目錄失敗" -#: commands/instances.go:156 +#: commands/instances.go:77 msgid "Failed to create downloads directory" msgstr "建立下載檔案夾失敗" -#: internal/cli/daemon/daemon.go:129 +#: internal/cli/daemon/daemon.go:150 msgid "Failed to listen on TCP port: %[1]s. %[2]s is an invalid port." msgstr "監聽 TCP 埠失敗: %[1]s. %[2]s 是無效連接埠" -#: internal/cli/daemon/daemon.go:124 +#: internal/cli/daemon/daemon.go:145 msgid "Failed to listen on TCP port: %[1]s. %[2]s is unknown name." msgstr "監聽 TCP 埠失敗: %[1]s. %[2]s 是未知名稱" -#: internal/cli/daemon/daemon.go:136 +#: internal/cli/daemon/daemon.go:157 msgid "Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v" msgstr "監聽 TCP 埠: %[1]s 失敗, 未預期的錯誤: %[2]v" -#: internal/cli/daemon/daemon.go:134 +#: internal/cli/daemon/daemon.go:155 msgid "Failed to listen on TCP port: %s. Address already in use." msgstr "監聽 TCP 埠: %s 失敗。位址已被使用" -#: commands/upload/upload.go:513 +#: commands/service_upload.go:589 msgid "Failed uploading" msgstr "上傳失敗" -#: internal/cli/board/details.go:186 +#: internal/cli/board/details.go:188 msgid "File:" msgstr "檔案:" -#: commands/compile/compile.go:131 +#: commands/service_compile.go:163 msgid "" "Firmware encryption/signing requires all the following properties to be " "defined: %s" msgstr "韌體加密/簽名需要定義以下全部屬性: %s" -#: commands/daemon/debug.go:40 +#: commands/service_debug.go:187 msgid "First message must contain debug request, not data" msgstr "第一則訊息必須包含除錯請求,而不是資料" -#: internal/cli/arguments/arguments.go:47 +#: internal/cli/arguments/arguments.go:49 msgid "Flag %[1]s is mandatory when used in conjunction with: %[2]s" msgstr "參數 %[1]s 當與:%[2]s 一起使用時必須強制使用" -#: internal/cli/usage.go:30 +#: internal/cli/usage.go:26 msgid "Flags:" msgstr "旗標參數:" -#: internal/cli/arguments/pre_post_script.go:37 +#: internal/cli/arguments/pre_post_script.go:38 msgid "" "Force run of post-install scripts (if the CLI is not running interactively)." msgstr "強制執行安裝後指令檔 (如果 CLI 未以互動方式執行)" -#: internal/cli/arguments/pre_post_script.go:39 +#: internal/cli/arguments/pre_post_script.go:40 msgid "" "Force run of pre-uninstall scripts (if the CLI is not running " "interactively)." msgstr "強制執行 pre-uninstall 命令 (如果 CLI 在非互動狀態)." -#: internal/cli/arguments/pre_post_script.go:38 +#: internal/cli/arguments/pre_post_script.go:39 msgid "" "Force skip of post-install scripts (if the CLI is running interactively)." msgstr "強制跳過安裝後指令檔 (如果 CLI 以互動方式運行)" -#: internal/cli/arguments/pre_post_script.go:40 +#: internal/cli/arguments/pre_post_script.go:41 msgid "" "Force skip of pre-uninstall scripts (if the CLI is running interactively)." msgstr "強制跳過 pre-uninstall 命令 (如果 CLI 在互動狀態)." -#: arduino/errors.go:840 +#: commands/cmderrors/cmderrors.go:839 msgid "Found %d platforms matching \"%s\": %s" msgstr "找到 %d 平台有符合 \"%s\": %s" -#: internal/cli/arguments/fqbn.go:37 +#: internal/cli/arguments/fqbn.go:39 msgid "Fully Qualified Board Name, e.g.: arduino:avr:uno" msgstr "完全合格的開發板名,例如:arduino:avr:uno" -#: commands/debug/debug.go:183 +#: commands/service_debug.go:321 msgid "GDB server '%s' is not supported" msgstr "不支援 GDB 伺服器 '%s'" @@ -1148,311 +1168,319 @@ msgstr "已生成指令檔" msgid "Generates completion scripts for various shells" msgstr "已為各種 shell 生成指令檔" -#: arduino/builder/builder.go:308 +#: internal/arduino/builder/builder.go:334 msgid "Generating function prototypes..." msgstr "生成函式原型..." -#: internal/cli/usage.go:31 +#: internal/cli/config/get.go:35 internal/cli/config/get.go:36 +msgid "Gets a settings key value." +msgstr "取得設定的鍵值。" + +#: internal/cli/usage.go:27 msgid "Global Flags:" msgstr "全域旗標:" -#: arduino/builder/sizer.go:163 +#: internal/arduino/builder/sizer.go:166 msgid "" "Global variables use %[1]s bytes (%[3]s%%) of dynamic memory, leaving %[4]s " "bytes for local variables. Maximum is %[2]s bytes." msgstr "全域變數使用 %[1]s 位元組 (%[3]s%%) 的動態記憶體, 保留 %[4]s 位元組給區域變數. 最大 %[2]s 位元組" -#: arduino/builder/sizer.go:169 +#: internal/arduino/builder/sizer.go:172 msgid "Global variables use %[1]s bytes of dynamic memory." msgstr "全域變數使用 %[1]s 位元組的動態記憶體" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/monitor/monitor.go:232 -#: internal/cli/outdated/outdated.go:83 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/monitor/monitor.go:331 +#: internal/cli/outdated/outdated.go:101 msgid "ID" msgstr "ID" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Id" msgstr "Id" -#: internal/cli/board/details.go:153 +#: internal/cli/board/details.go:154 msgid "Identification properties:" msgstr "標識屬性:" -#: internal/cli/compile/compile.go:131 +#: internal/cli/compile/compile.go:135 msgid "If set built binaries will be exported to the sketch folder." msgstr "一經設定,建構的二進位檔將導出到 sketch 檔案夾" -#: internal/cli/core/list.go:45 +#: internal/cli/core/list.go:46 msgid "" "If set return all installable and installed cores, including manually " "installed." msgstr "一經設定,傳回所有可安裝和已安裝的核心,包括手動安裝的" -#: internal/cli/lib/list.go:53 +#: internal/cli/lib/list.go:55 msgid "Include built-in libraries (from platforms and IDE) in listing." msgstr "列表內包含內建程式庫 (來自平台和 IDE)" -#: internal/cli/sketch/archive.go:49 +#: internal/cli/sketch/archive.go:51 msgid "Includes %s directory in the archive." msgstr "存檔中包含 %s 目錄" -#: internal/cli/lib/install.go:65 +#: internal/cli/lib/install.go:66 msgid "Install libraries in the IDE-Builtin directory" msgstr "安裝程式庫到 IDE-Builtin 目錄" -#: internal/cli/core/list.go:89 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:85 +#: internal/cli/core/list.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:103 msgid "Installed" msgstr "已安裝" -#: commands/lib/install.go:140 +#: commands/service_library_install.go:201 msgid "Installed %s" msgstr "已安裝 %s" -#: arduino/cores/packagemanager/install_uninstall.go:331 -#: commands/lib/install.go:126 +#: commands/service_library_install.go:184 +#: internal/arduino/cores/packagemanager/install_uninstall.go:335 msgid "Installing %s" msgstr "安裝 %s..." -#: commands/instances.go:459 +#: commands/instances.go:396 msgid "Installing library %s" msgstr "安裝程式庫 %s" -#: arduino/cores/packagemanager/install_uninstall.go:117 -#: arduino/cores/packagemanager/profiles.go:135 +#: internal/arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/profiles.go:134 msgid "Installing platform %s" msgstr "安裝平台 %s " -#: arduino/cores/packagemanager/profiles.go:186 +#: internal/arduino/cores/packagemanager/profiles.go:185 msgid "Installing tool %s" msgstr "安裝工具 %s" -#: internal/cli/core/install.go:37 internal/cli/core/install.go:38 +#: internal/cli/core/install.go:38 internal/cli/core/install.go:39 msgid "Installs one or more cores and corresponding tool dependencies." msgstr "安裝一或多個核心和工具相依" -#: internal/cli/lib/install.go:45 internal/cli/lib/install.go:46 +#: internal/cli/lib/install.go:46 internal/cli/lib/install.go:47 msgid "Installs one or more specified libraries into the system." msgstr "安裝一或多個指定程式庫到系統中" -#: arduino/builder/internal/detector/detector.go:391 +#: internal/arduino/builder/internal/detector/detector.go:394 msgid "Internal error in cache" msgstr "快取的內部錯誤" -#: arduino/errors.go:378 +#: commands/cmderrors/cmderrors.go:377 msgid "Invalid '%[1]s' property: %[2]s" msgstr "無效的 '%[1]s' 屬性:%[2]s" -#: internal/cli/cli.go:250 -msgid "" -"Invalid Call : should show Help, but it is available only in TEXT mode." -msgstr "無效呼叫: 應顯示求助,但只在文字模式下能用" - -#: arduino/errors.go:62 +#: commands/cmderrors/cmderrors.go:60 msgid "Invalid FQBN" msgstr "無效的 FQBN" -#: internal/cli/daemon/daemon.go:147 +#: internal/cli/daemon/daemon.go:168 msgid "Invalid TCP address: port is missing" msgstr "無效的 TCP 位址:缺少連接埠" -#: arduino/errors.go:80 +#: commands/cmderrors/cmderrors.go:78 msgid "Invalid URL" msgstr "無效的網址" -#: commands/instances.go:274 +#: commands/instances.go:184 msgid "Invalid additional URL: %v" msgstr "無效的額外網址: %v" -#: arduino/resources/index.go:110 -msgid "Invalid archive: file %{1}s not found in archive %{2}s" -msgstr "無效存檔: 檔案 %{1}s 不在存檔%{2}s 裏" +#: internal/arduino/resources/index.go:111 +msgid "Invalid archive: file %[1]s not found in archive %[2]s" +msgstr "無效的存檔:%[1]s 不在 %[2]s 存檔裏" -#: internal/cli/core/download.go:56 internal/cli/core/install.go:65 -#: internal/cli/core/uninstall.go:57 internal/cli/core/upgrade.go:93 -#: internal/cli/lib/download.go:54 internal/cli/lib/uninstall.go:53 +#: internal/cli/core/download.go:59 internal/cli/core/install.go:66 +#: internal/cli/core/uninstall.go:58 internal/cli/core/upgrade.go:108 +#: internal/cli/lib/download.go:58 internal/cli/lib/uninstall.go:56 msgid "Invalid argument passed: %v" msgstr "傳送的參數無效: %v" -#: commands/compile/compile.go:205 +#: commands/service_compile.go:282 msgid "Invalid build properties" msgstr "無效的建構屬性" -#: arduino/builder/sizer.go:249 +#: internal/arduino/builder/sizer.go:253 msgid "Invalid data size regexp: %s" msgstr "無效的資料大小正規表示式: %s" -#: arduino/builder/sizer.go:255 +#: internal/arduino/builder/sizer.go:259 msgid "Invalid eeprom size regexp: %s" msgstr "無效的 eeprom 大小正規表示式: %s" -#: arduino/errors.go:48 +#: commands/instances.go:597 +msgid "Invalid index URL: %s" +msgstr "無效的索引網址: 1%s" + +#: commands/cmderrors/cmderrors.go:46 msgid "Invalid instance" msgstr "無效的實例" -#: internal/cli/core/upgrade.go:99 +#: internal/cli/core/upgrade.go:114 msgid "Invalid item %s" msgstr "無效的項目 %s" -#: arduino/errors.go:98 +#: commands/cmderrors/cmderrors.go:96 msgid "Invalid library" msgstr "無效的程式庫" -#: configuration/network.go:63 +#: internal/cli/cli.go:265 +msgid "Invalid logging level: %s" +msgstr "無效的日誌層級: %s" + +#: commands/instances.go:614 +msgid "Invalid network configuration: %s" +msgstr "網路設定無效: %s" + +#: internal/cli/configuration/network.go:83 msgid "Invalid network.proxy '%[1]s': %[2]s" msgstr "無效的 '%[1]s' 網路代理 network.proxy: %[2]s" -#: internal/cli/cli.go:217 -msgid "Invalid option for --log-level: %s" -msgstr "--log-level: %s 選項無效" - -#: internal/cli/cli.go:229 +#: internal/cli/cli.go:222 msgid "Invalid output format: %s" msgstr "無效的輸出格式: %s" -#: commands/instances.go:555 +#: commands/instances.go:581 msgid "Invalid package index in %s" msgstr "%s 內的套件索引無效" -#: internal/cli/core/uninstall.go:62 +#: internal/cli/core/uninstall.go:63 msgid "Invalid parameter %s: version not allowed" msgstr "無效 %s 參數: 版本不允許" -#: commands/board/list.go:79 +#: commands/service_board_identify.go:169 msgid "Invalid pid value: '%s'" msgstr "無效的 pid 值: '%s'" -#: arduino/errors.go:222 +#: commands/cmderrors/cmderrors.go:220 msgid "Invalid profile" msgstr "無效的設定檔" -#: commands/monitor/monitor.go:145 +#: commands/service_monitor.go:270 msgid "Invalid recipe in platform.txt" msgstr "platform.txt 中的方法無效" -#: arduino/builder/sizer.go:239 +#: internal/arduino/builder/sizer.go:243 msgid "Invalid size regexp: %s" msgstr "無效的大小正規表示式: %s" -#: internal/cli/core/search.go:124 -msgid "Invalid timeout: %s" -msgstr "無效的超時: %s" +#: main.go:86 +msgid "Invalid value in configuration" +msgstr "設定裏有無效的數值" -#: arduino/errors.go:116 +#: commands/cmderrors/cmderrors.go:114 msgid "Invalid version" msgstr "無效的版本" -#: commands/board/list.go:76 +#: commands/service_board_identify.go:166 msgid "Invalid vid value: '%s'" msgstr "無效的 vid 值: '%s'" -#: internal/cli/compile/compile.go:126 +#: internal/cli/compile/compile.go:132 msgid "" "Just produce the compilation database, without actually compiling. All build" " commands are skipped except pre* hooks." msgstr "只產生編譯資料庫,不實際編譯。跳過除 pre* 以外的所有建構指令" -#: internal/cli/lib/list.go:38 +#: internal/cli/lib/list.go:39 msgid "LIBNAME" msgstr "程式庫名" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "LIBRARY" msgstr "程式庫" -#: internal/cli/lib/download.go:34 internal/cli/lib/examples.go:42 -#: internal/cli/lib/search.go:40 internal/cli/lib/uninstall.go:34 +#: internal/cli/lib/download.go:35 internal/cli/lib/examples.go:43 +#: internal/cli/lib/uninstall.go:35 msgid "LIBRARY_NAME" msgstr "程式庫_名" -#: internal/cli/core/list.go:89 internal/cli/outdated/outdated.go:86 +#: internal/cli/core/list.go:117 internal/cli/outdated/outdated.go:104 msgid "Latest" msgstr "最新的" -#: arduino/builder/libraries.go:91 +#: internal/arduino/builder/libraries.go:92 msgid "Library %[1]s has been declared precompiled:" msgstr "程式庫 %[1]s 已聲明為預編譯:" -#: arduino/libraries/librariesmanager/install.go:135 -#: commands/lib/install.go:92 +#: commands/service_library_install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:130 msgid "" "Library %[1]s is already installed, but with a different version: %[2]s" msgstr "程式庫 %[1]s 已經安裝, 但版本不同: %[2]s" -#: commands/lib/upgrade.go:59 +#: commands/service_library_upgrade.go:137 msgid "Library %s is already at the latest version" msgstr "程式庫 %s 已是最新版" -#: commands/lib/uninstall.go:39 +#: commands/service_library_uninstall.go:63 msgid "Library %s is not installed" msgstr "程式庫 %s 未安裝" -#: commands/instances.go:445 +#: commands/instances.go:375 msgid "Library %s not found" msgstr "未找到程式庫 %s " -#: arduino/errors.go:446 +#: commands/cmderrors/cmderrors.go:445 msgid "Library '%s' not found" msgstr "未找到程式庫 '%s'" -#: arduino/builder/internal/detector/detector.go:464 +#: internal/arduino/builder/internal/detector/detector.go:471 msgid "" "Library can't use both '%[1]s' and '%[2]s' folders. Double check in '%[3]s'." msgstr "程式庫不能同時用'%[1]s'和'%[2]s'檔案夾。再檢查 '%[3]s'" -#: arduino/errors.go:575 +#: commands/cmderrors/cmderrors.go:574 msgid "Library install failed" msgstr "程式庫安裝失敗" -#: commands/lib/install.go:150 commands/lib/install.go:160 +#: commands/service_library_install.go:235 +#: commands/service_library_install.go:275 msgid "Library installed" msgstr "程式庫已安裝" -#: internal/cli/lib/search.go:161 +#: internal/cli/lib/search.go:205 msgid "License: %s" msgstr "許可證: %s" -#: arduino/builder/builder.go:416 +#: internal/arduino/builder/builder.go:437 msgid "Linking everything together..." msgstr "將所有內容鏈接在一起..." -#: internal/cli/board/listall.go:39 +#: internal/cli/board/listall.go:40 msgid "" "List all boards that have the support platform installed. You can search\n" "for a specific board if you specify the board name" msgstr "列出已安裝被支援平台的所有開發板。輸入開發板名,也可進行搜尋" -#: internal/cli/board/listall.go:38 +#: internal/cli/board/listall.go:39 msgid "List all known boards and their corresponding FQBN." msgstr "列出所有已知開發板及其相應的 FQBN" -#: internal/cli/board/list.go:43 +#: internal/cli/board/list.go:45 msgid "List connected boards." msgstr "列出已連接的開發板" -#: internal/cli/arguments/fqbn.go:42 +#: internal/cli/arguments/fqbn.go:44 msgid "" "List of board options separated by commas. Or can be used multiple times for" " multiple options." msgstr "列出開發板選項列表。可多選項多次使用" -#: internal/cli/compile/compile.go:104 +#: internal/cli/compile/compile.go:110 msgid "" "List of custom build properties separated by commas. Or can be used multiple" " times for multiple properties." msgstr "列出自定義屬性列表。可多屬性多次使用" -#: internal/cli/lib/list.go:55 +#: internal/cli/lib/list.go:57 msgid "List updatable libraries." msgstr "列出可更新的程式庫" -#: internal/cli/core/list.go:44 +#: internal/cli/core/list.go:45 msgid "List updatable platforms." msgstr "列出可更新的平台" -#: internal/cli/board/board.go:33 +#: internal/cli/board/board.go:32 msgid "Lists all connected boards." msgstr "列出所有連接的開發板" @@ -1460,115 +1488,121 @@ msgstr "列出所有連接的開發板" msgid "Lists cores and libraries that can be upgraded" msgstr "列出可升級的核心和程式庫" -#: commands/instances.go:307 commands/instances.go:318 -#: commands/instances.go:418 +#: commands/instances.go:222 commands/instances.go:233 +#: commands/instances.go:343 msgid "Loading index file: %v" msgstr "載入索引檔: %v" -#: internal/cli/lib/list.go:136 internal/cli/outdated/outdated.go:87 +#: internal/cli/lib/list.go:138 internal/cli/outdated/outdated.go:105 msgid "Location" msgstr "位置" -#: arduino/builder/sizer.go:204 +#: internal/arduino/builder/sizer.go:208 msgid "Low memory available, stability problems may occur." msgstr "記憶體低容量,可能影響穩定性" -#: internal/cli/lib/search.go:156 +#: internal/cli/lib/search.go:200 msgid "Maintainer: %s" msgstr "維護者: %s" -#: internal/cli/arguments/discovery_timeout.go:31 +#: internal/cli/compile/compile.go:140 +msgid "" +"Max number of parallel compiles. If set to 0 the number of available CPUs " +"cores will be used." +msgstr "平行編譯最大數. 如設為 0 將使用 CPU 的全部核心." + +#: internal/cli/arguments/discovery_timeout.go:32 msgid "Max time to wait for port discovery, e.g.: 30s, 1m" msgstr "等待連接埠探尋的最長時間,例如:30s, 1m" -#: internal/cli/cli.go:110 +#: internal/cli/cli.go:170 msgid "" "Messages with this level and above will be logged. Valid levels are: %s" msgstr "記錄此等級含以上的訊息。有效等級為 %s" -#: arduino/builder/internal/detector/detector.go:459 +#: internal/arduino/builder/internal/detector/detector.go:466 msgid "Missing '%[1]s' from library in %[2]s" msgstr "%[2]s 的程式庫缺少 '%[1]s'" -#: arduino/errors.go:171 +#: commands/cmderrors/cmderrors.go:169 msgid "Missing FQBN (Fully Qualified Board Name)" msgstr "缺少 FQBN (完全合格開發板名)" -#: arduino/errors.go:262 +#: commands/cmderrors/cmderrors.go:260 msgid "Missing port" msgstr "缺少連接埠" -#: arduino/errors.go:238 +#: commands/cmderrors/cmderrors.go:236 msgid "Missing port address" msgstr "缺少連接埠地址" -#: arduino/errors.go:250 +#: commands/cmderrors/cmderrors.go:248 msgid "Missing port protocol" msgstr "缺少連接埠協議" -#: arduino/errors.go:288 +#: commands/cmderrors/cmderrors.go:286 msgid "Missing programmer" msgstr "缺少燒錄器" #: internal/cli/upload/upload.go:162 msgid "Missing required upload field: %s" -msgstr "" +msgstr "缺少必要的上傳欄位: %s" -#: arduino/builder/sizer.go:243 +#: internal/arduino/builder/sizer.go:247 msgid "Missing size regexp" msgstr "缺少大小正規表示式" -#: arduino/errors.go:498 +#: commands/cmderrors/cmderrors.go:497 msgid "Missing sketch path" msgstr "缺少 sketch 路徑" -#: arduino/errors.go:359 +#: commands/cmderrors/cmderrors.go:358 msgid "Monitor '%s' not found" msgstr "監視器 '%s' 找不到" -#: internal/cli/monitor/monitor.go:141 +#: internal/cli/monitor/monitor.go:261 msgid "Monitor port settings:" msgstr "監視連接埠設定:" -#: arduino/builder/internal/detector/detector.go:153 +#: internal/arduino/builder/internal/detector/detector.go:156 msgid "Multiple libraries were found for \"%[1]s\"" msgstr "找到了多個 “%[1]s” 程式庫" -#: internal/cli/board/details.go:214 internal/cli/core/list.go:89 -#: internal/cli/core/search.go:100 internal/cli/lib/list.go:136 -#: internal/cli/outdated/outdated.go:84 +#: internal/cli/board/details.go:216 internal/cli/core/list.go:117 +#: internal/cli/core/search.go:117 internal/cli/lib/list.go:138 +#: internal/cli/outdated/outdated.go:102 msgid "Name" msgstr "名" -#: internal/cli/lib/search.go:135 +#: internal/cli/lib/search.go:179 msgid "Name: \"%s\"" msgstr "名: “%s”" -#: internal/cli/upload/upload.go:221 +#: internal/cli/upload/upload.go:238 msgid "New upload port: %[1]s (%[2]s)" msgstr "新上傳連接埠: %[1]s (%[2]s)" -#: internal/cli/board/list.go:122 +#: internal/cli/board/list.go:132 msgid "No boards found." msgstr "沒找到開發板" -#: internal/cli/board/attach.go:105 -msgid "No default port or FQBN set" -msgstr "未設定預設連接埠或 FQBN" +#: internal/cli/board/attach.go:112 +msgid "No default port, FQBN or programmer set" +msgstr "未預設埠號, FQBN 或者燒錄器" -#: internal/cli/lib/examples.go:105 +#: internal/cli/lib/examples.go:108 msgid "No libraries found." msgstr "沒找到程式庫" -#: internal/cli/lib/list.go:128 +#: internal/cli/lib/list.go:130 msgid "No libraries installed." msgstr "沒安裝程式庫" -#: internal/cli/lib/search.go:124 +#: internal/cli/lib/search.go:168 msgid "No libraries matching your search." msgstr "沒有你想找的程式庫" -#: internal/cli/lib/search.go:130 +#: internal/cli/lib/search.go:174 msgid "" "No libraries matching your search.\n" "Did you mean...\n" @@ -1576,178 +1610,192 @@ msgstr "" "沒有符合你想找的程式庫\n" "你的意思是...\n" -#: internal/cli/lib/list.go:126 +#: internal/cli/lib/list.go:128 msgid "No libraries update is available." msgstr "沒的程式庫更新檔" -#: arduino/errors.go:276 +#: commands/cmderrors/cmderrors.go:274 msgid "No monitor available for the port protocol %s" msgstr "沒有可用於連接埠協議 %s 的監視器" -#: internal/cli/outdated/outdated.go:77 +#: internal/cli/outdated/outdated.go:95 msgid "No outdated platforms or libraries found." msgstr "沒找到已過時的平台或程式庫" -#: internal/cli/core/list.go:86 +#: internal/cli/core/list.go:114 msgid "No platforms installed." msgstr "沒安裝任何平台" -#: internal/cli/core/search.go:110 +#: internal/cli/core/search.go:113 msgid "No platforms matching your search." msgstr "沒有你想找的平台" -#: commands/upload/upload.go:458 +#: commands/service_upload.go:534 msgid "No upload port found, using %s as fallback" msgstr "沒找到上傳連接埠,使用 %s 作為後援" -#: arduino/errors.go:465 +#: commands/cmderrors/cmderrors.go:464 msgid "No valid dependencies solution found" msgstr "找不到有效的相依解決方案" -#: arduino/builder/sizer.go:194 +#: internal/arduino/builder/sizer.go:198 msgid "Not enough memory; see %[1]s for tips on reducing your footprint." msgstr "記憶體不足;有關減少用量的方法,請參見 %[1]s" -#: arduino/builder/internal/detector/detector.go:156 +#: internal/arduino/builder/internal/detector/detector.go:159 msgid "Not used: %[1]s" msgstr "未使用: %[1]s" -#: internal/cli/board/details.go:185 +#: internal/cli/board/details.go:187 msgid "OS:" msgstr "作業系統:" -#: internal/cli/board/details.go:147 +#: internal/cli/board/details.go:145 msgid "Official Arduino board:" msgstr "Arduino 官方開發板:" -#: internal/cli/lib/search.go:50 +#: internal/cli/lib/search.go:98 msgid "" "Omit library details far all versions except the latest (produce a more " "compact JSON output)." msgstr "省略程式庫中除最新版本以外的所有版本(產出更精簡的 JSON )" -#: internal/cli/monitor/monitor.go:58 internal/cli/monitor/monitor.go:59 +#: internal/cli/monitor/monitor.go:59 internal/cli/monitor/monitor.go:60 msgid "Open a communication port with a board." msgstr "開啟開發板的通信埠" -#: internal/cli/board/details.go:197 +#: internal/cli/board/details.go:200 msgid "Option:" msgstr "選項:" -#: internal/cli/compile/compile.go:114 +#: internal/cli/compile/compile.go:120 msgid "" "Optional, can be: %s. Used to tell gcc which warning level to use (-W flag)." msgstr "選項,可以是:%s。用來告訴 gcc 使用哪個警告級別 (-W 參數)" -#: internal/cli/compile/compile.go:127 +#: internal/cli/compile/compile.go:133 msgid "Optional, cleanup the build folder and do not use any cached build." msgstr "選項,清理建構用的檔案夾且不使用任何快取" -#: internal/cli/compile/compile.go:124 +#: internal/cli/compile/compile.go:130 msgid "" "Optional, optimize compile output for debugging, rather than for release." msgstr "選項,優化編譯用於除錯的輸出,還不到發佈用" -#: internal/cli/compile/compile.go:116 +#: internal/cli/compile/compile.go:122 msgid "Optional, suppresses almost every output." msgstr "選項,禁止全部輸出" -#: internal/cli/compile/compile.go:115 internal/cli/upload/upload.go:77 +#: internal/cli/compile/compile.go:121 internal/cli/upload/upload.go:79 msgid "Optional, turns on verbose mode." msgstr "選項,開啟詳細模式" -#: internal/cli/compile/compile.go:132 +#: internal/cli/compile/compile.go:136 msgid "" "Optional. Path to a .json file that contains a set of replacements of the " "sketch source code." msgstr "選項, 包含一組替代 sketch 原始碼的 .json 檔的路徑" -#: internal/cli/compile/compile.go:106 +#: internal/cli/compile/compile.go:112 msgid "" "Override a build property with a custom value. Can be used multiple times " "for multiple properties." msgstr "用自定義值替代建構屬性。可多次使用多個屬性" -#: internal/cli/config/init.go:57 +#: internal/cli/debug/debug.go:75 internal/cli/debug/debug_check.go:53 +msgid "" +"Override an debug property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "用自定義值替代除錯屬性。可多次使用多個屬性" + +#: internal/cli/burnbootloader/burnbootloader.go:61 +#: internal/cli/upload/upload.go:77 +msgid "" +"Override an upload property with a custom value. Can be used multiple times " +"for multiple properties." +msgstr "用自定義值替代上載屬性。可多次使用多個屬性" + +#: internal/cli/config/init.go:62 msgid "Overwrite existing config file." msgstr "覆蓋現有的設定檔" -#: internal/cli/sketch/archive.go:50 +#: internal/cli/sketch/archive.go:52 msgid "Overwrites an already existing archive" msgstr "覆蓋已存在的存檔" -#: internal/cli/sketch/new.go:44 +#: internal/cli/sketch/new.go:46 msgid "Overwrites an existing .ino sketch." msgstr "覆蓋現有的 .ino sketch 檔" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 -#: internal/cli/core/uninstall.go:35 internal/cli/core/upgrade.go:37 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 +#: internal/cli/core/uninstall.go:36 internal/cli/core/upgrade.go:38 msgid "PACKAGER" msgstr "套件管理員" -#: internal/cli/board/details.go:163 +#: internal/cli/board/details.go:165 msgid "Package URL:" msgstr "套件網址:" -#: internal/cli/board/details.go:162 +#: internal/cli/board/details.go:164 msgid "Package maintainer:" msgstr "套件維護者:" -#: internal/cli/board/details.go:161 +#: internal/cli/board/details.go:163 msgid "Package name:" msgstr "套件名" -#: internal/cli/board/details.go:165 +#: internal/cli/board/details.go:167 msgid "Package online help:" msgstr "套件線上協助:" -#: internal/cli/board/details.go:164 +#: internal/cli/board/details.go:166 msgid "Package website:" msgstr "套件網站:" -#: internal/cli/lib/search.go:158 +#: internal/cli/lib/search.go:202 msgid "Paragraph: %s" msgstr "段落: %s" -#: internal/cli/compile/compile.go:427 internal/cli/compile/compile.go:442 +#: internal/cli/compile/compile.go:473 internal/cli/compile/compile.go:488 msgid "Path" msgstr "路徑" -#: internal/cli/compile/compile.go:123 +#: internal/cli/compile/compile.go:129 msgid "" "Path to a collection of libraries. Can be used multiple times or entries can" " be comma separated." msgstr "程式庫集合的路徑。可多次使用,或以逗號分隔" -#: internal/cli/compile/compile.go:121 +#: internal/cli/compile/compile.go:127 msgid "" "Path to a single library’s root folder. Can be used multiple times or " "entries can be comma separated." msgstr "單一程式庫的根目錄路徑。可多次使用,或以逗號分隔" -#: internal/cli/cli.go:114 +#: internal/cli/cli.go:172 msgid "Path to the file where logs will be written." msgstr "日誌檔的路徑" -#: internal/cli/compile/compile.go:102 +#: internal/cli/compile/compile.go:108 msgid "" "Path where to save compiled files. If omitted, a directory will be created " "in the default temporary path of your OS." msgstr "保存已編譯檔的路徑。如果省略,將在作業系統預設的臨時目錄中建立" -#: commands/upload/upload.go:439 +#: commands/service_upload.go:515 msgid "Performing 1200-bps touch reset on serial port %s" msgstr "在 %s 連接埠上執行 1200-bps TOUCH 重置" -#: commands/core/install.go:54 commands/core/install.go:61 +#: commands/service_platform_install.go:87 +#: commands/service_platform_install.go:94 msgid "Platform %s already installed" msgstr "平台 %s 已安裝過" -#: arduino/cores/packagemanager/install_uninstall.go:192 +#: internal/arduino/cores/packagemanager/install_uninstall.go:196 msgid "Platform %s installed" msgstr "平台 %s 已安裝" -#: internal/cli/compile/compile.go:378 internal/cli/upload/upload.go:148 +#: internal/cli/compile/compile.go:417 internal/cli/upload/upload.go:148 msgid "" "Platform %s is not found in any known index\n" "Maybe you need to add a 3rd party URL?" @@ -1755,94 +1803,99 @@ msgstr "" "在已知索引中找不到平台 %s \n" "也許你需要加入第三方 3rd 位址?" -#: arduino/cores/packagemanager/install_uninstall.go:316 +#: internal/arduino/cores/packagemanager/install_uninstall.go:320 msgid "Platform %s uninstalled" msgstr "%s 平台已卸載" -#: arduino/errors.go:483 +#: commands/cmderrors/cmderrors.go:482 msgid "Platform '%s' is already at the latest version" msgstr "平台 '%s' 已是最新版" -#: arduino/errors.go:407 +#: commands/cmderrors/cmderrors.go:406 msgid "Platform '%s' not found" msgstr "平台 '%s' 沒找到" -#: internal/cli/board/search.go:82 +#: internal/cli/board/search.go:85 msgid "Platform ID" msgstr "平台 ID" -#: internal/cli/compile/compile.go:362 internal/cli/upload/upload.go:135 +#: internal/cli/compile/compile.go:402 internal/cli/upload/upload.go:136 msgid "Platform ID is not correct" msgstr "平台 ID 不正確" -#: internal/cli/board/details.go:171 +#: internal/cli/board/details.go:173 msgid "Platform URL:" msgstr "平台位址:" -#: internal/cli/board/details.go:170 +#: internal/cli/board/details.go:172 msgid "Platform architecture:" msgstr "平台架構:" -#: internal/cli/board/details.go:169 +#: internal/cli/board/details.go:171 msgid "Platform category:" msgstr "平台類別:" -#: internal/cli/board/details.go:176 +#: internal/cli/board/details.go:178 msgid "Platform checksum:" msgstr "平台校驗碼:" -#: internal/cli/board/details.go:172 +#: internal/cli/board/details.go:174 msgid "Platform file name:" msgstr "平台檔案名:" -#: internal/cli/board/details.go:168 +#: internal/cli/board/details.go:170 msgid "Platform name:" msgstr "平台名:" -#: internal/cli/board/details.go:174 +#: internal/cli/board/details.go:176 msgid "Platform size (bytes):" msgstr "平台大小 (位元組):" -#: arduino/errors.go:155 +#: commands/cmderrors/cmderrors.go:153 msgid "" "Please specify an FQBN. Multiple possible boards detected on port %[1]s with" " protocol %[2]s" msgstr "請指定一個 FQBN。在 %[1]s 連接埠以協議 %[2]s 檢測到多個可能的開發板" -#: arduino/errors.go:135 +#: commands/cmderrors/cmderrors.go:133 msgid "" "Please specify an FQBN. The board on port %[1]s with protocol %[2]s can't be" " identified" msgstr "請指定一個 FQBN。%[1]s 連接埠以協議 %[2]s 的開發板無法識別" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Port" msgstr "連接埠" -#: internal/cli/monitor/monitor.go:190 internal/cli/monitor/monitor.go:199 +#: internal/cli/monitor/monitor.go:287 internal/cli/monitor/monitor.go:296 msgid "Port closed: %v" msgstr "連接埠關閉: %v" -#: arduino/errors.go:669 +#: commands/cmderrors/cmderrors.go:668 msgid "Port monitor error" msgstr "連接埠監視器錯誤" -#: arduino/builder/libraries.go:101 arduino/builder/libraries.go:109 +#: internal/arduino/builder/libraries.go:102 +#: internal/arduino/builder/libraries.go:110 msgid "Precompiled library in \"%[1]s\" not found" msgstr "找不到在“%[1]s”的預編譯程式庫" -#: internal/cli/board/details.go:41 +#: internal/cli/board/details.go:42 msgid "Print details about a board." msgstr "列出開發板的詳細資訊" -#: internal/cli/compile/compile.go:98 +#: internal/cli/compile/compile.go:103 msgid "Print preprocessed code to stdout instead of compiling." msgstr "列出預處理的代碼到標準輸出,而不是編譯" -#: internal/cli/cli.go:106 internal/cli/cli.go:108 +#: internal/cli/cli.go:166 internal/cli/cli.go:168 msgid "Print the logs on the standard output." msgstr "列出日誌到標準輸出" +#: internal/cli/cli.go:180 +msgid "Print the output in JSON format." +msgstr "輸出 JSON 格式。" + #: internal/cli/config/dump.go:31 msgid "Prints the current configuration" msgstr "列出目前設定" @@ -1851,192 +1904,273 @@ msgstr "列出目前設定" msgid "Prints the current configuration." msgstr "列出目前設定" -#: arduino/errors.go:204 +#: commands/cmderrors/cmderrors.go:202 msgid "Profile '%s' not found" msgstr "設定集'%s' 找不到" -#: arduino/errors.go:340 +#: commands/cmderrors/cmderrors.go:339 msgid "Programmer '%s' not found" msgstr "燒錄器 '%s' 找不到" -#: internal/cli/board/details.go:110 +#: internal/cli/board/details.go:111 msgid "Programmer name" msgstr "燒錄器名" -#: internal/cli/arguments/programmer.go:29 +#: internal/cli/arguments/programmer.go:35 msgid "Programmer to use, e.g: atmel_ice" msgstr "要使用的燒錄器,例如:atmel_ice" -#: internal/cli/board/details.go:214 +#: internal/cli/board/details.go:216 msgid "Programmers:" msgstr "燒錄器:" -#: arduino/errors.go:392 +#: commands/cmderrors/cmderrors.go:391 msgid "Property '%s' is undefined" msgstr "'%s' 屬性未定義" -#: internal/cli/board/list.go:132 +#: internal/cli/board/list.go:142 msgid "Protocol" msgstr "協議" -#: internal/cli/lib/search.go:168 +#: internal/cli/lib/search.go:212 msgid "Provides includes: %s" msgstr "提供的包括: %s" -#: internal/cli/config/remove.go:31 internal/cli/config/remove.go:32 +#: internal/cli/config/remove.go:34 internal/cli/config/remove.go:35 msgid "Removes one or more values from a setting." msgstr "從設定中移除一或多個值" -#: commands/lib/install.go:130 +#: commands/service_library_install.go:188 msgid "Replacing %[1]s with %[2]s" msgstr "將 %[1]s 替換成 %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:121 +#: internal/arduino/cores/packagemanager/install_uninstall.go:125 msgid "Replacing platform %[1]s with %[2]s" msgstr "以平台 %[2]s 替換 %[1]s " -#: internal/cli/board/details.go:182 +#: internal/cli/board/details.go:184 msgid "Required tool:" msgstr "需要的工具:" -#: internal/cli/daemon/daemon.go:52 -msgid "Run as a daemon on port: %s" -msgstr "以背景程式身份在連接埠: %s 執行" - -#: internal/cli/monitor/monitor.go:71 +#: internal/cli/monitor/monitor.go:79 msgid "Run in silent mode, show only monitor input and output." msgstr "以靜默模式執行,只顯示監視輸入和輸出" -#: internal/cli/daemon/daemon.go:53 -msgid "" -"Running as a daemon the initialization of cores and libraries is done only " -"once." -msgstr "以背景程式身份執行時,只做一次核心和程式庫的初始化" +#: internal/cli/daemon/daemon.go:47 +msgid "Run the Arduino CLI as a gRPC daemon." +msgstr "以 gRPC 精靈的形式執行 Arduino CLI。" -#: arduino/builder/core.go:42 +#: internal/arduino/builder/core.go:43 msgid "Running normal build of the core..." msgstr "以正常建構的核心執行..." -#: arduino/cores/packagemanager/install_uninstall.go:295 -#: arduino/cores/packagemanager/install_uninstall.go:408 +#: internal/arduino/cores/packagemanager/install_uninstall.go:299 +#: internal/arduino/cores/packagemanager/install_uninstall.go:413 msgid "Running pre_uninstall script." msgstr "執行 pre_uninstall 命令." -#: internal/cli/debug/debug.go:185 +#: internal/cli/lib/search.go:39 +msgid "SEARCH_TERM" +msgstr "搜尋_條件" + +#: internal/cli/debug/debug.go:238 msgid "SVD file path" msgstr "SVD 檔案路徑" -#: internal/cli/compile/compile.go:100 +#: internal/cli/compile/compile.go:106 msgid "Save build artifacts in this directory." msgstr "將建構成品存在這個目錄" -#: internal/cli/board/search.go:38 +#: internal/cli/board/search.go:39 msgid "Search for a board in the Boards Manager using the specified keywords." msgstr "以指定的關鍵字在開發板管理員尋找開發板" -#: internal/cli/board/search.go:37 +#: internal/cli/board/search.go:38 msgid "Search for a board in the Boards Manager." msgstr "在開發板管理員尋找開發板" -#: internal/cli/core/search.go:47 +#: internal/cli/core/search.go:41 msgid "Search for a core in Boards Manager using the specified keywords." msgstr "以指定的關鍵字在開發板管理員尋找核心" -#: internal/cli/core/search.go:46 +#: internal/cli/core/search.go:40 msgid "Search for a core in Boards Manager." msgstr "在開發板管理員尋找核心" -#: internal/cli/lib/search.go:42 -msgid "Search for one or more libraries data (case insensitive search)." -msgstr "尋找一或多個程式庫資料 (不分大小寫)" - #: internal/cli/lib/search.go:41 -msgid "Searches for one or more libraries data." -msgstr "尋找一或多個程式庫資料" - -#: internal/cli/lib/search.go:157 +msgid "" +"Search for libraries matching zero or more search terms.\n" +"\n" +"All searches are performed in a case-insensitive fashion. Queries containing\n" +"multiple search terms will return only libraries that match all of the terms.\n" +"\n" +"Search terms that do not match the QV syntax described below are basic search\n" +"terms, and will match libraries that include the term anywhere in any of the\n" +"following fields:\n" +" - Author\n" +" - Name\n" +" - Paragraph\n" +" - Provides\n" +" - Sentence\n" +"\n" +"A special syntax, called qualifier-value (QV), indicates that a search term\n" +"should be compared against only one field of each library index entry. This\n" +"syntax uses the name of an index field (case-insensitive), an equals sign (=)\n" +"or a colon (:), and a value, e.g. 'name=ArduinoJson' or 'provides:tinyusb.h'.\n" +"\n" +"QV search terms that use a colon separator will match all libraries with the\n" +"value anywhere in the named field, and QV search terms that use an equals\n" +"separator will match only libraries with exactly the provided value in the\n" +"named field.\n" +"\n" +"QV search terms can include embedded spaces using double-quote (\") characters\n" +"around the value or the entire term, e.g. 'category=\"Data Processing\"' and\n" +"'\"category=Data Processing\"' are equivalent. A QV term can include a literal\n" +"double-quote character by preceding it with a backslash (\\) character.\n" +"\n" +"NOTE: QV search terms using double-quote or backslash characters that are\n" +"passed as command-line arguments may require quoting or escaping to prevent\n" +"the shell from interpreting those characters.\n" +"\n" +"In addition to the fields listed above, QV terms can use these qualifiers:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" +msgstr "" +"搜尋程式庫.\n" +"\n" +"所有的搜尋皆不分大小寫. 多詞搜尋只會尋找全部皆符合的程式庫.\n" +"\n" +"未符合 QV 語法的皆為基本搜尋, 將尋找在下列幾個欄位相符的程式庫:\n" +" - Author\n" +" - Name\n" +" - Paragraph \n" +" - Provides\n" +" - Sentence\n" +"\n" +"稱為限定值 qualifier-value (QV) 的特殊語法, 將只尋找限定欄位相符的程式庫. 以欄位 (不分大小寫), 加上等號 (=) 或分號 (:), 再接上一個值, 例如. 'name=ArduinoJson' 或 'provides:tinyusb.h'.\n" +"\n" +"QV 裏分號為多條件搜尋, 等號為單條件\n" +"\n" +"QV 裏可使用雙引號(\")來包含空白字元, 框起整個條件式或值都可以的, 例如. 'category=\"Data Processing\"' 和\n" +"'\"category=Data Processing\"' 是相同的. QV 語法也可使用倒斜線(\\)來加入雙引號 .\n" +"\n" +"注意: 如在命令列環境下使用 QV 語法, 請自行留意相關字串參數的跳脫語法.\n" +"\n" +"除了以上的欄位外, QV 也可使用下列限定欄位:\n" +" - Architectures\n" +" - Category\n" +" - Dependencies\n" +" - License\n" +" - Maintainer\n" +" - Types\n" +" - Version\n" +" - Website\n" +"\t\t" + +#: internal/cli/lib/search.go:40 +msgid "Searches for one or more libraries matching a query." +msgstr "尋找符合條件的一或多個程式庫" + +#: internal/cli/lib/search.go:201 msgid "Sentence: %s" msgstr "句子: %s" -#: internal/cli/debug/debug.go:193 +#: internal/cli/debug/debug.go:246 msgid "Server path" msgstr "伺服器路徑" -#: arduino/httpclient/httpclient.go:73 +#: internal/arduino/httpclient/httpclient.go:61 msgid "Server responded with: %s" msgstr "伺服器回應: %s" -#: internal/cli/debug/debug.go:192 +#: internal/cli/debug/debug.go:245 msgid "Server type" msgstr "伺服器類型" -#: internal/cli/upload/upload.go:81 +#: internal/cli/upload/upload.go:83 msgid "Set a value for a field required to upload." -msgstr "" +msgstr "設定上傳所必要的欄位上的值" -#: internal/cli/monitor/monitor.go:68 +#: internal/cli/monitor/monitor.go:76 msgid "Set terminal in raw mode (unbuffered)." -msgstr "設定終端成粗糙模式 (無緩衝)" +msgstr "設定終端成原始模式 (無緩衝)" -#: internal/cli/config/set.go:32 internal/cli/config/set.go:33 +#: internal/cli/config/set.go:34 internal/cli/config/set.go:35 msgid "Sets a setting value." msgstr "設定一個值" -#: internal/cli/board/attach.go:36 +#: internal/cli/cli.go:189 msgid "" -"Sets the default values for port and FQBN. If no port or FQBN are specified," -" the current default port and FQBN are displayed." -msgstr "設定連接埠和 FQBN 的預設值。如果沒指定連接埠或 FQBN,將顯示預設的" +"Sets the default data directory (Arduino CLI will look for configuration " +"file in this directory)." +msgstr "指定資料目錄 (Arduino CLI 會在此找尋設定檔)。" -#: internal/cli/config/init.go:55 internal/cli/config/init.go:56 +#: internal/cli/board/attach.go:37 +msgid "" +"Sets the default values for port and FQBN. If no port, FQBN or programmer " +"are specified, the current default port, FQBN and programmer are displayed." +msgstr "設定連接埠和 FQBN & 燒錄器的預設值. 如果沒指定, 將使用現有的設定值。" + +#: internal/cli/daemon/daemon.go:93 +msgid "Sets the maximum message size in bytes the daemon can receive" +msgstr "設定精靈可接收的最大訊息量-位元組" + +#: internal/cli/config/init.go:60 internal/cli/config/init.go:61 msgid "Sets where to save the configuration file." msgstr "設定儲存設定檔的位置" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Setting" msgstr "設定" -#: internal/cli/config/validate.go:50 -msgid "Settings key doesn't exist" -msgstr "設定鍵值不存在" +#: internal/cli/cli.go:101 +msgid "Should show help message, but it is available only in TEXT mode." +msgstr "將顯示協助訊息,不過只有文字模式。" -#: internal/cli/core/search.go:52 +#: internal/cli/core/search.go:48 msgid "Show all available core versions." msgstr "顯示全部可用的核心版本" -#: internal/cli/monitor/monitor.go:69 +#: internal/cli/monitor/monitor.go:77 msgid "Show all the settings of the communication port." msgstr "顯示通訊連接埠的全部設定" -#: internal/cli/board/listall.go:47 internal/cli/board/search.go:45 +#: internal/cli/board/listall.go:50 internal/cli/board/search.go:48 msgid "Show also boards marked as 'hidden' in the platform" msgstr "在平台上也顯示標記為'隱藏的'開發板" -#: internal/cli/arguments/show_properties.go:59 +#: internal/cli/arguments/show_properties.go:60 msgid "" "Show build properties. The properties are expanded, use \"--show-" "properties=unexpanded\" if you want them exactly as they are defined." msgstr "顯示建構屬性. 屬性是攤開的, 如只想看定義, 請用 \\\"--show-properties=unexpanded\\\"." -#: internal/cli/board/details.go:51 +#: internal/cli/board/details.go:52 msgid "Show full board details" msgstr "顯示完整的開發板細節" -#: internal/cli/board/details.go:42 +#: internal/cli/board/details.go:43 msgid "" "Show information about a board, in particular if the board has options to be" " specified in the FQBN." msgstr "顯示開發板的資訊,特別是如果開發板在 FQBN 中有可指定的選項" -#: internal/cli/lib/search.go:49 +#: internal/cli/lib/search.go:97 msgid "Show library names only." msgstr "只顯示程式庫名" -#: internal/cli/board/details.go:52 +#: internal/cli/board/details.go:53 msgid "Show list of available programmers" msgstr "顯示可用的燒錄器列表" -#: internal/cli/debug/debug.go:63 +#: internal/cli/debug/debug.go:73 msgid "" "Show metadata about the debug session instead of starting the debugger." msgstr "顯示除錯作業的數據,而不是啟動除錯器" @@ -2045,11 +2179,11 @@ msgstr "顯示除錯作業的數據,而不是啟動除錯器" msgid "Show outdated cores and libraries after index update" msgstr "顯示在索引更新後過時的核心和程式庫" -#: internal/cli/lib/list.go:39 +#: internal/cli/lib/list.go:40 msgid "Shows a list of installed libraries." msgstr "顯示已安裝的程式庫" -#: internal/cli/lib/list.go:40 +#: internal/cli/lib/list.go:41 msgid "" "Shows a list of installed libraries.\n" "\n" @@ -2060,125 +2194,144 @@ msgstr "" "顯示已安裝的程式庫。\\n如果指定了 LIBNAME 參數,則只列出該程式庫。\\n預設情況下,不會列出 '平台/核心' 內建的程式庫,\\n但可以通過" " --all 來顯示" -#: internal/cli/core/list.go:36 internal/cli/core/list.go:37 +#: internal/cli/core/list.go:37 internal/cli/core/list.go:38 msgid "Shows the list of installed platforms." msgstr "顯示已安裝的平台" -#: internal/cli/lib/examples.go:43 +#: internal/cli/lib/examples.go:44 msgid "Shows the list of the examples for libraries." msgstr "顯示程式庫範例" -#: internal/cli/lib/examples.go:44 +#: internal/cli/lib/examples.go:45 msgid "" "Shows the list of the examples for libraries. A name may be given as " "argument to search a specific library." msgstr "顯示程式庫的範例列表。可以指定程式庫" -#: internal/cli/version/version.go:39 +#: internal/cli/version/version.go:37 msgid "" "Shows the version number of Arduino CLI which is installed on your system." msgstr "顯示安裝在系統上的 Arduino CLI 版本" -#: internal/cli/version/version.go:38 +#: internal/cli/version/version.go:36 msgid "Shows version number of Arduino CLI." msgstr "顯示 Arduino CLI 版本" -#: internal/cli/board/details.go:187 +#: internal/cli/board/details.go:189 msgid "Size (bytes):" msgstr "大小 (字元組) :" -#: commands/compile/compile.go:209 +#: commands/service_compile.go:286 msgid "" "Sketch cannot be located in build path. Please specify a different build " "path" msgstr "sketch 不能放在建構路徑上。請指定不同的建構路徑" -#: internal/cli/sketch/new.go:84 +#: internal/cli/sketch/new.go:98 msgid "Sketch created in: %s" msgstr "Sketch 建立在: %s" -#: internal/cli/arguments/profiles.go:29 +#: internal/cli/arguments/profiles.go:33 msgid "Sketch profile to use" msgstr "採用的 Sketch 設定集" -#: arduino/builder/sizer.go:189 +#: internal/arduino/builder/sizer.go:193 msgid "Sketch too big; see %[1]s for tips on reducing it." msgstr "Sketch 太胖了;請參考 %[1]s 裏的減肥技巧" -#: arduino/builder/sizer.go:157 +#: internal/arduino/builder/sizer.go:160 msgid "" "Sketch uses %[1]s bytes (%[3]s%%) of program storage space. Maximum is %[2]s" " bytes." msgstr "Sketch 使用 %[1]s 位元組(%[3]s%%)的程式儲存空間。最大為 %[2]s 位元組" -#: commands/sketch/warn_deprecated.go:29 +#: internal/cli/feedback/warn_deprecated.go:39 msgid "" "Sketches with .pde extension are deprecated, please rename the following " "files to .ino:" msgstr "Sketch 已棄用 .pde 副檔名 ,請將下列檔案的副檔名改成.ino" -#: arduino/builder/linker.go:30 +#: internal/arduino/builder/linker.go:31 msgid "Skip linking of final executable." msgstr "跳過鏈結成執行檔" -#: commands/upload/upload.go:432 +#: commands/service_upload.go:508 msgid "Skipping 1200-bps touch reset: no serial port selected!" msgstr "跳過 1200-bps 接觸重設:未選取序列埠!" -#: arduino/builder/archive_compiled_files.go:29 +#: internal/arduino/builder/archive_compiled_files.go:28 msgid "Skipping archive creation of: %[1]s" msgstr "跳過建立壓縮檔: %[1]s" -#: arduino/builder/compilation.go:177 +#: internal/arduino/builder/compilation.go:184 msgid "Skipping compile of: %[1]s" msgstr "跳過編譯: %[1]s" -#: arduino/builder/internal/detector/detector.go:407 +#: internal/arduino/builder/internal/detector/detector.go:414 msgid "Skipping dependencies detection for precompiled library %[1]s" msgstr "跳過預編譯程式庫 %[1]s 的相依偵測" -#: arduino/cores/packagemanager/install_uninstall.go:188 +#: internal/arduino/cores/packagemanager/install_uninstall.go:192 msgid "Skipping platform configuration." msgstr "跳過平台設定" -#: arduino/cores/packagemanager/install_uninstall.go:304 -#: arduino/cores/packagemanager/install_uninstall.go:417 +#: internal/arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:422 msgid "Skipping pre_uninstall script." msgstr "跳過 pre_uninstall 命令." -#: arduino/cores/packagemanager/install_uninstall.go:365 +#: internal/arduino/cores/packagemanager/install_uninstall.go:370 msgid "Skipping tool configuration." msgstr "跳過工具設定" -#: arduino/builder/recipe.go:48 +#: internal/arduino/builder/recipe.go:48 msgid "Skipping: %[1]s" msgstr "跳過: %[1]s" -#: commands/instances.go:575 +#: commands/instances.go:634 msgid "Some indexes could not be updated." msgstr "有些索引無法更新" -#: internal/cli/core/upgrade.go:125 +#: internal/cli/core/upgrade.go:141 msgid "Some upgrades failed, please check the output for details." msgstr "有些升級失敗了,細節請看輸出" -#: arduino/serialutils/serialutils.go:141 -msgid "TOUCH: error during reset: %s" -msgstr "TOUCH: 重設時出錯: %s" - -#: internal/cli/daemon/daemon.go:58 +#: internal/cli/daemon/daemon.go:78 msgid "The TCP port the daemon will listen to" msgstr "背景程式監聽的 TCP 埠" -#: internal/cli/cli.go:125 +#: internal/cli/cli.go:177 +msgid "The command output format, can be: %s" +msgstr "輸出格式,可以是: %s" + +#: internal/cli/cli.go:187 msgid "The custom config file (if not specified the default will be used)." msgstr "自定義設定檔 (如沒指定,將使用預設值)" -#: internal/cli/daemon/daemon.go:77 +#: internal/cli/compile/compile.go:93 +msgid "" +"The flag --build-cache-path has been deprecated. Please use just --build-" +"path alone or configure the build cache path in the Arduino CLI settings." +msgstr "" +"旗標 --build-cache-path 已棄用。請單獨使用 --build-path 或在 Arduino CLI 設定裏指定編譯快取路徑 。" + +#: internal/cli/daemon/daemon.go:103 msgid "The flag --debug-file must be used with --debug." msgstr "參數 --debug-file 必須和 --debug 一起使用" -#: internal/cli/config/add.go:93 +#: internal/cli/debug/debug_check.go:94 +msgid "The given board/programmer configuration does NOT support debugging." +msgstr "指定的板子/燒錄器設置不支援除錯。" + +#: internal/cli/debug/debug_check.go:92 +msgid "The given board/programmer configuration supports debugging." +msgstr "指定的板子/燒錄器設置支援除錯。" + +#: commands/cmderrors/cmderrors.go:876 +msgid "The instance is no longer valid and needs to be reinitialized" +msgstr "實例已無效需重新初始化" + +#: internal/cli/config/add.go:57 msgid "" "The key '%[1]v' is not a list of items, can't add to it.\n" "Maybe use '%[2]s'?" @@ -2186,7 +2339,7 @@ msgstr "" "'%[1]v' 鍵不是項目列表,無法加入其中。\n" "還是用 '%[2]s'?" -#: internal/cli/config/remove.go:51 +#: internal/cli/config/remove.go:57 msgid "" "The key '%[1]v' is not a list of items, can't remove from it.\n" "Maybe use '%[2]s'?" @@ -2194,37 +2347,37 @@ msgstr "" "'%[1]v' 鍵不是項目列表,無法移除。\n" "還是用 '%[2]s'?" -#: arduino/errors.go:859 +#: commands/cmderrors/cmderrors.go:858 msgid "The library %s has multiple installations:" msgstr "程式庫 %s 有多個安裝" -#: internal/cli/compile/compile.go:112 +#: internal/cli/compile/compile.go:118 msgid "" "The name of the custom encryption key to use to encrypt a binary during the " "compile process. Used only by the platforms that support it." msgstr "自定義加密密鑰的名稱,用在編譯過程中對二進位碼進行加密。只用在有支援的平台" -#: internal/cli/compile/compile.go:110 +#: internal/cli/compile/compile.go:116 msgid "" "The name of the custom signing key to use to sign a binary during the " "compile process. Used only by the platforms that support it." msgstr "自定義簽名密鑰的名稱,用在編譯過程中對二進位碼進行簽名。只用在有支援的平台" -#: internal/cli/cli.go:116 internal/cli/cli.go:121 +#: internal/cli/cli.go:174 msgid "The output format for the logs, can be: %s" msgstr "日誌的輸出格​​式,可以是: %s" -#: internal/cli/compile/compile.go:108 +#: internal/cli/compile/compile.go:114 msgid "" "The path of the dir to search for the custom keys to sign and encrypt a " "binary. Used only by the platforms that support it." msgstr "尋找用來簽名和加密二進位碼的自定義密鑰檔的檔案夾路徑。只用在有支援的平台" -#: arduino/builder/libraries.go:151 +#: internal/arduino/builder/libraries.go:152 msgid "The platform does not support '%[1]s' for precompiled libraries." msgstr "本平台不支援預編譯程式庫的 '%[1]s'" -#: internal/cli/lib/upgrade.go:35 +#: internal/cli/lib/upgrade.go:36 msgid "" "This command upgrades an installed library to the latest available version. " "Multiple libraries can be passed separated by a space. If no arguments are " @@ -2238,105 +2391,106 @@ msgid "" "that can be upgraded. If nothing needs to be updated the output is empty." msgstr "此指令顯示可升級的已安裝核心和程式庫。如沒需要更新的,則輸出空白" -#: internal/cli/monitor/monitor.go:72 +#: internal/cli/monitor/monitor.go:80 msgid "Timestamp each incoming line." msgstr "記錄每一行時間" -#: arduino/cores/packagemanager/install_uninstall.go:87 -#: arduino/cores/packagemanager/install_uninstall.go:326 +#: internal/arduino/cores/packagemanager/install_uninstall.go:91 +#: internal/arduino/cores/packagemanager/install_uninstall.go:330 msgid "Tool %s already installed" msgstr "工具 %s 已安裝" -#: arduino/cores/packagemanager/install_uninstall.go:429 +#: internal/arduino/cores/packagemanager/install_uninstall.go:434 msgid "Tool %s uninstalled" msgstr "工具 %s 已卸除" -#: commands/debug/debug.go:139 +#: commands/service_debug.go:277 msgid "Toolchain '%s' is not supported" msgstr "不支援工具包 '%s' " -#: internal/cli/debug/debug.go:182 +#: internal/cli/debug/debug.go:235 msgid "Toolchain path" msgstr "工具包路徑" -#: internal/cli/debug/debug.go:183 +#: internal/cli/debug/debug.go:236 msgid "Toolchain prefix" msgstr "工具包前綴字元" -#: internal/cli/debug/debug.go:181 +#: internal/cli/debug/debug.go:234 msgid "Toolchain type" msgstr "工具包類型" -#: internal/cli/compile/compile.go:376 internal/cli/upload/upload.go:146 +#: internal/cli/compile/compile.go:415 internal/cli/upload/upload.go:146 msgid "Try running %s" msgstr "嘗試執行 %s" -#: internal/cli/burnbootloader/burnbootloader.go:57 +#: internal/cli/burnbootloader/burnbootloader.go:63 msgid "Turns on verbose mode." msgstr "開啟囉嗦模式" -#: internal/cli/board/list.go:96 internal/cli/board/list.go:132 +#: internal/cli/board/list.go:104 internal/cli/board/list.go:142 msgid "Type" msgstr "類型" -#: internal/cli/lib/search.go:165 +#: internal/cli/lib/search.go:209 msgid "Types: %s" msgstr "類型: %s" -#: internal/cli/board/details.go:189 +#: internal/cli/board/details.go:191 msgid "URL:" msgstr "網址:" -#: arduino/builder/core.go:143 +#: internal/arduino/builder/core.go:166 msgid "" "Unable to cache built core, please tell %[1]s maintainers to follow %[2]s" msgstr "無法快取建構核心,請通知 %[1]s 維護者注意 %[2]s" -#: configuration/configuration.go:122 +#: internal/cli/configuration/configuration.go:95 msgid "Unable to get Documents Folder: %v" msgstr "無法取得文件夾: %v" -#: configuration/configuration.go:97 +#: internal/cli/configuration/configuration.go:70 msgid "Unable to get Local App Data Folder: %v" msgstr "無法取得本地應用程式的資料夾: %v" -#: configuration/configuration.go:85 configuration/configuration.go:110 +#: internal/cli/configuration/configuration.go:58 +#: internal/cli/configuration/configuration.go:83 msgid "Unable to get user home dir: %v" msgstr "無法取得用戶家目錄: %v" -#: internal/cli/cli.go:204 +#: internal/cli/cli.go:252 msgid "Unable to open file for logging: %s" msgstr "無法開啟檔案做日誌記錄: %s" -#: commands/instances.go:542 +#: commands/instances.go:563 msgid "Unable to parse URL" msgstr "無法解析網址" -#: arduino/cores/packagemanager/install_uninstall.go:278 -#: commands/lib/uninstall.go:44 +#: commands/service_library_uninstall.go:71 +#: internal/arduino/cores/packagemanager/install_uninstall.go:282 msgid "Uninstalling %s" msgstr "卸除 %s" -#: arduino/cores/packagemanager/install_uninstall.go:164 -#: commands/core/uninstall.go:73 +#: commands/service_platform_uninstall.go:99 +#: internal/arduino/cores/packagemanager/install_uninstall.go:168 msgid "Uninstalling %s, tool is no more required" msgstr "卸除 %s,不需要這工具了" -#: internal/cli/core/uninstall.go:36 internal/cli/core/uninstall.go:37 +#: internal/cli/core/uninstall.go:37 internal/cli/core/uninstall.go:38 msgid "" "Uninstalls one or more cores and corresponding tool dependencies if no " "longer used." msgstr "如不再需用到, 卸除一或多個核心及相依" -#: internal/cli/lib/uninstall.go:35 internal/cli/lib/uninstall.go:36 +#: internal/cli/lib/uninstall.go:36 internal/cli/lib/uninstall.go:37 msgid "Uninstalls one or more libraries." msgstr "卸載一或多個程式庫" -#: internal/cli/board/list.go:164 +#: internal/cli/board/list.go:174 msgid "Unknown" msgstr "未知的" -#: arduino/errors.go:185 +#: commands/cmderrors/cmderrors.go:183 msgid "Unknown FQBN" msgstr "未知的 FQBN" @@ -2348,23 +2502,23 @@ msgstr "更新核心和程式庫的索引" msgid "Updates the index of cores and libraries to the latest versions." msgstr "更新核心和程式庫的索引到最新版" -#: internal/cli/core/update_index.go:34 +#: internal/cli/core/update_index.go:36 msgid "Updates the index of cores to the latest version." msgstr "更新核心索引到最新" -#: internal/cli/core/update_index.go:33 +#: internal/cli/core/update_index.go:35 msgid "Updates the index of cores." msgstr "更新核心索引" -#: internal/cli/lib/update_index.go:34 +#: internal/cli/lib/update_index.go:36 msgid "Updates the libraries index to the latest version." msgstr "更新程式庫索引到最新" -#: internal/cli/lib/update_index.go:33 +#: internal/cli/lib/update_index.go:35 msgid "Updates the libraries index." msgstr "更新程式庫索引" -#: arduino/cores/packagemanager/install_uninstall.go:44 +#: internal/arduino/cores/packagemanager/install_uninstall.go:47 msgid "Upgrade doesn't accept parameters with version" msgstr "升級不接受版本參數" @@ -2376,53 +2530,53 @@ msgstr "升級已安裝的核心和程式庫到最新版" msgid "Upgrades installed cores and libraries." msgstr "升級已安裝的核心和程式庫" -#: internal/cli/lib/upgrade.go:34 +#: internal/cli/lib/upgrade.go:35 msgid "Upgrades installed libraries." msgstr "升級已安裝的程式庫" -#: internal/cli/core/upgrade.go:38 internal/cli/core/upgrade.go:39 +#: internal/cli/core/upgrade.go:39 internal/cli/core/upgrade.go:40 msgid "Upgrades one or all installed platforms to the latest version." msgstr "升級已安裝的平台到最新版本" -#: internal/cli/upload/upload.go:57 +#: internal/cli/upload/upload.go:56 msgid "Upload Arduino sketches." msgstr "上傳 Arduino sketch" -#: internal/cli/upload/upload.go:58 +#: internal/cli/upload/upload.go:57 msgid "" "Upload Arduino sketches. This does NOT compile the sketch prior to upload." msgstr "上傳 Arduino sketch。不會在上傳前編譯它" -#: internal/cli/arguments/port.go:42 +#: internal/cli/arguments/port.go:44 msgid "Upload port address, e.g.: COM3 or /dev/ttyACM2" msgstr "上傳連接埠,例如:COM3 或 /dev/ttyACM2" -#: commands/upload/upload.go:456 +#: commands/service_upload.go:532 msgid "Upload port found on %s" msgstr "找到上傳連接埠 %s " -#: internal/cli/arguments/port.go:46 +#: internal/cli/arguments/port.go:48 msgid "Upload port protocol, e.g: serial" msgstr "上傳連接埠協議,例如:串列" -#: internal/cli/compile/compile.go:117 +#: internal/cli/compile/compile.go:123 msgid "Upload the binary after the compilation." msgstr "編譯完成就上傳二進位碼" -#: internal/cli/burnbootloader/burnbootloader.go:47 +#: internal/cli/burnbootloader/burnbootloader.go:49 msgid "Upload the bootloader on the board using an external programmer." msgstr "使用燒錄器將 bootloader 上傳到開發板" -#: internal/cli/burnbootloader/burnbootloader.go:46 +#: internal/cli/burnbootloader/burnbootloader.go:48 msgid "Upload the bootloader." msgstr "上傳 bootloader" -#: internal/cli/compile/compile.go:262 internal/cli/upload/upload.go:167 +#: internal/cli/compile/compile.go:274 internal/cli/upload/upload.go:167 msgid "" "Uploading to specified board using %s protocol requires the following info:" msgstr "以 %s 協議上傳到開發板需要以下資訊:" -#: internal/cli/config/init.go:103 +#: internal/cli/config/init.go:160 msgid "" "Urls cannot contain commas. Separate multiple urls exported as env var with a space:\n" "%s" @@ -2430,148 +2584,157 @@ msgstr "" "網址不能有逗號。用空格隔開多個位址, 例如 env var::\n" "%s" -#: internal/cli/usage.go:26 +#: internal/cli/usage.go:22 msgid "Usage:" msgstr "用法:" -#: internal/cli/usage.go:33 +#: internal/cli/usage.go:29 msgid "Use %s for more information about a command." msgstr "使用 %s 取得指令的更多資訊" -#: internal/cli/compile/compile.go:425 +#: internal/cli/compile/compile.go:471 msgid "Used library" msgstr "使用的程式庫" -#: internal/cli/compile/compile.go:440 +#: internal/cli/compile/compile.go:486 msgid "Used platform" msgstr "使用的平台" -#: arduino/builder/internal/detector/detector.go:154 +#: internal/arduino/builder/internal/detector/detector.go:157 msgid "Used: %[1]s" msgstr "使用: %[1]s" -#: commands/compile/compile.go:280 +#: commands/service_compile.go:361 msgid "Using board '%[1]s' from platform in folder: %[2]s" msgstr "使用檔案夾: %[2]s 裏面平台的開發板 '%[1]s' " -#: arduino/builder/internal/detector/detector.go:347 +#: internal/arduino/builder/internal/detector/detector.go:351 msgid "Using cached library dependencies for file: %[1]s" msgstr "檔案: %[1]s 使用快取程式庫相依" -#: commands/compile/compile.go:281 +#: commands/service_compile.go:362 msgid "Using core '%[1]s' from platform in folder: %[2]s" msgstr "使用檔案夾: %[2]s 裏面平台的核心 '%[1]s' " -#: arduino/builder/libraries.go:312 +#: internal/cli/monitor/monitor.go:256 +msgid "Using default monitor configuration for board: %s" +msgstr "使用 %s 開發板的監控設定。" + +#: internal/cli/monitor/monitor.go:258 +msgid "" +"Using generic monitor configuration.\n" +"WARNING: Your board may require different settings to work!\n" +msgstr "" +"使用一般監控設定。.\n" +"警告: 您的開發板可能需要不同的設定才能適用!\n" + +#: internal/arduino/builder/libraries.go:313 msgid "Using library %[1]s at version %[2]s in folder: %[3]s %[4]s" msgstr "使用檔案夾: %[3]s %[4]s 內的程式庫 %[1]s 版本 %[2]s " -#: arduino/builder/libraries.go:306 +#: internal/arduino/builder/libraries.go:307 msgid "Using library %[1]s in folder: %[2]s %[3]s" msgstr "使用檔案夾: %[2]s %[3]s 內的程式庫 %[1]s " -#: arduino/builder/core.go:116 +#: internal/arduino/builder/core.go:121 internal/arduino/builder/core.go:133 msgid "Using precompiled core: %[1]s" msgstr "使用預編譯核心: %[1]s" -#: arduino/builder/libraries.go:98 arduino/builder/libraries.go:106 +#: internal/arduino/builder/libraries.go:99 +#: internal/arduino/builder/libraries.go:107 msgid "Using precompiled library in %[1]s" msgstr "使用在%[1]s 裏預編譯的程式庫" -#: arduino/builder/archive_compiled_files.go:52 -#: arduino/builder/compilation.go:175 +#: internal/arduino/builder/archive_compiled_files.go:51 +#: internal/arduino/builder/compilation.go:182 msgid "Using previously compiled file: %[1]s" msgstr "使用先前編譯的檔案: %[1]s" -#: internal/cli/core/download.go:34 internal/cli/core/install.go:36 +#: internal/cli/core/download.go:35 internal/cli/core/install.go:37 msgid "VERSION" msgstr "版本" -#: internal/cli/lib/check_deps.go:36 internal/cli/lib/install.go:44 +#: internal/cli/lib/check_deps.go:38 internal/cli/lib/install.go:45 msgid "VERSION_NUMBER" msgstr "版本_號" -#: internal/cli/monitor/monitor.go:232 +#: internal/cli/monitor/monitor.go:331 msgid "Values" msgstr "數值" -#: internal/cli/burnbootloader/burnbootloader.go:56 -#: internal/cli/compile/compile.go:119 internal/cli/upload/upload.go:76 +#: internal/cli/burnbootloader/burnbootloader.go:62 +#: internal/cli/compile/compile.go:125 internal/cli/upload/upload.go:78 msgid "Verify uploaded binary after the upload." msgstr "上傳後驗證上傳的二進位碼" -#: internal/cli/compile/compile.go:426 internal/cli/compile/compile.go:441 -#: internal/cli/core/search.go:100 +#: internal/cli/compile/compile.go:472 internal/cli/compile/compile.go:487 +#: internal/cli/core/search.go:117 msgid "Version" msgstr "版本" -#: internal/cli/lib/search.go:166 +#: internal/cli/lib/search.go:210 msgid "Versions: %s" msgstr "版本: %s" -#: arduino/cores/packagemanager/install_uninstall.go:183 +#: internal/arduino/cores/packagemanager/install_uninstall.go:187 msgid "WARNING cannot configure platform: %s" msgstr "警告! 無法設定平台: %s" -#: arduino/cores/packagemanager/install_uninstall.go:361 +#: internal/arduino/cores/packagemanager/install_uninstall.go:366 msgid "WARNING cannot configure tool: %s" msgstr "警告!無法設定工具: %s" -#: arduino/cores/packagemanager/install_uninstall.go:300 -#: arduino/cores/packagemanager/install_uninstall.go:413 +#: internal/arduino/cores/packagemanager/install_uninstall.go:304 +#: internal/arduino/cores/packagemanager/install_uninstall.go:418 msgid "WARNING cannot run pre_uninstall script: %s" msgstr "警告 ! 無法執行 pre_uninstall 命令: %s" -#: internal/cli/compile/compile.go:307 +#: internal/cli/compile/compile.go:339 msgid "WARNING: The sketch is compiled using one or more custom libraries." msgstr "警告! sketch 用了一或多個客製程式庫編譯" -#: arduino/builder/libraries.go:283 +#: internal/arduino/builder/libraries.go:284 msgid "" "WARNING: library %[1]s claims to run on %[2]s architecture(s) and may be " "incompatible with your current board which runs on %[3]s architecture(s)." msgstr "警告: %[1]s 程式庫是 (%[2]s 架構),可能與選擇的開發板 (%[3]s架構)不相容 " -#: commands/upload/upload.go:445 +#: commands/service_upload.go:521 msgid "Waiting for upload port..." msgstr "等待上傳連接埠..." -#: commands/compile/compile.go:286 +#: commands/service_compile.go:367 msgid "" "Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s" msgstr "警告: 開發板 %[1]s 並沒定義 %[2]s 喜好。自動設定成:%[3]s" -#: internal/cli/lib/search.go:159 +#: internal/cli/lib/search.go:203 msgid "Website: %s" msgstr "網站: %s" -#: internal/cli/config/init.go:42 +#: internal/cli/config/init.go:45 msgid "Writes current configuration to a configuration file." msgstr "將目前的設定寫入設定檔" -#: internal/cli/config/init.go:45 +#: internal/cli/config/init.go:48 msgid "" "Writes current configuration to the configuration file in the data " "directory." msgstr "將目前的設定寫入資料目錄裏面的設定檔" -#: internal/cli/config/set.go:74 -msgid "Writing config file: %v" -msgstr "寫入設定檔: %v" - -#: internal/cli/compile/compile.go:148 internal/cli/compile/compile.go:151 +#: internal/cli/compile/compile.go:153 internal/cli/compile/compile.go:156 msgid "You cannot use the %s flag while compiling with a profile." msgstr "使用設定集編譯時不能使用 %s 旗標參數" -#: arduino/resources/checksums.go:79 +#: internal/arduino/resources/checksums.go:79 msgid "archive hash differs from hash in index" msgstr "保存與和索引不同的雜湊" -#: arduino/libraries/librariesmanager/install.go:192 +#: internal/arduino/libraries/librariesmanager/install.go:187 msgid "archive is not valid: multiple files found in zip file top level" msgstr "存檔無效: 在 zip 檔頂層找到多個檔案" -#: arduino/libraries/librariesmanager/install.go:195 +#: internal/arduino/libraries/librariesmanager/install.go:190 msgid "archive is not valid: no files found in zip file top level" msgstr "存檔無效: 在 zip 檔的頂層沒找到檔案" @@ -2579,370 +2742,341 @@ msgstr "存檔無效: 在 zip 檔的頂層沒找到檔案" msgid "archivePath" msgstr "存檔路徑" -#: arduino/builder/internal/preprocessor/arduino_preprocessor.go:60 +#: internal/arduino/builder/internal/preprocessor/arduino_preprocessor.go:64 msgid "arduino-preprocessor pattern is missing" msgstr "缺少 arduino 預處理器樣態" -#: commands/upload/upload.go:715 -msgid "autodetect build artifact: %s" -msgstr "自動偵測建構成品: %s" - -#: internal/cli/feedback/stdio.go:35 +#: internal/cli/feedback/stdio.go:37 msgid "available only in text format" msgstr "只有本文格式" -#: commands/upload/upload.go:700 +#: internal/cli/lib/search.go:84 +msgid "basic search for \"audio\"" +msgstr "基本搜尋\"audio\" " + +#: internal/cli/lib/search.go:89 +msgid "basic search for \"esp32\" and \"display\" limited to official Maintainer" +msgstr "基本搜尋只限於官方維護者的 \"esp32\" 和 \"display\"" + +#: commands/service_upload.go:792 msgid "binary file not found in %s" msgstr "%s 裏找不到二進位檔" -#: arduino/cores/packagemanager/package_manager.go:305 +#: internal/arduino/cores/packagemanager/package_manager.go:316 msgid "board %s not found" msgstr "找不到開發板 %s" -#: internal/cli/board/listall.go:37 internal/cli/board/search.go:36 +#: internal/cli/board/listall.go:38 internal/cli/board/search.go:37 msgid "boardname" msgstr "開發板名" -#: arduino/libraries/librariesmanager/librariesmanager.go:161 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:191 msgid "built-in libraries directory not set" msgstr "內建程式庫目錄未設定" -#: arduino/discovery/discovery.go:346 arduino/discovery/discovery.go:369 -#: arduino/discovery/discovery.go:391 arduino/discovery/discovery.go:431 -#: arduino/discovery/discovery.go:457 -msgid "calling %[1]s: %[2]w" -msgstr "呼叫 %[1]s: %[2]w" - -#: arduino/cores/status.go:132 arduino/cores/status.go:159 +#: internal/arduino/cores/status.go:132 internal/arduino/cores/status.go:159 msgid "can't find latest release of %s" msgstr "找不到最新版的 %s " -#: commands/instances.go:360 +#: commands/instances.go:273 msgid "can't find latest release of tool %s" msgstr "找不到最新版的工具 %s " -#: arduino/sketch/sketch.go:106 -msgid "can't find main Sketch file in %s" -msgstr "在 %s 找不到 sketch 主檔" - -#: arduino/cores/packagemanager/loader.go:825 +#: internal/arduino/cores/packagemanager/loader.go:709 msgid "can't find pattern for discovery with id %s" msgstr "找不到 id 為 %s 探索的樣態" -#: executils/output.go:52 -msgid "can't retrieve standard error stream: %s" -msgstr "無法取得標準錯誤流: %s" - -#: executils/output.go:34 -msgid "can't retrieve standard output stream: %s" -msgstr "無法取得標準輸出流: %s" - -#: arduino/builder/internal/detector/detector.go:90 +#: internal/arduino/builder/internal/detector/detector.go:93 msgid "candidates" msgstr "候選" -#: commands/upload/upload.go:657 commands/upload/upload.go:664 +#: commands/service_upload.go:738 commands/service_upload.go:745 msgid "cannot execute upload tool: %s" msgstr "無法執行上傳工具: %s" -#: arduino/resources/install.go:39 +#: internal/arduino/resources/install.go:48 msgid "checking local archive integrity" msgstr "檢查本地端存檔的完整性" -#: arduino/builder/build_options_manager.go:113 -#: arduino/builder/build_options_manager.go:116 +#: internal/arduino/builder/build_options_manager.go:111 +#: internal/arduino/builder/build_options_manager.go:114 msgid "cleaning build path" msgstr "清理建構路徑" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "command" msgstr "指令" -#: arduino/monitor/monitor.go:150 +#: internal/arduino/monitor/monitor.go:149 msgid "command '%[1]s' failed: %[2]s" msgstr "指令 '%[1]s' 失敗: %[2]s" -#: arduino/discovery/discovery.go:350 arduino/discovery/discovery.go:373 -#: arduino/discovery/discovery.go:395 arduino/discovery/discovery.go:435 -#: arduino/discovery/discovery.go:461 -msgid "command failed: %s" -msgstr "指令失敗: %s" - -#: arduino/discovery/discovery.go:348 arduino/discovery/discovery.go:352 -#: arduino/discovery/discovery.go:371 arduino/discovery/discovery.go:375 -#: arduino/discovery/discovery.go:393 arduino/discovery/discovery.go:397 -#: arduino/discovery/discovery.go:433 arduino/discovery/discovery.go:459 -#: arduino/discovery/discovery.go:463 arduino/monitor/monitor.go:147 -#: arduino/monitor/monitor.go:153 +#: internal/arduino/monitor/monitor.go:146 +#: internal/arduino/monitor/monitor.go:152 msgid "communication out of sync, expected '%[1]s', received '%[2]s'" msgstr "通信不同步,預期 '%[1]s',卻收到 '%[2]s'" -#: arduino/resources/checksums.go:75 +#: internal/arduino/resources/checksums.go:75 msgid "computing hash: %s" msgstr "計算雜湊: %s" -#: arduino/libraries/librariesmanager/install.go:145 +#: pkg/fqbn/fqbn.go:83 +msgid "config key %s contains an invalid character" +msgstr "設定鍵 %s 含有無效字元" + +#: pkg/fqbn/fqbn.go:87 +msgid "config value %s contains an invalid character" +msgstr "設定值%s 含有無效字元" + +#: internal/arduino/libraries/librariesmanager/install.go:140 msgid "copying library to destination directory:" msgstr "拷貝程式庫到目標目錄:" -#: commands/upload/upload.go:772 +#: commands/service_upload.go:864 msgid "could not find a valid build artifact" msgstr "找不到正確的建構成品" -#: commands/core/install.go:62 +#: commands/service_platform_install.go:95 msgid "could not overwrite" msgstr "無法覆寫" -#: commands/lib/install.go:133 +#: commands/service_library_install.go:191 msgid "could not remove old library" msgstr "無法移除舊的程式庫" -#: arduino/sketch/yaml.go:78 arduino/sketch/yaml.go:82 -#: arduino/sketch/yaml.go:86 +#: internal/arduino/sketch/yaml.go:80 internal/arduino/sketch/yaml.go:84 +#: internal/arduino/sketch/yaml.go:88 msgid "could not update sketch project file" msgstr "無法更新 sketch 專案檔" -#: arduino/builder/core.go:95 +#: internal/arduino/builder/core.go:117 internal/arduino/builder/core.go:141 msgid "creating core cache folder: %s" msgstr "建立核心快取檔案夾: %s" -#: arduino/cores/packagemanager/install_uninstall.go:217 +#: internal/arduino/cores/packagemanager/install_uninstall.go:221 msgid "creating installed.json in %[1]s: %[2]s" msgstr "在 %[1]s:%[2]s 建立 installed.json" -#: arduino/resources/install.go:44 arduino/resources/install.go:48 +#: internal/arduino/resources/install.go:54 +#: internal/arduino/resources/install.go:58 msgid "creating temp dir for extraction: %s" msgstr "建立解壓縮用的臨時目錄: %s" -#: arduino/builder/sizer.go:195 +#: internal/arduino/builder/sizer.go:199 msgid "data section exceeds available space in board" msgstr "資料區已超出開發板的可用空間" -#: commands/lib/resolve_deps.go:56 +#: commands/service_library_resolve_deps.go:86 msgid "dependency '%s' is not available" msgstr "沒有 '%s' 的相依" -#: arduino/builder/export_cmake.go:115 -msgid "destination already exists" -msgstr "目的地已存在" - -#: arduino/libraries/librariesmanager/install.go:93 +#: internal/arduino/libraries/librariesmanager/install.go:93 msgid "destination dir %s already exists, cannot install" msgstr "目標目錄 %s 已存在,無法安裝" -#: arduino/libraries/librariesmanager/install.go:142 +#: internal/arduino/libraries/librariesmanager/install.go:137 msgid "destination directory already exists" msgstr "目標目錄已存在" -#: arduino/libraries/librariesmanager/install.go:282 +#: internal/arduino/libraries/librariesmanager/install.go:305 msgid "directory doesn't exist: %s" msgstr "目錄不存在: %s" -#: arduino/discovery/discoverymanager/discoverymanager.go:190 -msgid "discovery %[1]s process not started: %[2]w" -msgstr "探索 %[1]s 程序未啟動: %[2]w" +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:204 +msgid "discovery %[1]s process not started" +msgstr "探索%[1]s 程序沒啟動" -#: arduino/cores/packagemanager/loader.go:756 +#: internal/arduino/cores/packagemanager/loader.go:641 msgid "discovery %s not found" msgstr "探索 %s找不到 " -#: arduino/cores/packagemanager/loader.go:760 +#: internal/arduino/cores/packagemanager/loader.go:645 msgid "discovery %s not installed" msgstr "探索 %s 未安裝" -#: arduino/cores/packagemanager/package_manager.go:698 +#: internal/arduino/cores/packagemanager/package_manager.go:714 msgid "discovery release not found: %s" msgstr "找不到探索發行: %s" -#: internal/cli/core/download.go:39 internal/cli/core/install.go:41 +#: internal/cli/core/download.go:40 internal/cli/core/install.go:42 msgid "download a specific version (in this case 1.6.9)." msgstr "下載特定版本(在本例中為 1.6.9)" -#: internal/cli/core/download.go:38 internal/cli/core/install.go:39 +#: internal/cli/core/download.go:39 internal/cli/core/install.go:40 msgid "download the latest version of Arduino SAMD core." msgstr "下載 Arduino SAMD 核心最新版" -#: internal/cli/feedback/rpc_progress.go:73 +#: internal/cli/feedback/rpc_progress.go:74 msgid "downloaded" msgstr "已下載" -#: commands/instances.go:138 +#: commands/instances.go:56 msgid "downloading %[1]s tool: %[2]s" msgstr "正在下載 %[1]s 工具: %[2]s" -#: arduino/cores/fqbn.go:48 +#: pkg/fqbn/fqbn.go:63 msgid "empty board identifier" msgstr "清空開發板識別" -#: arduino/sketch/sketch.go:92 +#: internal/arduino/sketch/sketch.go:93 msgid "error loading sketch project file:" msgstr "錯誤載入 sketch 專案:" -#: arduino/cores/packagemanager/loader.go:650 +#: internal/arduino/cores/packagemanager/loader.go:612 msgid "error opening %s" msgstr "錯誤開啟 %s" -#: internal/cli/config/set.go:67 -msgid "error parsing value: %v" -msgstr "錯誤解析數值: %v" - -#: arduino/sketch/profiles.go:193 +#: internal/arduino/sketch/profiles.go:250 msgid "error parsing version constraints" msgstr "錯誤解析版本限制" -#: commands/board/list.go:116 +#: commands/service_board_identify.go:203 msgid "error processing response from server" msgstr "錯誤處理伺服器回應" -#: commands/board/list.go:96 +#: commands/service_board_identify.go:183 msgid "error querying Arduino Cloud Api" msgstr "錯誤查詢 Arduino Cloud Api" -#: arduino/resources/install.go:67 +#: internal/arduino/libraries/librariesmanager/install.go:178 +msgid "extracting archive" +msgstr "解開存檔" + +#: internal/arduino/resources/install.go:77 msgid "extracting archive: %s" msgstr "解開存檔: %s" -#: arduino/libraries/librariesmanager/install.go:183 -msgid "extracting archive: %w" -msgstr "解開存檔: %w" - -#: arduino/resources/checksums.go:144 +#: internal/arduino/resources/checksums.go:143 msgid "failed to compute hash of file \"%s\"" msgstr "計算 “%s” 檔的雜湊值失敗" -#: commands/board/list.go:91 +#: commands/service_board_identify.go:178 msgid "failed to initialize http client" msgstr "初始化 http 客戶端失敗" -#: arduino/resources/checksums.go:96 +#: internal/arduino/resources/checksums.go:98 msgid "fetched archive size differs from size specified in index" msgstr "抓取的存檔大小跟索引內指明的大小不同" -#: arduino/resources/install.go:128 +#: internal/arduino/resources/install.go:132 msgid "files in archive must be placed in a subdirectory" msgstr "存檔內的檔案必須放在子目錄下" -#: arduino/cores/packagemanager/loader.go:61 +#: internal/arduino/cores/packagemanager/loader.go:59 msgid "finding absolute path of %s" msgstr "尋找 %s 的絕對路徑" -#: internal/cli/cli.go:72 +#: internal/cli/cli.go:90 msgid "flags" msgstr "旗標" -#: arduino/cores/packagemanager/loader.go:100 +#: internal/arduino/cores/packagemanager/loader.go:98 msgid "following symlink %s" msgstr "跟隨符式鏈接 %s" -#: internal/cli/lib/download.go:39 +#: internal/cli/lib/download.go:40 msgid "for a specific version." msgstr "針對特定版本" -#: internal/cli/lib/check_deps.go:40 internal/cli/lib/download.go:38 -#: internal/cli/lib/install.go:48 +#: internal/cli/lib/check_deps.go:42 internal/cli/lib/download.go:39 +#: internal/cli/lib/install.go:49 msgid "for the latest version." msgstr "針對最新版本" -#: internal/cli/lib/check_deps.go:41 internal/cli/lib/install.go:49 -#: internal/cli/lib/install.go:51 +#: internal/cli/lib/check_deps.go:43 internal/cli/lib/install.go:50 +#: internal/cli/lib/install.go:52 msgid "for the specific version." msgstr "針對特定版本" -#: internal/inventory/inventory.go:68 -msgid "generating installation.id: %w" -msgstr "產出 installation.id: %w" +#: pkg/fqbn/fqbn.go:68 +msgid "fqbn's field %s contains an invalid character" +msgstr "fqbn 欄 %s 含有無效字元" -#: internal/inventory/inventory.go:74 -msgid "generating installation.secret: %w" -msgstr "產出 installation.secret: %w" +#: internal/inventory/inventory.go:67 +msgid "generating installation.id" +msgstr "產出 installation.id" -#: arduino/resources/download.go:53 +#: internal/inventory/inventory.go:73 +msgid "generating installation.secret" +msgstr "產出 installation.secret" + +#: internal/arduino/resources/download.go:55 msgid "getting archive file info: %s" msgstr "取得存檔資訊: %s" -#: arduino/resources/checksums.go:93 +#: internal/arduino/resources/checksums.go:93 msgid "getting archive info: %s" msgstr "取得存檔資訊: %s" -#: arduino/resources/checksums.go:66 arduino/resources/checksums.go:89 -#: arduino/resources/download.go:34 arduino/resources/helpers.go:38 -#: arduino/resources/install.go:55 +#: internal/arduino/resources/checksums.go:66 +#: internal/arduino/resources/checksums.go:89 +#: internal/arduino/resources/download.go:36 +#: internal/arduino/resources/helpers.go:39 +#: internal/arduino/resources/install.go:65 msgid "getting archive path: %s" msgstr "取得存檔路徑: %s" -#: arduino/cores/packagemanager/package_manager.go:311 +#: internal/arduino/cores/packagemanager/package_manager.go:322 msgid "getting build properties for board %[1]s: %[2]s" msgstr "取得開發板 %[1]s: %[2]s 的建構屬性" -#: arduino/cores/packagemanager/download.go:106 +#: internal/arduino/cores/packagemanager/download.go:106 msgid "getting discovery dependencies for platform %[1]s: %[2]s" msgstr "取得平台 %[1]s: %[2]s 的探索相依" -#: arduino/cores/packagemanager/download.go:114 +#: internal/arduino/cores/packagemanager/download.go:114 msgid "getting monitor dependencies for platform %[1]s: %[2]s" msgstr "取得平台 %[1]s: %[2]s 的監視器相依" -#: arduino/cores/packagemanager/loader.go:711 -msgid "getting parent dir of %[1]s: %[2]s" -msgstr "取得 %[1]s: %[2]s 的父目錄" - -#: arduino/cores/packagemanager/download.go:99 +#: internal/arduino/cores/packagemanager/download.go:99 msgid "getting tool dependencies for platform %[1]s: %[2]s" msgstr "取得平台 %[1]s: %[2]s 的工具相依" -#: arduino/libraries/librariesmanager/install.go:153 +#: internal/arduino/libraries/librariesmanager/install.go:148 msgid "install directory not set" msgstr "未設定安裝目錄" -#: commands/instances.go:142 +#: commands/instances.go:60 msgid "installing %[1]s tool: %[2]s" msgstr "安裝 %[1]s 工具: %[2]s" -#: arduino/cores/packagemanager/install_uninstall.go:209 +#: internal/arduino/cores/packagemanager/install_uninstall.go:213 msgid "installing platform %[1]s: %[2]s" msgstr "安裝平台%[1]s: %[2]s" -#: internal/cli/feedback/terminal.go:36 +#: internal/cli/feedback/terminal.go:38 msgid "interactive terminal not supported for the '%s' output format" msgstr "互動終端不支援 '%s' 輸出格式" -#: arduino/sketch/profiles.go:191 +#: internal/arduino/sketch/profiles.go:248 msgid "invalid '%s' directive" msgstr "無效的 '%s' 指令" -#: arduino/discovery/discovery.go:212 -msgid "invalid 'add' message: missing port" -msgstr "無效的 “加入” 訊息:找不到連接埠" - -#: arduino/discovery/discovery.go:222 -msgid "invalid 'remove' message: missing port" -msgstr "無效的 “移除” 訊息:找不到連接埠" - -#: arduino/resources/checksums.go:44 +#: internal/arduino/resources/checksums.go:44 msgid "invalid checksum format: %s" msgstr "無效的校驗碼格式: %s" -#: arduino/cores/fqbn.go:54 arduino/cores/fqbn.go:59 +#: pkg/fqbn/fqbn.go:75 pkg/fqbn/fqbn.go:80 msgid "invalid config option: %s" msgstr "無效的設定選項: %s" -#: internal/cli/arguments/reference.go:90 +#: internal/cli/arguments/reference.go:92 msgid "invalid empty core architecture '%s'" msgstr "無效的空核心架構 '%s'" -#: internal/cli/arguments/reference.go:67 +#: internal/cli/arguments/reference.go:69 msgid "invalid empty core argument" msgstr "無效的空核心參數" -#: internal/cli/arguments/reference.go:86 +#: internal/cli/arguments/reference.go:89 msgid "invalid empty core name '%s'" msgstr "無效的空核心名 '%s'" -#: internal/cli/arguments/reference.go:71 +#: internal/cli/arguments/reference.go:74 msgid "invalid empty core reference '%s'" msgstr "無效的空核心參照 '%s'" -#: internal/cli/arguments/reference.go:76 +#: internal/cli/arguments/reference.go:79 msgid "invalid empty core version: '%s'" msgstr "無效的空核心版本: '%s'" @@ -2954,343 +3088,348 @@ msgstr "無效的空程式庫名" msgid "invalid empty library version: %s" msgstr "無效的空程式庫版本: %s" -#: arduino/cores/board.go:142 +#: internal/arduino/cores/board.go:144 msgid "invalid empty option found" msgstr "找到無效的空選項" -#: arduino/libraries/librariesmanager/install.go:272 +#: internal/arduino/libraries/librariesmanager/install.go:276 +#: internal/arduino/libraries/librariesmanager/install.go:279 +#: internal/arduino/libraries/librariesmanager/install.go:286 +#: internal/arduino/libraries/librariesmanager/install.go:290 msgid "invalid git url" msgstr "無效的 git 網址" -#: arduino/resources/checksums.go:48 +#: internal/arduino/resources/checksums.go:48 msgid "invalid hash '%[1]s': %[2]s" msgstr "無效的雜湊 '%[1]s': %[2]s" -#: internal/cli/arguments/reference.go:83 +#: internal/cli/arguments/reference.go:86 msgid "invalid item %s" msgstr "無效的項目 %s" -#: arduino/sketch/profiles.go:225 +#: internal/arduino/sketch/profiles.go:282 msgid "invalid library directive:" msgstr "無效的程式庫指令:" -#: arduino/libraries/libraries_layout.go:65 +#: internal/arduino/libraries/libraries_layout.go:67 msgid "invalid library layout: %s" msgstr "無效的程式庫配置: %s" -#: arduino/libraries/libraries_location.go:88 +#: internal/arduino/libraries/libraries_location.go:90 msgid "invalid library location: %s" msgstr "無效的程式庫位置: %s" -#: arduino/libraries/loader.go:139 +#: internal/arduino/libraries/loader.go:140 msgid "invalid library: no header files found" msgstr "無效的程式庫: 找不到 .h 標頭檔" -#: arduino/cores/board.go:145 +#: internal/arduino/cores/board.go:147 msgid "invalid option '%s'" msgstr "無效的選項 '%s'" -#: internal/cli/arguments/show_properties.go:51 +#: internal/cli/arguments/show_properties.go:52 msgid "invalid option '%s'." msgstr "無效的選項 '%s'" -#: internal/inventory/inventory.go:93 -msgid "invalid path creating config dir: %[1]s error: %[2]w" -msgstr "無效的建定目錄路徑: %[1]s 錯誤: %[2]w" - -#: internal/inventory/inventory.go:99 -msgid "invalid path writing inventory file: %[1]s error: %[2]w" -msgstr "無效的庫存檔路徑: %[1]s 錯誤:%[2]w" +#: internal/inventory/inventory.go:92 +msgid "invalid path creating config dir: %[1]s error" +msgstr "無效路徑難建立設定目錄: %[1]s 錯誤" -#: arduino/cores/packageindex/index.go:283 -msgid "invalid platform archive size: %s" -msgstr "無效的平台存檔大小: %s" +#: internal/inventory/inventory.go:98 +msgid "invalid path writing inventory file: %[1]s error" +msgstr "無效路徑來寫入檔案: %[1]s 錯誤" -#: arduino/sketch/profiles.go:195 +#: internal/arduino/sketch/profiles.go:252 msgid "invalid platform identifier" msgstr "無效的平台識別" -#: arduino/sketch/profiles.go:205 +#: internal/arduino/sketch/profiles.go:262 msgid "invalid platform index URL:" msgstr "無效的平台索引位址:" -#: arduino/cores/packagemanager/loader.go:363 +#: internal/arduino/cores/packagemanager/loader.go:326 msgid "invalid pluggable monitor reference: %s" msgstr "無效的插拔式監視器參照: %s" -#: internal/cli/monitor/monitor.go:126 +#: internal/cli/monitor/monitor.go:176 msgid "invalid port configuration value for %s: %s" msgstr "無效的連接埠設定值 %s : %s" -#: internal/cli/monitor/monitor.go:134 -msgid "invalid port configuration: %s" +#: internal/cli/monitor/monitor.go:182 +msgid "invalid port configuration: %s=%s" msgstr "無效的連接埠設定: %s" -#: commands/upload/upload.go:644 +#: commands/service_upload.go:725 msgid "invalid recipe '%[1]s': %[2]s" msgstr "無效的作法'%[1]s': %[2]s" -#: commands/sketch/new.go:86 +#: commands/service_sketch_new.go:86 msgid "" "invalid sketch name \"%[1]s\": the first character must be alphanumeric or " "\"_\", the following ones can also contain \"-\" and \".\". The last one " "cannot be \".\"." msgstr "無效的 sketch 名 \\\"%[1]s\\\": 首字元必須是英數字或底線, 接著可以是減號和逗點, 但最後字元不可以是逗點" -#: arduino/cores/board.go:149 +#: internal/arduino/cores/board.go:151 msgid "invalid value '%[1]s' for option '%[2]s'" msgstr "無效的 '%[2]s' 選項值 '%[1]s' " -#: arduino/cores/packagemanager/loader.go:273 +#: internal/arduino/cores/packagemanager/loader.go:231 msgid "invalid version directory %s" msgstr "無效的版本目錄 %s" -#: arduino/sketch/profiles.go:227 +#: internal/arduino/sketch/profiles.go:284 msgid "invalid version:" msgstr "無效的版本:" -#: commands/daemon/settings.go:111 commands/daemon/settings.go:166 -msgid "key not found in settings" -msgstr "設定中找不到鍵值" - -#: internal/cli/core/search.go:45 +#: internal/cli/core/search.go:39 msgid "keywords" msgstr "關鍵字" -#: arduino/libraries/librariesmanager/install.go:130 +#: internal/cli/lib/search.go:87 +msgid "libraries authored by Daniel Garcia" +msgstr "Daniel Garcia 發行的程式庫" + +#: internal/cli/lib/search.go:88 +msgid "libraries authored only by Adafruit with \"gfx\" in their Name" +msgstr "限 Adafruit 發行, 名字上有 \"gfx\" 的程式庫" + +#: internal/cli/lib/search.go:90 +msgid "libraries that depend on at least \"IRremote\"" +msgstr "至少基於 \"IRremote\" 的程式庫" + +#: internal/cli/lib/search.go:91 +msgid "libraries that depend only on \"IRremote\"" +msgstr "只基於 \"IRremote\" 的程式庫" + +#: internal/cli/lib/search.go:85 +msgid "libraries with \"buzzer\" in the Name field" +msgstr "名字有 \"buzzer\" 的程式庫" + +#: internal/cli/lib/search.go:86 +msgid "libraries with a Name exactly matching \"pcf8523\"" +msgstr "名字上有 \"pcf8523\" 的程式庫" + +#: internal/arduino/libraries/librariesmanager/install.go:125 msgid "library %s already installed" msgstr "程式庫 %s 已安裝" -#: arduino/libraries/librariesmanager/install.go:319 +#: internal/arduino/libraries/librariesmanager/install.go:342 msgid "library not valid" msgstr "程式庫無效" -#: arduino/libraries/librariesmanager/librariesmanager.go:203 -msgid "library path does not exist: %s" -msgstr "程式庫路徑不存在: %s" - -#: arduino/serialutils/serialutils.go:67 -msgid "listing serial ports" -msgstr "列出序列埠" - -#: arduino/cores/packagemanager/loader.go:301 -#: arduino/cores/packagemanager/loader.go:310 -#: arduino/cores/packagemanager/loader.go:315 +#: internal/arduino/cores/packagemanager/loader.go:255 +#: internal/arduino/cores/packagemanager/loader.go:268 +#: internal/arduino/cores/packagemanager/loader.go:276 msgid "loading %[1]s: %[2]s" msgstr "載入 %[1]s: %[2]s" -#: arduino/cores/packagemanager/loader.go:351 +#: internal/arduino/cores/packagemanager/loader.go:314 msgid "loading boards: %s" msgstr "載入開發板: %s" -#: arduino/cores/packagemanager/loader.go:666 -msgid "loading bundled tools from %s" -msgstr "從 %s 載入整捆的工具" - -#: arduino/cores/packagemanager/package_manager.go:452 -#: arduino/cores/packagemanager/package_manager.go:467 +#: internal/arduino/cores/packagemanager/package_manager.go:469 +#: internal/arduino/cores/packagemanager/package_manager.go:484 msgid "loading json index file %[1]s: %[2]s" msgstr "載入json 索引檔 %[1]s:%[2]s" -#: arduino/libraries/librariesmanager/librariesmanager.go:185 -#: arduino/libraries/librariesmanager/librariesmanager.go:208 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:224 msgid "loading library from %[1]s: %[2]s" msgstr "從 %[1]s: %[2]s載入程式庫" -#: arduino/libraries/loader.go:54 +#: internal/arduino/libraries/loader.go:55 msgid "loading library.properties: %s" msgstr "載入 library.properties: %s" -#: arduino/cores/packagemanager/loader.go:250 -#: arduino/cores/packagemanager/loader.go:278 +#: internal/arduino/cores/packagemanager/loader.go:208 +#: internal/arduino/cores/packagemanager/loader.go:236 msgid "loading platform release %s" msgstr "載入平台發行版 %s" -#: arduino/cores/packagemanager/loader.go:197 +#: internal/arduino/cores/packagemanager/loader.go:195 msgid "loading platform.txt" msgstr "載入 platform.txt" -#: arduino/cores/packagemanager/profiles.go:44 +#: internal/arduino/cores/packagemanager/profiles.go:47 msgid "loading required platform %s" msgstr "載入需要的平台 %s" -#: arduino/cores/packagemanager/profiles.go:60 +#: internal/arduino/cores/packagemanager/profiles.go:63 msgid "loading required tool %s" msgstr "載入需要的工具 %s" -#: arduino/cores/packagemanager/loader.go:625 +#: internal/arduino/cores/packagemanager/loader.go:587 msgid "loading tool release in %s" msgstr "載入在 %s 的工具" -#: arduino/cores/packagemanager/loader.go:190 +#: internal/arduino/cores/packagemanager/loader.go:188 msgid "looking for boards.txt in %s" msgstr "在 %s 尋找 boards.txt" -#: arduino/sketch/sketch.go:76 +#: commands/service_upload.go:807 +msgid "looking for build artifacts" +msgstr "尋找建構成品" + +#: internal/arduino/sketch/sketch.go:77 msgid "main file missing from sketch: %s" msgstr "sketch 缺少主檔: %s" -#: arduino/sketch/profiles.go:189 +#: internal/arduino/sketch/profiles.go:246 msgid "missing '%s' directive" msgstr "缺少 '%s' 指令" -#: arduino/resources/checksums.go:40 +#: internal/arduino/resources/checksums.go:40 msgid "missing checksum for: %s" msgstr "缺少 %s 的校驗碼" -#: arduino/cores/packagemanager/package_manager.go:413 +#: internal/arduino/cores/packagemanager/package_manager.go:430 msgid "missing package %[1]s referenced by board %[2]s" msgstr "缺少開發板 %[2]s 參照的套件 %[1]s" -#: internal/cli/core/upgrade.go:86 +#: internal/cli/core/upgrade.go:101 msgid "missing package index for %s, future updates cannot be guaranteed" msgstr "缺少 %s 的套件索引, 不保証未來更新與否" -#: arduino/cores/packagemanager/package_manager.go:418 +#: internal/arduino/cores/packagemanager/package_manager.go:435 msgid "missing platform %[1]s:%[2]s referenced by board %[3]s" msgstr "缺少被開發板 %[3]s 參照的平台 %[1]s : %[2]s" -#: arduino/cores/packagemanager/package_manager.go:423 +#: internal/arduino/cores/packagemanager/package_manager.go:440 msgid "missing platform release %[1]s:%[2]s referenced by board %[3]s" msgstr "缺少開發板 %[3]s 參照的平台發行版 %[1]s : %[2]s" -#: arduino/resources/index.go:152 +#: internal/arduino/resources/index.go:153 msgid "missing signature" msgstr "找不到簽名" -#: arduino/cores/packagemanager/package_manager.go:709 +#: internal/arduino/cores/packagemanager/package_manager.go:725 msgid "monitor release not found: %s" msgstr "沒找到監視器發行版: %s" -#: arduino/libraries/librariesmanager/install.go:201 -#: arduino/libraries/librariesmanager/install.go:250 -#: arduino/resources/install.go:96 +#: internal/arduino/libraries/librariesmanager/install.go:196 +#: internal/arduino/libraries/librariesmanager/install.go:247 +#: internal/arduino/resources/install.go:106 msgid "moving extracted archive to destination dir: %s" msgstr "移動解壓縮的存檔到目標資料夾: %s" -#: commands/upload/upload.go:767 +#: commands/service_upload.go:859 msgid "multiple build artifacts found: '%[1]s' and '%[2]s'" msgstr "找到多個建構成品: '%[1]s' 和 '%[2]s'" -#: arduino/sketch/sketch.go:68 +#: internal/arduino/sketch/sketch.go:69 msgid "multiple main sketch files found (%[1]v, %[2]v)" msgstr "找到多個 sketch 檔 (%[1]v, %[2]v)" -#: arduino/cores/packagemanager/install_uninstall.go:335 +#: internal/arduino/cores/packagemanager/install_uninstall.go:340 msgid "" "no compatible version of %[1]s tools found for the current os, try " "contacting %[2]s" msgstr "沒找到目前作業系統相容工具版本 %[1]s,請聯絡 %[2]s" -#: executils/process.go:40 -msgid "no executable specified" -msgstr "未指定執行檔" - -#: commands/daemon/daemon.go:92 +#: commands/service_board_list.go:106 msgid "no instance specified" msgstr "未指定實例" -#: commands/upload/upload.go:722 +#: commands/service_upload.go:814 msgid "no sketch or build directory/file specified" msgstr "未指定 sketch 或建構目錄/檔" -#: arduino/sketch/sketch.go:55 +#: internal/arduino/sketch/sketch.go:56 msgid "no such file or directory" msgstr "沒有這檔案/目錄" -#: arduino/resources/install.go:131 +#: internal/arduino/resources/install.go:135 msgid "no unique root dir in archive, found '%[1]s' and '%[2]s'" msgstr "存檔中沒有單一的根目錄,找到了 '%[1]s' 和 '%[2]s'" -#: commands/upload/upload.go:639 +#: commands/service_upload.go:720 msgid "no upload port provided" msgstr "未提供上傳連接埠" -#: arduino/sketch/sketch.go:278 +#: internal/arduino/sketch/sketch.go:279 msgid "no valid sketch found in %[1]s: missing %[2]s" msgstr "在 %[1]s 找不到有效的 sketch : 缺少 %[2]s" -#: arduino/cores/packagemanager/download.go:128 +#: internal/arduino/cores/packagemanager/download.go:128 msgid "no versions available for the current OS, try contacting %s" msgstr "目前的作業系統沒可用的版本,請聯絡 %s" -#: internal/cli/feedback/terminal.go:39 +#: pkg/fqbn/fqbn.go:53 +msgid "not an FQBN: %s" +msgstr "不是 FQBN: %s" + +#: internal/cli/feedback/terminal.go:52 msgid "not running in a terminal" msgstr "沒在終端執行" -#: arduino/resources/checksums.go:71 arduino/resources/install.go:59 +#: internal/arduino/resources/checksums.go:71 +#: internal/arduino/resources/install.go:69 msgid "opening archive file: %s" msgstr "開啟存檔: %s" -#: arduino/cores/packagemanager/loader.go:266 +#: internal/arduino/cores/packagemanager/loader.go:224 msgid "opening boards.txt" msgstr "開啟 boards.txt" -#: arduino/serialutils/serialutils.go:38 -msgid "opening port at 1200bps" -msgstr "以 1200 bps 開啟連接埠" - -#: arduino/security/signatures.go:83 +#: internal/arduino/security/signatures.go:82 msgid "opening signature file: %s" msgstr "開啟簽名檔: %s" -#: arduino/security/signatures.go:78 +#: internal/arduino/security/signatures.go:78 msgid "opening target file: %s" msgstr "開啟目標檔: %s" -#: arduino/cores/packagemanager/download.go:76 arduino/cores/status.go:97 -#: arduino/cores/status.go:122 arduino/cores/status.go:149 +#: internal/arduino/cores/packagemanager/download.go:76 +#: internal/arduino/cores/status.go:97 internal/arduino/cores/status.go:122 +#: internal/arduino/cores/status.go:149 msgid "package %s not found" msgstr "找不到套件 %s" -#: arduino/cores/packagemanager/package_manager.go:481 +#: internal/arduino/cores/packagemanager/package_manager.go:498 msgid "package '%s' not found" msgstr "找不到套件 '%s'" -#: arduino/cores/packagemanager/loader.go:221 -msgid "parsing IDE bundled index" -msgstr "解析 IDE 同捆的索引" - -#: arduino/cores/board.go:165 -#: arduino/cores/packagemanager/package_manager.go:252 +#: internal/arduino/cores/board.go:167 +#: internal/arduino/cores/packagemanager/package_manager.go:263 msgid "parsing fqbn: %s" msgstr "解析 FQBN:%s" -#: arduino/libraries/librariesindex/json.go:72 +#: internal/arduino/libraries/librariesindex/json.go:70 msgid "parsing library_index.json: %s" msgstr "解析 library_index.json: %s" -#: arduino/cores/packagemanager/loader.go:181 +#: internal/arduino/cores/packagemanager/loader.go:179 msgid "path is not a platform directory: %s" msgstr "路徑不是平台目錄: %s" -#: arduino/cores/packagemanager/download.go:80 +#: internal/arduino/cores/packagemanager/download.go:80 msgid "platform %[1]s not found in package %[2]s" msgstr "%[2]s 套件裏找不到 %[1]s 平台" -#: arduino/cores/packagemanager/download.go:92 -msgid "platform %s has no available releases" -msgstr "平台 %s 沒有可用的發行版" - -#: arduino/cores/packagemanager/package_manager.go:298 +#: internal/arduino/cores/packagemanager/package_manager.go:309 msgid "platform %s is not installed" msgstr "平台 %s 未安裝" -#: arduino/cores/packagemanager/install_uninstall.go:177 -#: arduino/cores/packagemanager/install_uninstall.go:281 -#: arduino/cores/packagemanager/loader.go:457 commands/compile/compile.go:102 +#: internal/arduino/cores/packagemanager/download.go:92 +msgid "platform is not available for your OS" +msgstr "平台不支援使用中的作業系統" + +#: commands/service_compile.go:129 +#: internal/arduino/cores/packagemanager/install_uninstall.go:181 +#: internal/arduino/cores/packagemanager/install_uninstall.go:285 +#: internal/arduino/cores/packagemanager/loader.go:417 msgid "platform not installed" msgstr "平台未安裝" -#: internal/cli/compile/compile.go:138 +#: internal/cli/compile/compile.go:142 msgid "please use --build-property instead." msgstr "請改用 --build-property" -#: arduino/discovery/discoverymanager/discoverymanager.go:126 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:133 msgid "pluggable discovery already added: %s" msgstr "已加入可插拔探索: %s" -#: internal/cli/board/attach.go:34 +#: internal/cli/board/attach.go:35 msgid "port" msgstr "連接埠" @@ -3298,291 +3437,277 @@ msgstr "連接埠" msgid "port not found: %[1]s %[2]s" msgstr "沒找到連接埠: %[1]s %[2]s" -#: arduino/monitor/monitor.go:236 +#: internal/cli/board/attach.go:35 +msgid "programmer" +msgstr "燒錄器" + +#: internal/arduino/monitor/monitor.go:235 msgid "protocol version not supported: requested %[1]d, got %[2]d" msgstr "協議版本不被支援: 要 %[1]d,卻得到 %[2]d" -#: arduino/discovery/discovery.go:354 -msgid "protocol version not supported: requested 1, got %d" -msgstr "協議版本不被支援: 要 1,卻得到%d" - -#: arduino/cores/packagemanager/loader.go:716 -msgid "reading %[1]s: %[2]s" -msgstr "讀取 %[1]s: %[2]s" - -#: arduino/libraries/librariesmanager/librariesmanager.go:176 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:213 msgid "reading dir %[1]s: %[2]s" msgstr "讀取目錄 %[1]s: %[2]s" -#: arduino/libraries/loader.go:198 -msgid "reading directory %[1]s content: %[2]w" -msgstr "讀取目錄 %[1]s 內容: %[2]w" +#: internal/arduino/libraries/loader.go:199 +msgid "reading directory %[1]s content" +msgstr "讀取目錄 %[1]s 的內容" -#: arduino/cores/packagemanager/loader.go:71 -#: arduino/cores/packagemanager/loader.go:153 -#: arduino/cores/packagemanager/loader.go:260 -#: arduino/cores/packagemanager/loader.go:617 +#: internal/arduino/cores/packagemanager/loader.go:69 +#: internal/arduino/cores/packagemanager/loader.go:151 +#: internal/arduino/cores/packagemanager/loader.go:218 +#: internal/arduino/cores/packagemanager/loader.go:579 msgid "reading directory %s" msgstr "讀取目錄 %s" -#: arduino/libraries/librariesmanager/install.go:292 -msgid "reading directory %s content: %w" -msgstr "讀取目錄%s 內容: %w" +#: internal/arduino/libraries/librariesmanager/install.go:315 +msgid "reading directory %s content" +msgstr "讀取目錄 %s 的內容" -#: arduino/builder/sketch.go:83 +#: internal/arduino/builder/sketch.go:83 msgid "reading file %[1]s: %[2]s" msgstr "讀取檔案%[1]s: %[2]s" -#: arduino/sketch/sketch.go:209 -msgid "reading files: %v" -msgstr "讀取檔案: %v" +#: internal/arduino/sketch/sketch.go:198 +msgid "reading files" +msgstr "讀取檔案" -#: arduino/libraries/librariesresolver/cpp.go:104 +#: internal/arduino/libraries/librariesresolver/cpp.go:90 msgid "reading lib headers: %s" msgstr "讀取程式庫頭檔: %s" -#: arduino/libraries/libraries.go:228 -msgid "reading lib src dir: %s" -msgstr "正在讀取 lib src 目錄: %s" +#: internal/arduino/libraries/libraries.go:115 +msgid "reading library headers" +msgstr "讀取程式庫標頭" -#: arduino/libraries/libraries.go:116 -msgid "reading library headers: %w" -msgstr "讀取程式庫標頭檔:%w" +#: internal/arduino/libraries/libraries.go:227 +msgid "reading library source directory: %s" +msgstr "讀取程式庫來源目錄: %s" -#: arduino/libraries/librariesindex/json.go:66 +#: internal/arduino/libraries/librariesindex/json.go:64 msgid "reading library_index.json: %s" msgstr "讀取 library_index.json: %s" -#: arduino/resources/install.go:121 +#: internal/arduino/resources/install.go:125 msgid "reading package root dir: %s" msgstr "讀取套件根目錄: %s" -#: commands/upload/upload.go:633 +#: internal/arduino/sketch/sketch.go:108 +msgid "reading sketch files" +msgstr "讀取 sketch 檔" + +#: commands/service_upload.go:714 msgid "recipe not found '%s'" msgstr "作法未找到 %s" -#: arduino/cores/packagemanager/package_manager.go:557 +#: internal/arduino/cores/packagemanager/package_manager.go:574 msgid "release %[1]s not found for tool %[2]s" msgstr "找不到工具 %[2]s 的發行版 %[1]s" -#: arduino/cores/status.go:91 arduino/cores/status.go:115 -#: arduino/cores/status.go:142 +#: internal/arduino/cores/status.go:91 internal/arduino/cores/status.go:115 +#: internal/arduino/cores/status.go:142 msgid "release cannot be nil" msgstr "發行版不能是無" -#: arduino/resources/download.go:44 +#: internal/arduino/resources/download.go:46 msgid "removing corrupted archive file: %s" msgstr "刪除損壞的存檔 %s" -#: arduino/libraries/librariesmanager/install.go:156 +#: internal/arduino/libraries/librariesmanager/install.go:151 msgid "removing library directory: %s" msgstr "刪除程式庫目錄: %s" -#: arduino/cores/packagemanager/install_uninstall.go:308 +#: internal/arduino/cores/packagemanager/install_uninstall.go:312 msgid "removing platform files: %s" msgstr "刪除平台檔: %s" -#: arduino/cores/packagemanager/download.go:87 +#: internal/arduino/cores/packagemanager/download.go:87 msgid "required version %[1]s not found for platform %[2]s" msgstr "找不到平台 %[2]s 需要的版本 %[1]s" -#: arduino/security/signatures.go:74 +#: internal/arduino/security/signatures.go:74 msgid "retrieving Arduino public keys: %s" msgstr "取得 Arduino 公鑰:%s" -#: arduino/libraries/loader.go:116 arduino/libraries/loader.go:154 -msgid "scanning examples: %s" -msgstr "掃描範例: %s" - -#: arduino/cores/packagemanager/loader.go:702 -msgid "searching for builtin_tools_versions.txt in %[1]s: %[2]s" -msgstr "在 %[1]s: %[2]s 尋找 builtin_tools_versions.txt" +#: internal/arduino/libraries/loader.go:117 +#: internal/arduino/libraries/loader.go:155 +msgid "scanning sketch examples" +msgstr "掃描 sketch 範例" -#: arduino/resources/install.go:73 +#: internal/arduino/resources/install.go:83 msgid "searching package root dir: %s" msgstr "尋找套件根目錄: %s" -#: arduino/serialutils/serialutils.go:48 -msgid "setting DTR to OFF" -msgstr "將 DTR 設為 OFF" +#: internal/arduino/security/signatures.go:87 +msgid "signature expired: is your system clock set correctly?" +msgstr "簽名過期:系統時間有設定正確嗎?" -#: commands/sketch/new.go:78 +#: commands/service_sketch_new.go:78 msgid "sketch name cannot be empty" msgstr "sketch 名字不能空白" -#: commands/sketch/new.go:91 +#: commands/service_sketch_new.go:91 msgid "sketch name cannot be the reserved name \"%[1]s\"" msgstr "sketch 名字不能使用保留名'%[1]s'" -#: commands/sketch/new.go:81 +#: commands/service_sketch_new.go:81 msgid "" "sketch name too long (%[1]d characters). Maximum allowed length is %[2]d" msgstr "sketch 名字過長(%[1]d 字元)。 最大允許 %[2]d 字元" -#: arduino/sketch/sketch.go:48 arduino/sketch/sketch.go:53 +#: internal/arduino/sketch/sketch.go:49 internal/arduino/sketch/sketch.go:54 msgid "sketch path is not valid" msgstr "sketch 路徑無效" -#: internal/cli/board/attach.go:34 internal/cli/sketch/archive.go:36 +#: internal/cli/board/attach.go:35 internal/cli/sketch/archive.go:36 msgid "sketchPath" msgstr "sketchPath" -#: arduino/builder/export_cmake.go:107 -msgid "source is not a directory" -msgstr "來源不是目錄" - -#: arduino/discovery/discoverymanager/discoverymanager.go:194 +#: internal/arduino/discovery/discoverymanager/discoverymanager.go:208 msgid "starting discovery %s" msgstr "開始探索 %s" -#: arduino/resources/checksums.go:118 +#: internal/arduino/resources/checksums.go:117 msgid "testing archive checksum: %s" msgstr "測試存檔校驗碼: %s" -#: arduino/resources/checksums.go:111 +#: internal/arduino/resources/checksums.go:112 msgid "testing archive size: %s" msgstr "測試存檔大小: %s" -#: arduino/resources/checksums.go:105 +#: internal/arduino/resources/checksums.go:106 msgid "testing if archive is cached: %s" msgstr "測試存檔是否被快取: %s" -#: arduino/resources/install.go:37 +#: internal/arduino/resources/install.go:46 msgid "testing local archive integrity: %s" msgstr "測試本地存檔完整性: %s" -#: arduino/builder/sizer.go:190 +#: internal/arduino/builder/sizer.go:194 msgid "text section exceeds available space in board" msgstr "本文區已超出開發板的可用空間" -#: arduino/builder/internal/detector/detector.go:210 -#: arduino/builder/internal/preprocessor/ctags.go:70 +#: internal/arduino/builder/internal/detector/detector.go:214 +#: internal/arduino/builder/internal/preprocessor/ctags.go:70 msgid "the compilation database may be incomplete or inaccurate" msgstr "編譯資料庫可能不完整或不準確" -#: commands/core/list.go:63 -msgid "the platform has no releases" -msgstr "該平台沒有發行版" - -#: commands/board/list.go:103 +#: commands/service_board_identify.go:190 msgid "the server responded with status %s" msgstr "伺服器回應狀態 %s" -#: arduino/monitor/monitor.go:140 +#: internal/arduino/monitor/monitor.go:139 msgid "timeout waiting for message" msgstr "等待訊息超時" -#: arduino/discovery/discovery.go:251 -msgid "timeout waiting for message from %s" -msgstr "等待來自 %s 的訊息超時" - -#: arduino/cores/packagemanager/install_uninstall.go:401 +#: internal/arduino/cores/packagemanager/install_uninstall.go:406 msgid "tool %s is not managed by package manager" msgstr "工具 %s 不是由套件管理員管理的" -#: arduino/cores/status.go:101 arduino/cores/status.go:126 -#: arduino/cores/status.go:153 +#: internal/arduino/cores/status.go:101 internal/arduino/cores/status.go:126 +#: internal/arduino/cores/status.go:153 msgid "tool %s not found" msgstr "找不到工具 %s" -#: arduino/cores/packagemanager/package_manager.go:507 +#: internal/arduino/cores/packagemanager/package_manager.go:524 msgid "tool '%[1]s' not found in package '%[2]s'" msgstr "套件 '%[2]s' 裏找不到工具 '%[1]s'" -#: arduino/cores/packagemanager/install_uninstall.go:396 +#: internal/arduino/cores/packagemanager/install_uninstall.go:401 msgid "tool not installed" msgstr "工具未安裝" -#: arduino/cores/packagemanager/package_manager.go:687 -#: arduino/cores/packagemanager/package_manager.go:793 +#: internal/arduino/cores/packagemanager/package_manager.go:703 +#: internal/arduino/cores/packagemanager/package_manager.go:809 msgid "tool release not found: %s" msgstr "工具發行未找到: %s" -#: arduino/cores/status.go:105 +#: internal/arduino/cores/status.go:105 msgid "tool version %s not found" msgstr "工具版本 %s 未找到" -#: commands/lib/install.go:61 +#: commands/service_library_install.go:93 msgid "" "two different versions of the library %[1]s are required: %[2]s and %[3]s" msgstr "需要兩個不同版本的程式庫 %[1]s : %[2]s 和 %[3]s" -#: arduino/builder/sketch.go:76 arduino/builder/sketch.go:120 +#: internal/arduino/builder/sketch.go:76 +#: internal/arduino/builder/sketch.go:120 msgid "unable to compute relative path to the sketch for the item" msgstr "無法計算 sketch 的相對路徑" -#: arduino/builder/sketch.go:45 +#: internal/arduino/builder/sketch.go:45 msgid "unable to create a folder to save the sketch" msgstr "無法建立保存 sketch 的資料夾" -#: arduino/builder/sketch.go:126 +#: internal/arduino/builder/sketch.go:126 msgid "unable to create the folder containing the item" msgstr "無法建立含有項目的資料夾" -#: internal/cli/config/dump.go:59 +#: internal/cli/config/get.go:85 msgid "unable to marshal config to YAML: %v" msgstr "無法將 config 轉成 YAML: %v" -#: arduino/builder/sketch.go:164 +#: internal/arduino/builder/sketch.go:164 msgid "unable to read contents of the destination item" msgstr "無法讀取目標項目的內容" -#: arduino/builder/sketch.go:137 +#: internal/arduino/builder/sketch.go:137 msgid "unable to read contents of the source item" msgstr "無法讀取來源項目的內容" -#: arduino/builder/sketch.go:147 +#: internal/arduino/builder/sketch.go:147 msgid "unable to write to destination file" msgstr "無法寫入目標檔" -#: arduino/cores/packagemanager/package_manager.go:286 +#: internal/arduino/cores/packagemanager/package_manager.go:297 msgid "unknown package %s" msgstr "未知的套件 %s" -#: arduino/cores/packagemanager/package_manager.go:293 +#: internal/arduino/cores/packagemanager/package_manager.go:304 msgid "unknown platform %s:%s" msgstr "未知的平台 %s:%s" -#: arduino/sketch/sketch.go:147 +#: internal/arduino/sketch/sketch.go:137 msgid "unknown sketch file extension '%s'" msgstr "未知的 sketch 副檔名 %s" -#: arduino/resources/checksums.go:61 +#: internal/arduino/resources/checksums.go:61 msgid "unsupported hash algorithm: %s" msgstr "未支援的雜湊演算法: %s" -#: internal/cli/core/upgrade.go:43 +#: internal/cli/core/upgrade.go:44 msgid "upgrade arduino:samd to the latest version" msgstr "升級 arduino:samd 到最新版" -#: internal/cli/core/upgrade.go:41 +#: internal/cli/core/upgrade.go:42 msgid "upgrade everything to the latest version" msgstr "升級全部內容到最新版" -#: commands/upload/upload.go:668 +#: commands/service_upload.go:760 msgid "uploading error: %s" msgstr "上傳錯誤: %s" -#: arduino/libraries/librariesmanager/librariesmanager.go:159 +#: internal/arduino/libraries/librariesmanager/librariesmanager.go:189 msgid "user directory not set" msgstr "用戶目錄未設定" -#: internal/cli/feedback/terminal.go:73 +#: internal/cli/feedback/terminal.go:94 msgid "user input not supported for the '%s' output format" msgstr "用戶輸入不支援 '%s' 輸出格式" -#: internal/cli/feedback/terminal.go:76 +#: internal/cli/feedback/terminal.go:97 msgid "user input not supported in non interactive mode" msgstr "在非互動模式下不支援用戶輸入" -#: arduino/cores/packagemanager/profiles.go:176 +#: internal/arduino/cores/packagemanager/profiles.go:175 msgid "version %s not available for this operating system" msgstr "版本 %s 不適合本作業系統" -#: arduino/cores/packagemanager/profiles.go:155 +#: internal/arduino/cores/packagemanager/profiles.go:154 msgid "version %s not found" msgstr "沒找到版本 %s " -#: commands/board/list.go:121 +#: commands/service_board_identify.go:208 msgid "wrong format in server response" msgstr "伺服器回應錯誤格式" diff --git a/i18n/detect.go b/internal/locales/detect.go similarity index 98% rename from i18n/detect.go rename to internal/locales/detect.go index f35d4f1b94e..36279f1388b 100644 --- a/i18n/detect.go +++ b/internal/locales/detect.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package i18n +package locales import ( "os" diff --git a/i18n/detect_cgo_darwin.go b/internal/locales/detect_cgo_darwin.go similarity index 98% rename from i18n/detect_cgo_darwin.go rename to internal/locales/detect_cgo_darwin.go index c9fd4ecefb9..7c613cf6135 100644 --- a/i18n/detect_cgo_darwin.go +++ b/internal/locales/detect_cgo_darwin.go @@ -15,7 +15,7 @@ //go:build darwin && cgo -package i18n +package locales /* #cgo CFLAGS: -x objective-c diff --git a/i18n/detect_freebsd.go b/internal/locales/detect_freebsd.go similarity index 98% rename from i18n/detect_freebsd.go rename to internal/locales/detect_freebsd.go index 759509c5abe..4d03b8f3c92 100644 --- a/i18n/detect_freebsd.go +++ b/internal/locales/detect_freebsd.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package i18n +package locales func getLocaleIdentifier() string { return getLocaleIdentifierFromEnv() diff --git a/i18n/detect_linux.go b/internal/locales/detect_linux.go similarity index 98% rename from i18n/detect_linux.go rename to internal/locales/detect_linux.go index 759509c5abe..4d03b8f3c92 100644 --- a/i18n/detect_linux.go +++ b/internal/locales/detect_linux.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package i18n +package locales func getLocaleIdentifier() string { return getLocaleIdentifierFromEnv() diff --git a/i18n/detect_nocgo_darwin.go b/internal/locales/detect_nocgo_darwin.go similarity index 98% rename from i18n/detect_nocgo_darwin.go rename to internal/locales/detect_nocgo_darwin.go index f7ae977b19f..689b5e864c5 100644 --- a/i18n/detect_nocgo_darwin.go +++ b/internal/locales/detect_nocgo_darwin.go @@ -15,7 +15,7 @@ //go:build darwin && !cgo -package i18n +package locales func getLocaleIdentifier() string { return getLocaleIdentifierFromEnv() diff --git a/i18n/detect_windows.go b/internal/locales/detect_windows.go similarity index 91% rename from i18n/detect_windows.go rename to internal/locales/detect_windows.go index 2210bfa2553..42c667447d6 100644 --- a/i18n/detect_windows.go +++ b/internal/locales/detect_windows.go @@ -13,10 +13,9 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package i18n +package locales import ( - "fmt" "strings" "syscall" "unsafe" @@ -25,10 +24,14 @@ import ( func getLocaleIdentifier() string { defer func() { if r := recover(); r != nil { - fmt.Println("failed to get windows user locale", r) + // ignore error and do not panic } }() + if loc := getLocaleIdentifierFromEnv(); loc != "" { + return loc + } + dll := syscall.MustLoadDLL("kernel32") defer dll.Release() proc := dll.MustFindProc("GetUserDefaultLocaleName") diff --git a/i18n/i18n.go b/internal/locales/i18n.go similarity index 86% rename from i18n/i18n.go rename to internal/locales/i18n.go index aa4f82edd33..8c7120a1771 100644 --- a/i18n/i18n.go +++ b/internal/locales/i18n.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package i18n +package locales // Init initializes the i18n module, setting the locale according to this order of preference: // 1. Locale specified via the function call @@ -37,9 +37,3 @@ func Init(configLocale string) { setLocale("en") } - -// Tr returns msg translated to the selected locale -// the msg argument must be a literal string -func Tr(msg string, args ...interface{}) string { - return po.Get(msg, args...) -} diff --git a/i18n/locale.go b/internal/locales/locale.go similarity index 93% rename from i18n/locale.go rename to internal/locales/locale.go index 80b8ebff6e2..646b44059f7 100644 --- a/i18n/locale.go +++ b/internal/locales/locale.go @@ -13,24 +13,19 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package i18n +package locales import ( "embed" "strings" + "github.com/arduino/arduino-cli/internal/i18n" "github.com/leonelquinteros/gotext" ) -var po *gotext.Po - //go:embed data/*.po var contents embed.FS -func init() { - po = new(gotext.Po) -} - func supportedLocales() []string { var locales []string files, err := contents.ReadDir("data") @@ -75,6 +70,7 @@ func setLocale(locale string) { if err != nil { panic("Error reading embedded i18n data: " + err.Error()) } - po = new(gotext.Po) - po.Parse(poFile) + dict := gotext.NewPo() + dict.Parse(poFile) + i18n.SetLocale(dict) } diff --git a/i18n/locale_test.go b/internal/locales/locale_test.go similarity index 98% rename from i18n/locale_test.go rename to internal/locales/locale_test.go index 6212258e8f8..dc0ff7ad897 100644 --- a/i18n/locale_test.go +++ b/internal/locales/locale_test.go @@ -13,7 +13,7 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package i18n +package locales import ( "testing" diff --git a/internal/mock_avrdude/.gitignore b/internal/mock_avrdude/.gitignore new file mode 100644 index 00000000000..7035844ce4e --- /dev/null +++ b/internal/mock_avrdude/.gitignore @@ -0,0 +1 @@ +mock_avrdude diff --git a/internal/mock_avrdude/main.go b/internal/mock_avrdude/main.go new file mode 100644 index 00000000000..3b10a1d0207 --- /dev/null +++ b/internal/mock_avrdude/main.go @@ -0,0 +1,46 @@ +// +// This file is part arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to modify or +// otherwise use the software for commercial activities involving the Arduino +// software without disclosing the source code of your own applications. To purchase +// a commercial license, send an email to license@arduino.cc. +// + +package main + +import ( + "fmt" + "os" + "time" + + "github.com/arduino/go-paths-helper" +) + +func main() { + tmp, err := paths.MkTempFile(nil, "test") + if err != nil { + fmt.Println(err) + os.Exit(1) + } + tmp.Close() + tmpPath := paths.New(tmp.Name()) + + fmt.Println("CHECKFILE:", tmpPath) + + // Just sit here for 5 seconds + time.Sleep(5 * time.Second) + + // Remove the check file at the end + tmpPath.Remove() + + fmt.Println("COMPLETED") +} diff --git a/internal/mock_serial_discovery/.gitignore b/internal/mock_serial_discovery/.gitignore new file mode 100644 index 00000000000..4eb3daf49c9 --- /dev/null +++ b/internal/mock_serial_discovery/.gitignore @@ -0,0 +1 @@ +mock_serial_discovery diff --git a/internal/mock_serial_discovery/main.go b/internal/mock_serial_discovery/main.go new file mode 100644 index 00000000000..af25b448331 --- /dev/null +++ b/internal/mock_serial_discovery/main.go @@ -0,0 +1,100 @@ +// +// This file is part arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to modify or +// otherwise use the software for commercial activities involving the Arduino +// software without disclosing the source code of your own applications. To purchase +// a commercial license, send an email to license@arduino.cc. +// + +package main + +import ( + "errors" + "os" + "time" + + "github.com/arduino/go-properties-orderedmap" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" +) + +type mockSerialDiscovery struct { + startSyncCount int + closeChan chan<- bool +} + +func main() { + dummy := &mockSerialDiscovery{} + server := discovery.NewServer(dummy) + if err := server.Run(os.Stdin, os.Stdout); err != nil { + os.Exit(1) + } +} + +// Hello does nothing here... +func (d *mockSerialDiscovery) Hello(userAgent string, protocol int) error { + return nil +} + +// Quit does nothing here... +func (d *mockSerialDiscovery) Quit() {} + +// Stop terminates the discovery loop +func (d *mockSerialDiscovery) Stop() error { + if d.closeChan != nil { + d.closeChan <- true + close(d.closeChan) + d.closeChan = nil + } + return nil +} + +// StartSync starts the goroutine that generates fake Ports. +func (d *mockSerialDiscovery) StartSync(eventCB discovery.EventCallback, errorCB discovery.ErrorCallback) error { + // Every 5 starts produce an error + d.startSyncCount++ + if d.startSyncCount%5 == 0 { + return errors.New("could not start_sync every 5 times") + } + + c := make(chan bool) + d.closeChan = c + + // Start asynchronous event emitter + go func() { + var closeChan <-chan bool = c + + // Output initial port state + eventCB("add", &discovery.Port{ + Address: "/dev/ttyCIAO", + AddressLabel: "Mocked Serial port", + Protocol: "serial", + ProtocolLabel: "Serial", + HardwareID: "123456", + Properties: properties.NewFromHashmap(map[string]string{ + "vid": "0x2341", + "pid": "0x0041", + "serial": "123456", + }), + }) + + select { + case <-closeChan: + return + case <-time.After(5 * time.Second): + errorCB("unrecoverable error, cannot send more events") + } + + <-closeChan + }() + + return nil +} diff --git a/internal/mock_serial_monitor/.gitignore b/internal/mock_serial_monitor/.gitignore new file mode 100644 index 00000000000..eae1d555aab --- /dev/null +++ b/internal/mock_serial_monitor/.gitignore @@ -0,0 +1 @@ +mock_serial_monitor diff --git a/internal/mock_serial_monitor/main.go b/internal/mock_serial_monitor/main.go new file mode 100644 index 00000000000..60302af7cd2 --- /dev/null +++ b/internal/mock_serial_monitor/main.go @@ -0,0 +1,207 @@ +// +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to modify or +// otherwise use the software for commercial activities involving the Arduino +// software without disclosing the source code of your own applications. To purchase +// a commercial license, send an email to license@arduino.cc. +// + +package main + +import ( + "errors" + "fmt" + "io" + "os" + "slices" + "strings" + "time" + + "github.com/arduino/go-paths-helper" + monitor "github.com/arduino/pluggable-monitor-protocol-handler" +) + +func main() { + monitorServer := monitor.NewServer(NewSerialMonitor()) + if err := monitorServer.Run(os.Stdin, os.Stdout); err != nil { + fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error()) + os.Exit(1) + } +} + +// SerialMonitor is the implementation of the serial ports pluggable-monitor +type SerialMonitor struct { + mockedSerialPort io.ReadWriteCloser + serialSettings *monitor.PortDescriptor + openedPort bool + muxFile *paths.Path +} + +// NewSerialMonitor will initialize and return a SerialMonitor +func NewSerialMonitor() *SerialMonitor { + return &SerialMonitor{ + serialSettings: &monitor.PortDescriptor{ + Protocol: "serial", + ConfigurationParameter: map[string]*monitor.PortParameterDescriptor{ + "baudrate": { + Label: "Baudrate", + Type: "enum", + Values: []string{ + "300", "600", "750", + "1200", "2400", "4800", "9600", + "19200", "31250", "38400", "57600", "74880", + "115200", "230400", "250000", "460800", "500000", "921600", + "1000000", "2000000"}, + Selected: "9600", + }, + "parity": { + Label: "Parity", + Type: "enum", + Values: []string{"none", "even", "odd", "mark", "space"}, + Selected: "none", + }, + "bits": { + Label: "Data bits", + Type: "enum", + Values: []string{"5", "6", "7", "8", "9"}, + Selected: "8", + }, + "stop_bits": { + Label: "Stop bits", + Type: "enum", + Values: []string{"1", "1.5", "2"}, + Selected: "1", + }, + "rts": { + Label: "RTS", + Type: "enum", + Values: []string{"on", "off"}, + Selected: "on", + }, + "dtr": { + Label: "DTR", + Type: "enum", + Values: []string{"on", "off"}, + Selected: "on", + }, + }, + }, + openedPort: false, + } +} + +// Hello is the handler for the pluggable-monitor HELLO command +func (d *SerialMonitor) Hello(userAgent string, protocol int) error { + return nil +} + +// Describe is the handler for the pluggable-monitor DESCRIBE command +func (d *SerialMonitor) Describe() (*monitor.PortDescriptor, error) { + return d.serialSettings, nil +} + +// Configure is the handler for the pluggable-monitor CONFIGURE command +func (d *SerialMonitor) Configure(parameterName string, value string) error { + parameter, ok := d.serialSettings.ConfigurationParameter[parameterName] + if !ok { + return fmt.Errorf("could not find parameter named %s", parameterName) + } + if !slices.Contains(parameter.Values, value) { + return fmt.Errorf("invalid value for parameter %s: %s", parameterName, value) + } + // Set configuration + parameter.Selected = value + + return nil +} + +// Open is the handler for the pluggable-monitor OPEN command +func (d *SerialMonitor) Open(boardPort string) (io.ReadWriter, error) { + if d.openedPort { + return nil, fmt.Errorf("port already opened: %s", boardPort) + } + d.openedPort = true + sideA, sideB := newBidirectionalPipe() + d.mockedSerialPort = sideA + if muxFile, err := paths.MkTempFile(nil, ""); err == nil { + d.muxFile = paths.NewFromFile(muxFile) + muxFile.Close() + } + go func() { + buff := make([]byte, 1024) + d.mockedSerialPort.Write([]byte("Opened port: " + boardPort + "\n")) + if d.muxFile != nil { + d.mockedSerialPort.Write([]byte("Tmpfile: " + d.muxFile.String() + "\n")) + } + for parameter, descriptor := range d.serialSettings.ConfigurationParameter { + fmt.Fprintf(d.mockedSerialPort, "Configuration %s = %s\n", parameter, descriptor.Selected) + } + for { + n, err := d.mockedSerialPort.Read(buff) + if err != nil { + d.mockedSerialPort.Close() + return + } + if strings.Contains(string(buff[:n]), "QUIT") { + d.mockedSerialPort.Close() + return + } + d.mockedSerialPort.Write([]byte("Received: >")) + d.mockedSerialPort.Write(buff[:n]) + d.mockedSerialPort.Write([]byte("<\n")) + } + }() + return sideB, nil +} + +func newBidirectionalPipe() (io.ReadWriteCloser, io.ReadWriteCloser) { + in1, out1 := io.Pipe() + in2, out2 := io.Pipe() + a := &bidirectionalPipe{in: in1, out: out2} + b := &bidirectionalPipe{in: in2, out: out1} + return a, b +} + +type bidirectionalPipe struct { + in io.Reader + out io.WriteCloser +} + +func (p *bidirectionalPipe) Read(buff []byte) (int, error) { + return p.in.Read(buff) +} + +func (p *bidirectionalPipe) Write(buff []byte) (int, error) { + return p.out.Write(buff) +} + +func (p *bidirectionalPipe) Close() error { + return p.out.Close() +} + +// Close is the handler for the pluggable-monitor CLOSE command +func (d *SerialMonitor) Close() error { + if !d.openedPort { + return errors.New("port already closed") + } + d.mockedSerialPort.Close() + d.openedPort = false + if d.muxFile != nil { + time.Sleep(2000 * time.Millisecond) // Emulate a small delay closing the port to check gRPC synchronization + d.muxFile.Remove() + d.muxFile = nil + } + return nil +} + +// Quit is the handler for the pluggable-monitor QUIT command +func (d *SerialMonitor) Quit() {} diff --git a/internal/orderedmap/orderedmap.go b/internal/orderedmap/orderedmap.go new file mode 100644 index 00000000000..0dce816863d --- /dev/null +++ b/internal/orderedmap/orderedmap.go @@ -0,0 +1,184 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package orderedmap + +import ( + "bytes" + "encoding/json" + "fmt" + "slices" +) + +// Map is a map that keeps ordering insertion. +type Map[K any, V any] interface { + Get(K) V + GetOk(key K) (V, bool) + Set(K, V) + Size() int + ContainsKey(key K) bool + Keys() []K + Merge(...Map[K, V]) Map[K, V] + SortKeys(f func(x, y K) int) + SortStableKeys(f func(x, y K) int) + Values() []V + Clone() Map[K, V] + Remove(key K) + MarshalJSON() ([]byte, error) +} + +type scalars interface { + ~int | ~int8 | ~int16 | ~int32 | ~int64 | ~uint | ~uint8 | + ~uint16 | ~uint32 | ~uint64 | ~uintptr | ~float32 | ~float64 | ~string +} + +// NewWithConversionFunc creates a map using the given conversion function +// to convert non-comparable key type to comparable items. +// The conversion function must be bijective. +func NewWithConversionFunc[K any, V any, C scalars](conv func(K) C) Map[K, V] { + return &mapImpl[K, V, C]{ + conv: conv, + kv: map[C]V{}, + o: []K{}, + } +} + +// New creates a map +func New[K scalars, V any]() Map[K, V] { + return &mapImpl[K, V, K]{ + conv: func(in K) K { return in }, // identity + kv: map[K]V{}, + o: []K{}, + } +} + +type mapImpl[K any, V any, C scalars] struct { + conv func(K) C + kv map[C]V + o []K +} + +// Get retrieves the value corresponding to key +func (m *mapImpl[K, V, C]) Get(key K) V { + return m.kv[m.conv(key)] +} + +// GetOk retrieves the value corresponding to key and returns a true/false indicator +// to check if the key is present in the map (true if the key is present) +func (m *mapImpl[K, V, C]) GetOk(key K) (V, bool) { + v, ok := m.kv[m.conv(key)] + return v, ok +} + +// ContainsKey returns true if the map contains the specified key +func (m *mapImpl[K, V, C]) ContainsKey(key K) bool { + _, has := m.kv[m.conv(key)] + return has +} + +// MarshalJSON marshal the map into json mantaining the order of the key +func (m *mapImpl[K, V, C]) MarshalJSON() ([]byte, error) { + if m.Size() == 0 { + return []byte("{}"), nil + } + var buf bytes.Buffer + buf.WriteByte('{') + encoder := json.NewEncoder(&buf) + for _, k := range m.o { + // Here we convert non string keys in string. + if err := encoder.Encode(fmt.Sprintf("%v", m.conv(k))); err != nil { + return nil, err + } + buf.WriteByte(':') + if err := encoder.Encode(m.kv[m.conv(k)]); err != nil { + return nil, err + } + buf.WriteByte(',') + } + buf.Truncate(buf.Len() - 1) // remove last `,` + buf.WriteByte('}') + return buf.Bytes(), nil +} + +// Set inserts or replaces an existing key-value pair in the map +func (m *mapImpl[K, V, C]) Set(key K, value V) { + compKey := m.conv(key) + if _, has := m.kv[compKey]; has { + m.Remove(key) + } + m.kv[compKey] = value + m.o = append(m.o, key) +} + +// Size returns the number of elements in the map +func (m *mapImpl[K, V, C]) Size() int { + return len(m.kv) +} + +// Remove removes the key from the map +func (m *mapImpl[K, V, C]) Remove(key K) { + compKey := m.conv(key) + delete(m.kv, compKey) + for i, k := range m.o { + if m.conv(k) == compKey { + m.o = append(m.o[:i], m.o[i+1:]...) + return + } + } +} + +// Merge merges other Maps into this one. Each key/value of the merged Maps replaces +// the key/value present in the original Map. +func (m *mapImpl[K, V, C]) Merge(sources ...Map[K, V]) Map[K, V] { + for _, source := range sources { + for _, key := range source.Keys() { + value := source.Get(key) + m.Set(key, value) + } + } + return m +} + +// Keys returns an array of the keys contained in the Map +func (m *mapImpl[K, V, C]) Keys() []K { + keys := make([]K, len(m.o)) + copy(keys, m.o) + return keys +} + +func (m *mapImpl[K, V, C]) SortKeys(f func(x, y K) int) { + slices.SortFunc(m.o, f) +} + +func (m *mapImpl[K, V, C]) SortStableKeys(f func(x, y K) int) { + slices.SortStableFunc(m.o, f) +} + +// Values returns an array of the values contained in the Map. Duplicated +// values are repeated in the list accordingly. +func (m *mapImpl[K, V, C]) Values() []V { + values := make([]V, len(m.o)) + for i, key := range m.o { + values[i] = m.kv[m.conv(key)] + } + return values +} + +// Clone makes a copy of the Map +func (m *mapImpl[K, V, C]) Clone() Map[K, V] { + clone := NewWithConversionFunc[K, V, C](m.conv) + clone.Merge(m) + return clone +} diff --git a/internal/orderedmap/orderedmap_test.go b/internal/orderedmap/orderedmap_test.go new file mode 100644 index 00000000000..bd7975f1949 --- /dev/null +++ b/internal/orderedmap/orderedmap_test.go @@ -0,0 +1,361 @@ +// This file is part of arduino-cli. +// +// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package orderedmap_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/orderedmap" + "github.com/stretchr/testify/require" +) + +func TestGet(t *testing.T) { + t.Run("the key is a string", func(t *testing.T) { + m := orderedmap.New[string, int]() + + require.Zero(t, m.Get("not-existing-key")) + v, ok := m.GetOk("not-existing-key") + require.Zero(t, v) + require.False(t, ok) + + m.Set("existing-key", 1) + require.Equal(t, 1, m.Get("existing-key")) + v, ok = m.GetOk("existing-key") + require.Equal(t, 1, v) + require.True(t, ok) + + // test empty key + m.Set("", 2) + require.Equal(t, 2, m.Get("")) + v, ok = m.GetOk("") + require.Equal(t, 2, v) + require.True(t, ok) + }) + + t.Run("the key is int", func(t *testing.T) { + m := orderedmap.New[int, int]() + + require.Equal(t, 0, m.Get(1)) + v, ok := m.GetOk(1) + require.Zero(t, v) + require.False(t, ok) + + m.Set(1, 1) + require.Equal(t, 1, m.Get(1)) + v, ok = m.GetOk(1) + require.Equal(t, 1, v) + require.True(t, ok) + + // test empty key + m.Set(0, 2) + require.Equal(t, 2, m.Get(0)) + v, ok = m.GetOk(0) + require.Equal(t, 2, v) + require.True(t, ok) + }) + + t.Run("custom comparable key", func(t *testing.T) { + type A struct { + b []byte + } + m := orderedmap.NewWithConversionFunc[*A, int, string]( + func(a *A) string { + if a == nil { + return "" + } + return string(a.b) + }, + ) + require.Zero(t, m.Get(&A{})) + require.Zero(t, m.Get(nil)) + + // Here we're using the conversion function to set the key, using a different + // pointer to retrieve the value works. + m.Set(&A{b: []byte{60, 61, 62}}, 1) + require.Equal(t, 1, m.Get(&A{b: []byte{60, 61, 62}})) + + m.Set(nil, 2) + require.Equal(t, 2, m.Get(nil)) + }) +} + +func TestSet(t *testing.T) { + t.Run("insert 3 different keys", func(t *testing.T) { + m := orderedmap.New[string, int]() + m.Set("a", 1) + m.Set("b", 2) + m.Set("c", 3) + require.Equal(t, 1, m.Get("a")) + require.Equal(t, 2, m.Get("b")) + require.Equal(t, 3, m.Get("c")) + }) + t.Run("insert equal keys", func(t *testing.T) { + m := orderedmap.New[string, int]() + m.Set("a", 1) + m.Set("a", 2) + require.Equal(t, 2, m.Get("a")) + }) +} + +func TestSize(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m := orderedmap.New[string, bool]() + require.Zero(t, m.Size()) + }) + t.Run("one element", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + require.Equal(t, 1, m.Size()) + }) + t.Run("three elements", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Set("c", true) + require.Equal(t, 3, m.Size()) + }) + t.Run("insert same keys result in size 1", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("a", false) + m.Set("a", true) + require.Equal(t, 1, m.Size()) + }) +} + +func TestKeys(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m := orderedmap.New[string, bool]() + require.Empty(t, m.Keys()) + }) + t.Run("one element", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + require.Len(t, m.Keys(), 1) + }) + t.Run("keys respect order of insertion", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Set("c", true) + require.Equal(t, []string{"a", "b", "c"}, m.Keys()) + }) + t.Run("replacing a key changes the ordering", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Set("a", false) + require.Equal(t, []string{"b", "a"}, m.Keys()) + }) + t.Run("delete a key", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Remove("a") + require.Equal(t, []string{"b"}, m.Keys()) + }) +} + +func TestRemove(t *testing.T) { + t.Run("key doesn't exist", func(t *testing.T) { + m := orderedmap.New[string, bool]() + require.Zero(t, m.Get("not-existing-key")) + m.Remove("not-existing-key") + require.Zero(t, m.Get("not-existing-key")) + }) + t.Run("key exist", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + require.True(t, m.Get("a")) + + m.Remove("a") + require.False(t, m.Get("a")) + }) + t.Run("key deletion doesn't affect other keys", func(t *testing.T) { + m := orderedmap.New[string, bool]() + m.Set("a", true) + m.Set("b", true) + m.Remove("a") + require.True(t, m.Get("b")) + _, ok := m.GetOk("a") + require.False(t, ok) + }) +} + +func TestMerge(t *testing.T) { + t.Run("merge empty maps", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m2 := orderedmap.New[string, int]() + + merged := m1.Merge(m2) + require.Equal(t, m1, merged) + require.Len(t, m1.Keys(), 0) + }) + + t.Run("merge multiple elements", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("a", 1) + m1.Set("b", 2) + m1.Set("c", 3) + + m2 := orderedmap.New[string, int]() + m2.Set("d", 4) + m2.Set("e", 5) + + // assert that the Merge return is m1 + merged := m1.Merge(m2) + require.Equal(t, m1, merged) + + // assert we find the merged elements in the map + require.Equal(t, 5, m1.Size()) + require.Equal(t, 4, m1.Get("d")) + require.Equal(t, 5, m1.Get("e")) + require.Equal(t, []string{"a", "b", "c", "d", "e"}, m1.Keys()) + + require.Equal(t, []string{"d", "e"}, m2.Keys()) + }) +} + +func TestSortKeys(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + require.Equal(t, []string{}, m1.Keys()) + m1.SortKeys(func(x, y string) int { + if x < y { + return -1 + } + return 1 + }) + require.Equal(t, []string{}, m1.Keys()) + }) + t.Run("sort ascending", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("c", 3) + m1.Set("b", 2) + m1.Set("a", 1) + m1.Set("z", 4) + + require.Equal(t, []string{"c", "b", "a", "z"}, m1.Keys()) + m1.SortKeys(func(x, y string) int { + if x < y { + return -1 + } + return 1 + }) + require.Equal(t, []string{"a", "b", "c", "z"}, m1.Keys()) + }) +} + +func TestValues(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + require.Empty(t, m1.Values()) + }) + t.Run("values respect order of insertion", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("a", 1) + m1.Set("b", 2) + m1.Set("c", 3) + require.Equal(t, []int{1, 2, 3}, m1.Values()) + }) + t.Run("after a key sort values respect the new order", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("c", 3) + m1.Set("b", 2) + m1.Set("a", 1) + m1.Set("z", 4) + require.Equal(t, []int{3, 2, 1, 4}, m1.Values()) + m1.SortKeys(func(x, y string) int { + if x < y { + return -1 + } + return 1 + }) + require.Equal(t, []int{1, 2, 3, 4}, m1.Values()) + }) +} + +func TestClone(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + clone := m1.Clone() + require.NotEqual(t, m1, clone) + require.Equal(t, m1.Keys(), clone.Keys()) + require.Equal(t, m1.Values(), clone.Values()) + }) + t.Run("clone doesn't affect the original map", func(t *testing.T) { + m1 := orderedmap.New[string, int]() + m1.Set("a", 1) + m1.Set("b", 2) + m1.Set("c", 3) + + clone := m1.Clone() + + require.NotEqual(t, m1, clone) + require.Equal(t, m1.Keys(), clone.Keys()) + require.Equal(t, m1.Values(), clone.Values()) + + clone.Set("d", 4) + require.Equal(t, 4, clone.Get("d")) + _, ok := m1.GetOk("d") + require.False(t, ok) + }) +} + +func TestMarshallJSON(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + m := orderedmap.New[string, int]() + mapJSON, err := m.MarshalJSON() + require.NoError(t, err) + require.JSONEq(t, `{}`, string(mapJSON)) + }) + t.Run("respect the order of insertion", func(t *testing.T) { + m := orderedmap.New[string, int]() + m.Set("a", 1) + m.Set("b", 2) + m.Set("c", 3) + mapJSON, err := m.MarshalJSON() + require.NoError(t, err) + require.JSONEq(t, `{"a":1,"b":2,"c":3}`, string(mapJSON)) + }) + t.Run("can serialize int keys", func(t *testing.T) { + m := orderedmap.New[int, bool]() + m.Set(1, true) + m.Set(2, true) + m.Set(3, true) + mapJSON, err := m.MarshalJSON() + require.NoError(t, err) + require.JSONEq(t, `{"1":true,"2":true,"3":true}`, string(mapJSON)) + }) + t.Run("can serialize pointer keys", func(t *testing.T) { + m := orderedmap.NewWithConversionFunc[*int, bool, int](func(i *int) int { + if i == nil { + return 0 + } + return *i + }) + m.Set(toPtr(1), true) + m.Set(toPtr(2), true) + m.Set(toPtr(3), true) + mapJSON, err := m.MarshalJSON() + require.NoError(t, err) + require.JSONEq(t, `{"1":true,"2":true,"3":true}`, string(mapJSON)) + }) +} + +func toPtr[V any](v V) *V { + return &v +} diff --git a/version/version.go b/internal/version/version.go similarity index 87% rename from version/version.go rename to internal/version/version.go index 8a207bfa75d..2a493597e12 100644 --- a/version/version.go +++ b/internal/version/version.go @@ -16,10 +16,7 @@ package version import ( - "os" - "path/filepath" - - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/internal/i18n" ) // VersionInfo contains all info injected during build @@ -56,7 +53,7 @@ func NewInfo(application string) *Info { } func (i *Info) String() string { - return tr("%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s", i.Application, i.Status, i.VersionString, i.Commit, i.Date) + return i18n.Tr("%[1]s %[2]s Version: %[3]s Commit: %[4]s Date: %[5]s", i.Application, i.Status, i.VersionString, i.Commit, i.Date) } // Data implements feedback.Result interface @@ -70,5 +67,5 @@ func init() { versionString = defaultVersionString } - VersionInfo = NewInfo(filepath.Base(os.Args[0])) + VersionInfo = NewInfo("arduino-cli") } diff --git a/version/version_test.go b/internal/version/version_test.go similarity index 100% rename from version/version_test.go rename to internal/version/version_test.go diff --git a/main.go b/main.go index 55f139c5ca1..0ead329254a 100644 --- a/main.go +++ b/main.go @@ -16,19 +16,80 @@ package main import ( + "context" + "fmt" + "io" "os" - "github.com/arduino/arduino-cli/configuration" - "github.com/arduino/arduino-cli/i18n" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/internal/cli" + "github.com/arduino/arduino-cli/internal/cli/config" + "github.com/arduino/arduino-cli/internal/cli/configuration" "github.com/arduino/arduino-cli/internal/cli/feedback" + "github.com/arduino/arduino-cli/internal/i18n" + "github.com/arduino/arduino-cli/internal/locales" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" ) func main() { - configuration.Settings = configuration.Init(configuration.FindConfigFileInArgs(os.Args)) - i18n.Init(configuration.Settings.GetString("locale")) - arduinoCmd := cli.NewCommand() - if err := arduinoCmd.Execute(); err != nil { + // Disable logging until it is setup in the arduino-cli pre-run + logrus.SetOutput(io.Discard) + + // Search for the configuration file in the command line arguments and in the environment + configFile := configuration.FindConfigFlagsInArgsOrFallbackOnEnv(os.Args) + ctx := config.SetConfigFile(context.Background(), configFile) + + // Create a new ArduinoCoreServer + srv := commands.NewArduinoCoreServer() + + // Read the settings from the configuration file + openReq := &rpc.ConfigurationOpenRequest{SettingsFormat: "yaml"} + var configFileLoadingWarnings []string + if configData, err := paths.New(configFile).ReadFile(); err == nil { + openReq.EncodedSettings = string(configData) + } else if !os.IsNotExist(err) { + feedback.FatalError(fmt.Errorf("couldn't read configuration file: %w", err), feedback.ErrGeneric) + } + if resp, err := srv.ConfigurationOpen(ctx, openReq); err != nil { + feedback.FatalError(fmt.Errorf("couldn't load configuration: %w", err), feedback.ErrGeneric) + } else if warnings := resp.GetWarnings(); len(warnings) > 0 { + // Save the warnings to show them later when the feedback package is fully initialized + configFileLoadingWarnings = warnings + } + + // Get the current settings from the server + resp, err := srv.ConfigurationGet(ctx, &rpc.ConfigurationGetRequest{}) + if err != nil { + feedback.FatalError(err, feedback.ErrGeneric) + } + config := resp.GetConfiguration() + + // Setup i18n + locales.Init(config.GetLocale()) + + // Setup command line parser with the server and settings + arduinoCmd := cli.NewCommand(srv) + parentPreRun := arduinoCmd.PersistentPreRun + arduinoCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) { + if parentPreRun != nil { + parentPreRun(cmd, args) + } + + // In Text mode print the warnings about the configuration file + // only if we are inside the "config ..." command. In JSON mode always + // output the warning. + if feedback.GetFormat() != feedback.Text || (cmd.HasParent() && cmd.Parent().Name() == "config") { + for _, warning := range configFileLoadingWarnings { + feedback.Warning(fmt.Sprintf("%s: %s", i18n.Tr("Invalid value in configuration"), warning)) + } + } + } + + // Execute the command line + if err := arduinoCmd.ExecuteContext(ctx); err != nil { feedback.FatalError(err, feedback.ErrGeneric) } } diff --git a/mkdocs.yml b/mkdocs.yml index cd30f19557e..b4930eb9d7d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -67,6 +67,7 @@ nav: - config init: commands/arduino-cli_config_init.md - config add: commands/arduino-cli_config_add.md - config delete: commands/arduino-cli_config_delete.md + - config get: commands/arduino-cli_config_get.md - config remove: commands/arduino-cli_config_remove.md - config set: commands/arduino-cli_config_set.md - core: commands/arduino-cli_core.md @@ -79,6 +80,7 @@ nav: - core upgrade: commands/arduino-cli_core_upgrade.md - daemon: commands/arduino-cli_daemon.md - debug: commands/arduino-cli_debug.md + - debug check: commands/arduino-cli_debug_check.md - lib: commands/arduino-cli_lib.md - lib deps: commands/arduino-cli_lib_deps.md - lib download: commands/arduino-cli_lib_download.md @@ -100,7 +102,6 @@ nav: - version: commands/arduino-cli_version.md - gRPC reference: - commands: rpc/commands.md - - settings: rpc/settings.md - configuration.md - Integration options: integration-options.md - sketch-build-process.md @@ -113,6 +114,7 @@ nav: - Package index specification: package_index_json-specification.md - Guides: - Secure boot: guides/secure-boot.md + - Backward compatibility policy: versioning.md extra: version: diff --git a/package-lock.json b/package-lock.json index ff93f6acdb3..b87ae733398 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,23 +5,72 @@ "packages": { "": { "devDependencies": { - "markdown-link-check": "3.10.3", - "markdownlint-cli": "^0.33.0" + "markdown-link-check": "3.13.7", + "markdownlint-cli": "^0.33.0", + "prettier": "^3.3.1" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@oozcitak/dom": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@oozcitak/infra": "1.0.8", + "@oozcitak/url": "1.0.4", + "@oozcitak/util": "8.3.8" }, "engines": { - "node": ">=8" + "node": ">=8.0" + } + }, + "node_modules/@oozcitak/infra": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", + "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", + "dev": true, + "dependencies": { + "@oozcitak/util": "8.3.8" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@oozcitak/url": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", + "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", + "dev": true, + "dependencies": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@oozcitak/util": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", + "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "engines": { + "node": ">= 14" } }, "node_modules/argparse": { @@ -30,10 +79,22 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true }, "node_modules/balanced-match": { @@ -42,6 +103,15 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -58,16 +128,12 @@ } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" @@ -111,31 +177,13 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/css-select": { @@ -166,13 +214,30 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/deep-extend": { @@ -184,6 +249,20 @@ "node": ">=4.0.0" } }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -226,23 +305,23 @@ } }, "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { "node": ">=0.12" @@ -251,6 +330,58 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -269,6 +400,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "dev": true, + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -288,15 +433,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/html-link-extractor": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/html-link-extractor/-/html-link-extractor-1.0.5.tgz", @@ -307,9 +443,9 @@ } }, "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -320,9 +456,35 @@ ], "dependencies": { "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "domutils": "^3.0.1", - "entities": "^4.3.0" + "entities": "^4.4.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/iconv-lite": { @@ -371,6 +533,19 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/is-absolute-url": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", @@ -398,18 +573,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "dependencies": { - "punycode": "2.x.x" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -422,6 +585,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -429,15 +598,16 @@ "dev": true }, "node_modules/link-check": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/link-check/-/link-check-5.2.0.tgz", - "integrity": "sha512-xRbhYLaGDw7eRDTibTAcl6fXtmUQ13vkezQiTqshHHdGueQeumgxxmQMIOmJYsh2p8BF08t8thhDQ++EAOOq3w==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/link-check/-/link-check-5.4.0.tgz", + "integrity": "sha512-0Pf4xBVUnwJdbDgpBlhHNmWDtbVjHTpIFs+JaBuIsC9PKRxjv4KMGCO2Gc8lkVnqMf9B/yaNY+9zmMlO5MyToQ==", "dev": true, "dependencies": { "is-relative-url": "^4.0.0", - "isemail": "^3.2.0", "ms": "^2.1.3", - "needle": "^3.1.0" + "needle": "^3.3.1", + "node-email-verifier": "^2.0.0", + "proxy-agent": "^6.4.0" } }, "node_modules/linkify-it": { @@ -449,11 +619,14 @@ "uc.micro": "^1.0.1" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/markdown-it": { "version": "13.0.1", @@ -484,32 +657,33 @@ } }, "node_modules/markdown-link-check": { - "version": "3.10.3", - "resolved": "https://registry.npmjs.org/markdown-link-check/-/markdown-link-check-3.10.3.tgz", - "integrity": "sha512-uGdJiZOy1CVWlRe7CyBSJ0Gz80Xm4vt++xjX9sNFjB7qcAxLinaMmzFQ5xOwERaXC9mK770BhnqnsyJT1gTr9w==", + "version": "3.13.7", + "resolved": "https://registry.npmjs.org/markdown-link-check/-/markdown-link-check-3.13.7.tgz", + "integrity": "sha512-Btn3HU8s2Uyh1ZfzmyZEkp64zp2+RAjwfQt1u4swq2Xa6w37OW0T2inQZrkSNVxDSa2jSN2YYhw/JkAp5jF1PQ==", "dev": true, "dependencies": { - "async": "^3.2.4", - "chalk": "^4.1.2", - "commander": "^6.2.0", - "link-check": "^5.2.0", - "lodash": "^4.17.21", - "markdown-link-extractor": "^3.1.0", - "needle": "^3.1.0", - "progress": "^2.0.3" + "async": "^3.2.6", + "chalk": "^5.3.0", + "commander": "^13.1.0", + "link-check": "^5.4.0", + "markdown-link-extractor": "^4.0.2", + "needle": "^3.3.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "xmlbuilder2": "^3.1.1" }, "bin": { "markdown-link-check": "markdown-link-check" } }, "node_modules/markdown-link-extractor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/markdown-link-extractor/-/markdown-link-extractor-3.1.0.tgz", - "integrity": "sha512-r0NEbP1dsM+IqB62Ru9TXLP/HDaTdBNIeylYXumuBi6Xv4ufjE1/g3TnslYL8VNqNcGAGbMptQFHrrdfoZ/Sug==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/markdown-link-extractor/-/markdown-link-extractor-4.0.2.tgz", + "integrity": "sha512-5cUOu4Vwx1wenJgxaudsJ8xwLUMN7747yDJX3V/L7+gi3e4MsCm7w5nbrDQQy8nEfnl4r5NV3pDXMAjhGXYXAw==", "dev": true, "dependencies": { "html-link-extractor": "^1.0.5", - "marked": "^4.1.0" + "marked": "^12.0.1" } }, "node_modules/markdownlint": { @@ -557,15 +731,15 @@ } }, "node_modules/marked": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", - "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", + "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", "dev": true, "bin": { "marked": "bin/marked.js" }, "engines": { - "node": ">= 12" + "node": ">= 18" } }, "node_modules/mdurl": { @@ -602,12 +776,11 @@ "dev": true }, "node_modules/needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "dev": true, "dependencies": { - "debug": "^3.2.6", "iconv-lite": "^0.6.3", "sax": "^1.2.4" }, @@ -618,6 +791,28 @@ "node": ">= 4.4.x" } }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-email-verifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-2.0.0.tgz", + "integrity": "sha512-AHcppjOH2KT0mxakrxFMOMjV/gOVMRpYvnJUkNfgF9oJ3INdVmqcMFJ5TlM8elpTPwt6A7bSp1IMnnWcxGom/Q==", + "dev": true, + "dependencies": { + "ms": "^2.1.3", + "validator": "^13.11.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -639,31 +834,90 @@ "wrappy": "1" } }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dev": true, + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, "dependencies": { - "entities": "^4.4.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dev": true, "dependencies": { - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "parse5": "^7.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -673,15 +927,31 @@ "node": ">=0.4.0" } }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, "engines": { - "node": ">=6" + "node": ">= 14" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/run-con": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.11.tgz", @@ -704,9 +974,63 @@ "dev": true }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true }, "node_modules/strip-json-comments": { @@ -721,17 +1045,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true }, "node_modules/uc.micro": { "version": "1.0.6", @@ -739,33 +1057,133 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, + "node_modules/validator": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.0.tgz", + "integrity": "sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true + }, + "node_modules/xmlbuilder2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", + "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", + "dev": true, + "dependencies": { + "@oozcitak/dom": "1.15.10", + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8", + "js-yaml": "3.14.1" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/xmlbuilder2/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/xmlbuilder2/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/xmlbuilder2/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true } }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@oozcitak/dom": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", + "dev": true, + "requires": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/url": "1.0.4", + "@oozcitak/util": "8.3.8" + } + }, + "@oozcitak/infra": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", + "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@oozcitak/util": "8.3.8" } }, + "@oozcitak/url": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", + "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", + "dev": true, + "requires": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8" + } + }, + "@oozcitak/util": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", + "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", + "dev": true + }, + "@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true + }, + "agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true }, "balanced-match": { @@ -774,6 +1192,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -790,14 +1214,10 @@ } }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true }, "cheerio": { "version": "1.0.0-rc.12", @@ -828,25 +1248,10 @@ "domutils": "^3.0.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true }, "css-select": { @@ -868,13 +1273,19 @@ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, + "data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true + }, "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "^2.1.3" } }, "deep-extend": { @@ -883,6 +1294,17 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, + "degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "requires": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + } + }, "dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -910,20 +1332,50 @@ } }, "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, "requires": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" } }, "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "fs.realpath": { @@ -938,6 +1390,17 @@ "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true }, + "get-uri": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "dev": true, + "requires": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + } + }, "glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -951,12 +1414,6 @@ "once": "^1.3.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "html-link-extractor": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/html-link-extractor/-/html-link-extractor-1.0.5.tgz", @@ -967,15 +1424,35 @@ } }, "htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, "requires": { "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "domutils": "^3.0.1", - "entities": "^4.3.0" + "entities": "^4.4.0" + } + }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "4" } }, "iconv-lite": { @@ -1015,6 +1492,16 @@ "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", "dev": true }, + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + } + }, "is-absolute-url": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", @@ -1030,15 +1517,6 @@ "is-absolute-url": "^4.0.1" } }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - } - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1048,6 +1526,12 @@ "argparse": "^2.0.1" } }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -1055,15 +1539,16 @@ "dev": true }, "link-check": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/link-check/-/link-check-5.2.0.tgz", - "integrity": "sha512-xRbhYLaGDw7eRDTibTAcl6fXtmUQ13vkezQiTqshHHdGueQeumgxxmQMIOmJYsh2p8BF08t8thhDQ++EAOOq3w==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/link-check/-/link-check-5.4.0.tgz", + "integrity": "sha512-0Pf4xBVUnwJdbDgpBlhHNmWDtbVjHTpIFs+JaBuIsC9PKRxjv4KMGCO2Gc8lkVnqMf9B/yaNY+9zmMlO5MyToQ==", "dev": true, "requires": { "is-relative-url": "^4.0.0", - "isemail": "^3.2.0", "ms": "^2.1.3", - "needle": "^3.1.0" + "needle": "^3.3.1", + "node-email-verifier": "^2.0.0", + "proxy-agent": "^6.4.0" } }, "linkify-it": { @@ -1075,10 +1560,10 @@ "uc.micro": "^1.0.1" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true }, "markdown-it": { @@ -1103,29 +1588,30 @@ } }, "markdown-link-check": { - "version": "3.10.3", - "resolved": "https://registry.npmjs.org/markdown-link-check/-/markdown-link-check-3.10.3.tgz", - "integrity": "sha512-uGdJiZOy1CVWlRe7CyBSJ0Gz80Xm4vt++xjX9sNFjB7qcAxLinaMmzFQ5xOwERaXC9mK770BhnqnsyJT1gTr9w==", + "version": "3.13.7", + "resolved": "https://registry.npmjs.org/markdown-link-check/-/markdown-link-check-3.13.7.tgz", + "integrity": "sha512-Btn3HU8s2Uyh1ZfzmyZEkp64zp2+RAjwfQt1u4swq2Xa6w37OW0T2inQZrkSNVxDSa2jSN2YYhw/JkAp5jF1PQ==", "dev": true, "requires": { - "async": "^3.2.4", - "chalk": "^4.1.2", - "commander": "^6.2.0", - "link-check": "^5.2.0", - "lodash": "^4.17.21", - "markdown-link-extractor": "^3.1.0", - "needle": "^3.1.0", - "progress": "^2.0.3" + "async": "^3.2.6", + "chalk": "^5.3.0", + "commander": "^13.1.0", + "link-check": "^5.4.0", + "markdown-link-extractor": "^4.0.2", + "needle": "^3.3.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "xmlbuilder2": "^3.1.1" } }, "markdown-link-extractor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/markdown-link-extractor/-/markdown-link-extractor-3.1.0.tgz", - "integrity": "sha512-r0NEbP1dsM+IqB62Ru9TXLP/HDaTdBNIeylYXumuBi6Xv4ufjE1/g3TnslYL8VNqNcGAGbMptQFHrrdfoZ/Sug==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/markdown-link-extractor/-/markdown-link-extractor-4.0.2.tgz", + "integrity": "sha512-5cUOu4Vwx1wenJgxaudsJ8xwLUMN7747yDJX3V/L7+gi3e4MsCm7w5nbrDQQy8nEfnl4r5NV3pDXMAjhGXYXAw==", "dev": true, "requires": { "html-link-extractor": "^1.0.5", - "marked": "^4.1.0" + "marked": "^12.0.1" } }, "markdownlint": { @@ -1163,9 +1649,9 @@ } }, "marked": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", - "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", + "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", "dev": true }, "mdurl": { @@ -1196,16 +1682,31 @@ "dev": true }, "needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "dev": true, "requires": { - "debug": "^3.2.6", "iconv-lite": "^0.6.3", "sax": "^1.2.4" } }, + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true + }, + "node-email-verifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-2.0.0.tgz", + "integrity": "sha512-AHcppjOH2KT0mxakrxFMOMjV/gOVMRpYvnJUkNfgF9oJ3INdVmqcMFJ5TlM8elpTPwt6A7bSp1IMnnWcxGom/Q==", + "dev": true, + "requires": { + "ms": "^2.1.3", + "validator": "^13.11.0" + } + }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -1224,35 +1725,91 @@ "wrappy": "1" } }, + "pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dev": true, + "requires": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + } + }, + "pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "requires": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + } + }, "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, "requires": { - "entities": "^4.4.0" + "entities": "^6.0.0" + }, + "dependencies": { + "entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "dev": true + } } }, "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dev": true, "requires": { - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, + "prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "dev": true + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, "run-con": { @@ -1274,9 +1831,49 @@ "dev": true }, "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "dev": true, + "requires": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + }, + "sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true }, "strip-json-comments": { @@ -1285,14 +1882,11 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true }, "uc.micro": { "version": "1.0.6", @@ -1300,11 +1894,56 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, + "validator": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.0.tgz", + "integrity": "sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==", + "dev": true + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true + }, + "xmlbuilder2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", + "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", + "dev": true, + "requires": { + "@oozcitak/dom": "1.15.10", + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8", + "js-yaml": "3.14.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + } + } } } } diff --git a/package.json b/package.json index f18684eb8af..a2fdad125ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "devDependencies": { - "markdown-link-check": "3.10.3", - "markdownlint-cli": "^0.33.0" + "markdown-link-check": "3.13.7", + "markdownlint-cli": "^0.33.0", + "prettier": "^3.3.1" } } diff --git a/arduino/cores/fqbn.go b/pkg/fqbn/fqbn.go similarity index 55% rename from arduino/cores/fqbn.go rename to pkg/fqbn/fqbn.go index 35f48c2207e..4f7f66d06b2 100644 --- a/arduino/cores/fqbn.go +++ b/pkg/fqbn/fqbn.go @@ -13,50 +13,78 @@ // Arduino software without disclosing the source code of your own applications. // To purchase a commercial license, send an email to license@arduino.cc. -package cores +package fqbn import ( - "fmt" + "errors" + "regexp" "strings" + "github.com/arduino/arduino-cli/internal/i18n" properties "github.com/arduino/go-properties-orderedmap" ) -// FQBN represents a Board with a specific configuration +// FQBN represents an Fully Qualified Board Name string type FQBN struct { - Package string - PlatformArch string + Vendor string + Architecture string BoardID string Configs *properties.Map } -// ParseFQBN extract an FQBN object from the input string -func ParseFQBN(fqbnIn string) (*FQBN, error) { - // Split fqbn +// MustParse parse an FQBN string from the input string +// or panics if the input is not a valid FQBN. +func MustParse(fqbnIn string) *FQBN { + res, err := Parse(fqbnIn) + if err != nil { + panic(err) + } + return res +} + +var fqbnValidationRegex = regexp.MustCompile(`^[a-zA-Z0-9_.-]*$`) +var valueValidationRegex = regexp.MustCompile(`^[a-zA-Z0-9=_.-]*$`) + +// Parse parses an FQBN string from the input string +func Parse(fqbnIn string) (*FQBN, error) { + // Split fqbn parts fqbnParts := strings.Split(fqbnIn, ":") if len(fqbnParts) < 3 || len(fqbnParts) > 4 { - return nil, fmt.Errorf("not an FQBN: %s", fqbnIn) + return nil, errors.New(i18n.Tr("not an FQBN: %s", fqbnIn)) } fqbn := &FQBN{ - Package: fqbnParts[0], - PlatformArch: fqbnParts[1], + Vendor: fqbnParts[0], + Architecture: fqbnParts[1], BoardID: fqbnParts[2], Configs: properties.NewMap(), } if fqbn.BoardID == "" { - return nil, fmt.Errorf(tr("empty board identifier")) + return nil, errors.New(i18n.Tr("empty board identifier")) + } + // Check if the fqbn contains invalid characters + for i := 0; i < 3; i++ { + if !fqbnValidationRegex.MatchString(fqbnParts[i]) { + return nil, errors.New(i18n.Tr("fqbn's field %s contains an invalid character", fqbnParts[i])) + } } if len(fqbnParts) > 3 { for _, pair := range strings.Split(fqbnParts[3], ",") { parts := strings.SplitN(pair, "=", 2) if len(parts) != 2 { - return nil, fmt.Errorf(tr("invalid config option: %s"), pair) + return nil, errors.New(i18n.Tr("invalid config option: %s", pair)) } k := strings.TrimSpace(parts[0]) v := strings.TrimSpace(parts[1]) if k == "" { - return nil, fmt.Errorf(tr("invalid config option: %s"), pair) + return nil, errors.New(i18n.Tr("invalid config option: %s", pair)) + } + if !fqbnValidationRegex.MatchString(k) { + return nil, errors.New(i18n.Tr("config key %s contains an invalid character", k)) + } + // The config value can also contain the = symbol + if !valueValidationRegex.MatchString(v) { + return nil, errors.New(i18n.Tr("config value %s contains an invalid character", v)) } fqbn.Configs.Set(k, v) } @@ -64,29 +92,17 @@ func ParseFQBN(fqbnIn string) (*FQBN, error) { return fqbn, nil } -func (fqbn *FQBN) String() string { - res := fqbn.StringWithoutConfig() - if fqbn.Configs.Size() > 0 { - sep := ":" - for _, k := range fqbn.Configs.Keys() { - res += sep + k + "=" + fqbn.Configs.Get(k) - sep = "," - } - } - return res -} - // Clone returns a copy of this FQBN. func (fqbn *FQBN) Clone() *FQBN { return &FQBN{ - Package: fqbn.Package, - PlatformArch: fqbn.PlatformArch, + Vendor: fqbn.Vendor, + Architecture: fqbn.Architecture, BoardID: fqbn.BoardID, Configs: fqbn.Configs.Clone(), } } -// Match check if the target FQBN corresponds to the receiver one. +// Match checks if the target FQBN equals to this one. // The core parts are checked for exact equality while board options are loosely // matched: the set of boards options of the target must be fully contained within // the one of the receiver and their values must be equal. @@ -95,10 +111,8 @@ func (fqbn *FQBN) Match(target *FQBN) bool { return false } - searchedProperties := target.Configs.Clone() - actualConfigs := fqbn.Configs.AsMap() - for neededKey, neededValue := range searchedProperties.AsMap() { - targetValue, hasKey := actualConfigs[neededKey] + for neededKey, neededValue := range target.Configs.AsMap() { + targetValue, hasKey := fqbn.Configs.GetOk(neededKey) if !hasKey || targetValue != neededValue { return false } @@ -108,5 +122,18 @@ func (fqbn *FQBN) Match(target *FQBN) bool { // StringWithoutConfig returns the FQBN without the Config part func (fqbn *FQBN) StringWithoutConfig() string { - return fqbn.Package + ":" + fqbn.PlatformArch + ":" + fqbn.BoardID + return fqbn.Vendor + ":" + fqbn.Architecture + ":" + fqbn.BoardID +} + +// String returns the FQBN as a string +func (fqbn *FQBN) String() string { + res := fqbn.StringWithoutConfig() + if fqbn.Configs.Size() > 0 { + sep := ":" + for _, k := range fqbn.Configs.Keys() { + res += sep + k + "=" + fqbn.Configs.Get(k) + sep = "," + } + } + return res } diff --git a/pkg/fqbn/fqbn_test.go b/pkg/fqbn/fqbn_test.go new file mode 100644 index 00000000000..9b20f9be578 --- /dev/null +++ b/pkg/fqbn/fqbn_test.go @@ -0,0 +1,228 @@ +// This file is part of arduino-cli. +// +// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package fqbn_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/pkg/fqbn" + "github.com/stretchr/testify/require" +) + +func TestFQBN(t *testing.T) { + a, err := fqbn.Parse("arduino:avr:uno") + require.Equal(t, "arduino:avr:uno", a.String()) + require.NoError(t, err) + require.Equal(t, a.Vendor, "arduino") + require.Equal(t, a.Architecture, "avr") + require.Equal(t, a.BoardID, "uno") + require.Zero(t, a.Configs.Size()) + + // Allow empty platforms or packages (aka. vendors + architectures) + b1, err := fqbn.Parse("arduino::uno") + require.Equal(t, "arduino::uno", b1.String()) + require.NoError(t, err) + require.Equal(t, b1.Vendor, "arduino") + require.Equal(t, b1.Architecture, "") + require.Equal(t, b1.BoardID, "uno") + require.Zero(t, b1.Configs.Size()) + + b2, err := fqbn.Parse(":avr:uno") + require.Equal(t, ":avr:uno", b2.String()) + require.NoError(t, err) + require.Equal(t, b2.Vendor, "") + require.Equal(t, b2.Architecture, "avr") + require.Equal(t, b2.BoardID, "uno") + require.Zero(t, b2.Configs.Size()) + + b3, err := fqbn.Parse("::uno") + require.Equal(t, "::uno", b3.String()) + require.NoError(t, err) + require.Equal(t, b3.Vendor, "") + require.Equal(t, b3.Architecture, "") + require.Equal(t, b3.BoardID, "uno") + require.Zero(t, b3.Configs.Size()) + + // Do not allow missing board identifier + _, err = fqbn.Parse("arduino:avr:") + require.Error(t, err) + + // Do not allow partial fqbn + _, err = fqbn.Parse("arduino") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr") + require.Error(t, err) + + // Keeps the config keys order + s1, err := fqbn.Parse("arduino:avr:uno:d=x,b=x,a=x,e=x,c=x") + require.NoError(t, err) + require.Equal(t, "arduino:avr:uno:d=x,b=x,a=x,e=x,c=x", s1.String()) + require.Equal(t, + "properties.Map{\n \"d\": \"x\",\n \"b\": \"x\",\n \"a\": \"x\",\n \"e\": \"x\",\n \"c\": \"x\",\n}", + s1.Configs.Dump()) + + s2, err := fqbn.Parse("arduino:avr:uno:a=x,b=x,c=x,d=x,e=x") + require.NoError(t, err) + require.Equal(t, "arduino:avr:uno:a=x,b=x,c=x,d=x,e=x", s2.String()) + require.Equal(t, + "properties.Map{\n \"a\": \"x\",\n \"b\": \"x\",\n \"c\": \"x\",\n \"d\": \"x\",\n \"e\": \"x\",\n}", + s2.Configs.Dump()) + + // The config keys order is insignificant when comparing two FQBNs + require.True(t, s1.Match(s2)) + require.NotEqual(t, s1.String(), s2.String()) + + // Test configs + c, err := fqbn.Parse("arduino:avr:uno:cpu=atmega") + require.Equal(t, "arduino:avr:uno:cpu=atmega", c.String()) + require.NoError(t, err) + require.Equal(t, c.Vendor, "arduino") + require.Equal(t, c.Architecture, "avr") + require.Equal(t, c.BoardID, "uno") + require.Equal(t, "properties.Map{\n \"cpu\": \"atmega\",\n}", c.Configs.Dump()) + + d, err := fqbn.Parse("arduino:avr:uno:cpu=atmega,speed=1000") + require.Equal(t, "arduino:avr:uno:cpu=atmega,speed=1000", d.String()) + require.NoError(t, err) + require.Equal(t, d.Vendor, "arduino") + require.Equal(t, d.Architecture, "avr") + require.Equal(t, d.BoardID, "uno") + require.Equal(t, "properties.Map{\n \"cpu\": \"atmega\",\n \"speed\": \"1000\",\n}", d.Configs.Dump()) + + // Do not allow empty keys or missing values in config + _, err = fqbn.Parse("arduino:avr:uno:") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno,") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:=atmega") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu=atmega,") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu=atmega,speed") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu=atmega,=1000") + require.Error(t, err) + + // Allow keys with empty values + e, err := fqbn.Parse("arduino:avr:uno:cpu=") + require.Equal(t, "arduino:avr:uno:cpu=", e.String()) + require.NoError(t, err) + require.Equal(t, e.Vendor, "arduino") + require.Equal(t, e.Architecture, "avr") + require.Equal(t, e.BoardID, "uno") + require.Equal(t, "properties.Map{\n \"cpu\": \"\",\n}", e.Configs.Dump()) + + // Allow "=" in config values + f, err := fqbn.Parse("arduino:avr:uno:cpu=atmega,speed=1000,extra=core=arduino") + require.Equal(t, "arduino:avr:uno:cpu=atmega,speed=1000,extra=core=arduino", f.String()) + require.NoError(t, err) + require.Equal(t, f.Vendor, "arduino") + require.Equal(t, f.Architecture, "avr") + require.Equal(t, f.BoardID, "uno") + require.Equal(t, + "properties.Map{\n \"cpu\": \"atmega\",\n \"speed\": \"1000\",\n \"extra\": \"core=arduino\",\n}", + f.Configs.Dump()) + + // Check invalid characters in config keys + _, err = fqbn.Parse("arduino:avr:uno:cpu@=atmega") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu@atmega") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu=atmega,speed@=1000") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu=atmega,speed@1000") + require.Error(t, err) + + // Check invalid characters in config values + _, err = fqbn.Parse("arduino:avr:uno:cpu=atmega@") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu=atmega@extra") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu=atmega,speed=1000@") + require.Error(t, err) + _, err = fqbn.Parse("arduino:avr:uno:cpu=atmega,speed=1000@extra") + require.Error(t, err) + +} + +func TestMatch(t *testing.T) { + expectedMatches := [][]string{ + {"arduino:avr:uno", "arduino:avr:uno"}, + {"arduino:avr:uno", "arduino:avr:uno:opt1=1,opt2=2"}, + {"arduino:avr:uno:opt1=1", "arduino:avr:uno:opt1=1,opt2=2"}, + {"arduino:avr:uno:opt1=1,opt2=2", "arduino:avr:uno:opt1=1,opt2=2"}, + {"arduino:avr:uno:opt3=3,opt1=1,opt2=2", "arduino:avr:uno:opt2=2,opt3=3,opt1=1,opt4=4"}, + } + + for _, pair := range expectedMatches { + a, err := fqbn.Parse(pair[0]) + require.NoError(t, err) + b, err := fqbn.Parse(pair[1]) + require.NoError(t, err) + require.True(t, b.Match(a)) + } + + expectedMismatches := [][]string{ + {"arduino:avr:uno", "arduino:avr:due"}, + {"arduino:avr:uno", "arduino:avr:due:opt1=1,opt2=2"}, + {"arduino:avr:uno:opt1=1", "arduino:avr:uno"}, + {"arduino:avr:uno:opt1=1,opt2=", "arduino:avr:uno:opt1=1,opt2=3"}, + {"arduino:avr:uno:opt1=1,opt2=2", "arduino:avr:uno:opt2=2"}, + } + + for _, pair := range expectedMismatches { + a, err := fqbn.Parse(pair[0]) + require.NoError(t, err) + b, err := fqbn.Parse(pair[1]) + require.NoError(t, err) + require.False(t, b.Match(a)) + } +} + +func TestValidCharacters(t *testing.T) { + // These FQBNs contain valid characters + validFqbns := []string{"ardui_no:av_r:un_o", "arduin.o:av.r:un.o", "arduin-o:av-r:un-o", "arduin-o:av-r:un-o:a=b=c=d"} + for _, validFqbn := range validFqbns { + _, err := fqbn.Parse(validFqbn) + require.NoError(t, err) + } + // These FQBNs contain invalid characters + invalidFqbns := []string{"arduin-o:av-r:un=o", "arduin?o:av-r:uno", "arduino:av*r:uno"} + for _, validFqbn := range invalidFqbns { + _, err := fqbn.Parse(validFqbn) + require.Error(t, err) + } +} + +func TestMustParse(t *testing.T) { + require.NotPanics(t, func() { fqbn.MustParse("arduino:avr:uno") }) + require.Panics(t, func() { fqbn.MustParse("ard=uino:avr=:u=no") }) +} + +func TestClone(t *testing.T) { + a, err := fqbn.Parse("arduino:avr:uno:opt1=1,opt2=2") + require.NoError(t, err) + b := a.Clone() + require.True(t, b.Match(a)) + require.True(t, a.Match(b)) + + c, err := fqbn.Parse("arduino:avr:uno:opt1=1,opt2=2,opt3=3") + require.NoError(t, err) + require.True(t, c.Match(a)) + require.False(t, a.Match(c)) +} diff --git a/poetry.lock b/poetry.lock index 0db6b6a98b9..e9b3c99e1df 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,15 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. [[package]] name = "click" -version = "8.1.3" +version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -16,13 +17,15 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.6" description = "Cross-platform colored terminal text." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +markers = "platform_system == \"Windows\"" files = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] [[package]] @@ -31,6 +34,7 @@ version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, @@ -44,13 +48,14 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "gitdb" -version = "4.0.9" +version = "4.0.12" description = "Git Object Database" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +groups = ["dev"] files = [ - {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, - {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, + {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"}, + {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"}, ] [package.dependencies] @@ -58,49 +63,58 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.37" +version = "3.1.44" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ - {file = "GitPython-3.1.37-py3-none-any.whl", hash = "sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33"}, - {file = "GitPython-3.1.37.tar.gz", hash = "sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54"}, + {file = "GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"}, + {file = "gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar"] +doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""] [[package]] name = "importlib-metadata" -version = "4.11.4" +version = "8.5.0" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version < \"3.10\"" files = [ - {file = "importlib_metadata-4.11.4-py3-none-any.whl", hash = "sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec"}, - {file = "importlib_metadata-4.11.4.tar.gz", hash = "sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700"}, + {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, + {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] [package.dependencies] -zipp = ">=0.5" +zipp = ">=3.20" [package.extras] -docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +test = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] [package.dependencies] @@ -111,79 +125,104 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "markdown" -version = "3.3.7" -description = "Python implementation of Markdown." +version = "3.7" +description = "Python implementation of John Gruber's Markdown." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, - {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, + {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, + {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, ] [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] [[package]] name = "markupsafe" -version = "2.1.1" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["dev"] files = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] name = "mdx-truly-sane-lists" -version = "1.2" +version = "1.3" description = "Extension for Python-Markdown that makes lists truly sane. Custom indents for nested lists and fix for messy linebreaks." optional = false python-versions = "*" +groups = ["dev"] files = [ - {file = "mdx_truly_sane_lists-1.2-py3-none-any.whl", hash = "sha256:cc8bfa00f331403504e12377a9c94e6b40fc7db031e283316baeeeeac68f1da9"}, - {file = "mdx_truly_sane_lists-1.2.tar.gz", hash = "sha256:4600ade0fbd452db8233e25d644b62f59b2798e40595ea2e1923e29bc40c5b98"}, + {file = "mdx_truly_sane_lists-1.3-py3-none-any.whl", hash = "sha256:b9546a4c40ff8f1ab692f77cee4b6bfe8ddf9cccf23f0a24e71f3716fe290a37"}, + {file = "mdx_truly_sane_lists-1.3.tar.gz", hash = "sha256:b661022df7520a1e113af7c355c62216b384c867e4f59fb8ee7ad511e6e77f45"}, ] [package.dependencies] @@ -195,6 +234,7 @@ version = "1.3.4" description = "A deep merge function for 🐍." optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, @@ -206,6 +246,7 @@ version = "1.1.2" description = "Manage multiple versions of your MkDocs-powered documentation" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "mike-1.1.2-py3-none-any.whl", hash = "sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca"}, {file = "mike-1.1.2.tar.gz", hash = "sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b"}, @@ -223,29 +264,53 @@ test = ["coverage", "flake8 (>=3.0)", "shtab"] [[package]] name = "mkdocs" -version = "1.3.0" +version = "1.6.1" description = "Project documentation with Markdown." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "mkdocs-1.3.0-py3-none-any.whl", hash = "sha256:26bd2b03d739ac57a3e6eed0b7bcc86168703b719c27b99ad6ca91dc439aacde"}, - {file = "mkdocs-1.3.0.tar.gz", hash = "sha256:b504405b04da38795fec9b2e5e28f6aa3a73bb0960cb6d5d27ead28952bd35ea"}, + {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, + {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, ] [package.dependencies] -click = ">=3.3" +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = ">=4.3" -Jinja2 = ">=2.10.2" -Markdown = ">=3.2.1" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.3.6" +markupsafe = ">=2.0.1" mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" packaging = ">=20.5" -PyYAML = ">=3.10" +pathspec = ">=0.11.1" +pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" [[package]] name = "mkdocs-material" @@ -253,6 +318,7 @@ version = "7.3.6" description = "A Material Design theme for MkDocs" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "mkdocs-material-7.3.6.tar.gz", hash = "sha256:1b1dbd8ef2508b358d93af55a5c5db3f141c95667fad802301ec621c40c7c217"}, {file = "mkdocs_material-7.3.6-py2.py3-none-any.whl", hash = "sha256:1b6b3e9e09f922c2d7f1160fe15c8f43d4adc0d6fb81aa6ff0cbc7ef5b78ec75"}, @@ -268,81 +334,101 @@ pymdown-extensions = ">=9.0" [[package]] name = "mkdocs-material-extensions" -version = "1.0.3" -description = "Extension pack for Python Markdown." +version = "1.3.1" +description = "Extension pack for Python Markdown and MkDocs Material." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "mkdocs-material-extensions-1.0.3.tar.gz", hash = "sha256:bfd24dfdef7b41c312ede42648f9eb83476ea168ec163b613f9abd12bbfddba2"}, - {file = "mkdocs_material_extensions-1.0.3-py3-none-any.whl", hash = "sha256:a82b70e533ce060b2a5d9eb2bc2e1be201cf61f901f93704b4acf6e3d5983a44"}, + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] [[package]] name = "packaging" -version = "21.3" +version = "24.2" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pygments" -version = "2.15.0" +version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"}, - {file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"}, + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] [package.extras] -plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.0" +version = "10.14" description = "Extension pack for Python Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "pymdown_extensions-10.0-py3-none-any.whl", hash = "sha256:e6cbe8ace7d8feda30bc4fd6a21a073893a9a0e90c373e92d69ce5b653051f55"}, - {file = "pymdown_extensions-10.0.tar.gz", hash = "sha256:9a77955e63528c2ee98073a1fb3207c1a45607bc74a34ef21acd098f46c3aa8a"}, + {file = "pymdown_extensions-10.14-py3-none-any.whl", hash = "sha256:202481f716cc8250e4be8fce997781ebf7917701b59652458ee47f2401f818b5"}, + {file = "pymdown_extensions-10.14.tar.gz", hash = "sha256:741bd7c4ff961ba40b7528d32284c53bc436b8b1645e8e37c3e57770b8700a34"}, ] [package.dependencies] -markdown = ">=3.2" +markdown = ">=3.6" pyyaml = "*" -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] - [package.extras] -diagrams = ["jinja2", "railroad-diagrams"] +extra = ["pygments (>=2.19.1)"] [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["dev"] files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -350,51 +436,65 @@ six = ">=1.5" [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] @@ -403,6 +503,7 @@ version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, @@ -411,26 +512,49 @@ files = [ [package.dependencies] pyyaml = "*" +[[package]] +name = "setuptools" +version = "75.7.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "setuptools-75.7.0-py3-none-any.whl", hash = "sha256:84fb203f278ebcf5cd08f97d3fb96d3fbed4b629d500b29ad60d11e00769b183"}, + {file = "setuptools-75.7.0.tar.gz", hash = "sha256:886ff7b16cd342f1d1defc16fc98c9ce3fde69e087a4e1983d7ab634e5f41f4f"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] + [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["dev"] files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] name = "smmap" -version = "5.0.0" +version = "5.0.2" description = "A pure Python implementation of a sliding window memory map manager" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +groups = ["dev"] files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, + {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"}, + {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"}, ] [[package]] @@ -439,6 +563,7 @@ version = "0.1.0" description = "Flexible version handling" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31"}, {file = "verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e"}, @@ -449,36 +574,42 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"] [[package]] name = "watchdog" -version = "2.1.8" +version = "6.0.0" description = "Filesystem events monitoring" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["dev"] files = [ - {file = "watchdog-2.1.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:676263bee67b165f16b05abc52acc7a94feac5b5ab2449b491f1a97638a79277"}, - {file = "watchdog-2.1.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aa68d2d9a89d686fae99d28a6edf3b18595e78f5adf4f5c18fbfda549ac0f20c"}, - {file = "watchdog-2.1.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e2e51c53666850c3ecffe9d265fc5d7351db644de17b15e9c685dd3cdcd6f97"}, - {file = "watchdog-2.1.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7721ac736170b191c50806f43357407138c6748e4eb3e69b071397f7f7aaeedd"}, - {file = "watchdog-2.1.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ce7376aed3da5fd777483fe5ebc8475a440c6d18f23998024f832134b2938e7b"}, - {file = "watchdog-2.1.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f9ee4c6bf3a1b2ed6be90a2d78f3f4bbd8105b6390c04a86eb48ed67bbfa0b0b"}, - {file = "watchdog-2.1.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:68dbe75e0fa1ba4d73ab3f8e67b21770fbed0651d32ce515cd38919a26873266"}, - {file = "watchdog-2.1.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0c520009b8cce79099237d810aaa19bc920941c268578436b62013b2f0102320"}, - {file = "watchdog-2.1.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efcc8cbc1b43902571b3dce7ef53003f5b97fe4f275fe0489565fc6e2ebe3314"}, - {file = "watchdog-2.1.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:746e4c197ec1083581bb1f64d07d1136accf03437badb5ff8fcb862565c193b2"}, - {file = "watchdog-2.1.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ae17b6be788fb8e4d8753d8d599de948f0275a232416e16436363c682c6f850"}, - {file = "watchdog-2.1.8-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ddde157dc1447d8130cb5b8df102fad845916fe4335e3d3c3f44c16565becbb7"}, - {file = "watchdog-2.1.8-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4978db33fc0934c92013ee163a9db158ec216099b69fce5aec790aba704da412"}, - {file = "watchdog-2.1.8-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b962de4d7d92ff78fb2dbc6a0cb292a679dea879a0eb5568911484d56545b153"}, - {file = "watchdog-2.1.8-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1e5d0fdfaa265c29dc12621913a76ae99656cf7587d03950dfeb3595e5a26102"}, - {file = "watchdog-2.1.8-py3-none-manylinux2014_armv7l.whl", hash = "sha256:036ed15f7cd656351bf4e17244447be0a09a61aaa92014332d50719fc5973bc0"}, - {file = "watchdog-2.1.8-py3-none-manylinux2014_i686.whl", hash = "sha256:2962628a8777650703e8f6f2593065884c602df7bae95759b2df267bd89b2ef5"}, - {file = "watchdog-2.1.8-py3-none-manylinux2014_ppc64.whl", hash = "sha256:156ec3a94695ea68cfb83454b98754af6e276031ba1ae7ae724dc6bf8973b92a"}, - {file = "watchdog-2.1.8-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:47598fe6713fc1fee86b1ca85c9cbe77e9b72d002d6adeab9c3b608f8a5ead10"}, - {file = "watchdog-2.1.8-py3-none-manylinux2014_s390x.whl", hash = "sha256:fed4de6e45a4f16e4046ea00917b4fe1700b97244e5d114f594b4a1b9de6bed8"}, - {file = "watchdog-2.1.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:24dedcc3ce75e150f2a1d704661f6879764461a481ba15a57dc80543de46021c"}, - {file = "watchdog-2.1.8-py3-none-win32.whl", hash = "sha256:6ddf67bc9f413791072e3afb466e46cc72c6799ba73dea18439b412e8f2e3257"}, - {file = "watchdog-2.1.8-py3-none-win_amd64.whl", hash = "sha256:88ef3e8640ef0a64b7ad7394b0f23384f58ac19dd759da7eaa9bc04b2898943f"}, - {file = "watchdog-2.1.8-py3-none-win_ia64.whl", hash = "sha256:0fb60c7d31474b21acba54079ce9ff0136411183e9a591369417cddb1d7d00d7"}, - {file = "watchdog-2.1.8.tar.gz", hash = "sha256:6d03149126864abd32715d4e9267d2754cede25a69052901399356ad3bc5ecff"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, + {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, + {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, + {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, + {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, ] [package.extras] @@ -486,20 +617,26 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "zipp" -version = "3.8.0" +version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version < \"3.10\"" files = [ - {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, - {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] -docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] -testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] [metadata] -lock-version = "2.0" -python-versions = ">=3.8, !=3.9.7, <4" -content-hash = "f6b03857c9f75656180eb32424f9876d1d72a6dc8cfb589430239c650bf80e6d" +lock-version = "2.1" +python-versions = ">3.9.7, <4" +content-hash = "fde8577c7ce1611c6f339f739a74a706cc16f3782affb3f4dae65e0d36c891d6" diff --git a/pyproject.toml b/pyproject.toml index 7a0f3c7e283..81e1c489bd8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,11 +5,12 @@ description = "Project used to run integration tests for the Arduino CLI" authors = [] [tool.poetry.dependencies] -python = ">=3.8, !=3.9.7, <4" +python = ">3.9.7, <4" +setuptools = "^75.7.0" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] mkdocs = "^1.2.1" mkdocs-material = "^7.1.8" mdx-truly-sane-lists = "^1.2" -GitPython = "^3.1.37" +GitPython = "^3.1.41" mike = "^1.0.1" diff --git a/rpc/LICENSE.txt b/rpc/LICENSE.txt new file mode 100644 index 00000000000..d6456956733 --- /dev/null +++ b/rpc/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/rpc/buf.yaml b/rpc/buf.yaml deleted file mode 100644 index 4b09bf3fd42..00000000000 --- a/rpc/buf.yaml +++ /dev/null @@ -1,10 +0,0 @@ -version: v1beta1 -lint: - ignore: - - google - ignore_only: - ENUM_ZERO_VALUE_SUFFIX: - - cc/arduino/cli/commands/v1/lib.proto - - cc/arduino/cli/monitor/v1/monitor.proto - RPC_REQUEST_STANDARD_NAME: - - cc/arduino/cli/debug/v1/debug.proto diff --git a/rpc/cc/arduino/cli/commands/v1/board.pb.go b/rpc/cc/arduino/cli/commands/v1/board.pb.go index c5a7a6b1601..251eca88221 100644 --- a/rpc/cc/arduino/cli/commands/v1/board.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/board.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/board.proto package commands @@ -131,14 +132,14 @@ type BoardDetailsResponse struct { ToolsDependencies []*ToolsDependencies `protobuf:"bytes,10,rep,name=tools_dependencies,json=toolsDependencies,proto3" json:"tools_dependencies,omitempty"` // The board's custom configuration options. ConfigOptions []*ConfigOption `protobuf:"bytes,11,rep,name=config_options,json=configOptions,proto3" json:"config_options,omitempty"` - // List of programmers supported by the board + // List of programmers supported by the board. Programmers []*Programmer `protobuf:"bytes,13,rep,name=programmers,proto3" json:"programmers,omitempty"` - // Set to true if the board supports debugging - DebuggingSupported bool `protobuf:"varint,14,opt,name=debugging_supported,json=debuggingSupported,proto3" json:"debugging_supported,omitempty"` // Identifying information for the board (e.g., USB VID/PID). IdentificationProperties []*BoardIdentificationProperties `protobuf:"bytes,15,rep,name=identification_properties,json=identificationProperties,proto3" json:"identification_properties,omitempty"` - // Board build properties used for compiling + // Board build properties used for compiling. BuildProperties []string `protobuf:"bytes,16,rep,name=build_properties,json=buildProperties,proto3" json:"build_properties,omitempty"` + // Default programmer for the board. + DefaultProgrammerId string `protobuf:"bytes,17,opt,name=default_programmer_id,json=defaultProgrammerId,proto3" json:"default_programmer_id,omitempty"` } func (x *BoardDetailsResponse) Reset() { @@ -257,13 +258,6 @@ func (x *BoardDetailsResponse) GetProgrammers() []*Programmer { return nil } -func (x *BoardDetailsResponse) GetDebuggingSupported() bool { - if x != nil { - return x.DebuggingSupported - } - return false -} - func (x *BoardDetailsResponse) GetIdentificationProperties() []*BoardIdentificationProperties { if x != nil { return x.IdentificationProperties @@ -278,12 +272,19 @@ func (x *BoardDetailsResponse) GetBuildProperties() []string { return nil } +func (x *BoardDetailsResponse) GetDefaultProgrammerId() string { + if x != nil { + return x.DefaultProgrammerId + } + return "" +} + type BoardIdentificationProperties struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // A set of properties that must all be matched to identify the board + // A set of properties that must all be matched to identify the board. Properties map[string]string `protobuf:"bytes,1,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -868,11 +869,14 @@ type BoardListRequest struct { // Arduino Core Service instance from the `Init` response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Search for boards for the given time (in milliseconds) + // Search for boards for the given time (in milliseconds). Timeout int64 `protobuf:"varint,2,opt,name=timeout,proto3" json:"timeout,omitempty"` // The fully qualified board name of the board you want information about // (e.g., `arduino:avr:uno`). Fqbn string `protobuf:"bytes,3,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // If set to true, when a board cannot be identified using the installed + // platforms, the cloud API will not be called to detect the board. + SkipCloudApiForBoardDetection bool `protobuf:"varint,4,opt,name=skip_cloud_api_for_board_detection,json=skipCloudApiForBoardDetection,proto3" json:"skip_cloud_api_for_board_detection,omitempty"` } func (x *BoardListRequest) Reset() { @@ -928,6 +932,13 @@ func (x *BoardListRequest) GetFqbn() string { return "" } +func (x *BoardListRequest) GetSkipCloudApiForBoardDetection() bool { + if x != nil { + return x.SkipCloudApiForBoardDetection + } + return false +} + type BoardListResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -935,6 +946,8 @@ type BoardListResponse struct { // List of ports and the boards detected on those ports. Ports []*DetectedPort `protobuf:"bytes,1,rep,name=ports,proto3" json:"ports,omitempty"` + // Warning messages or errors coming from the discoveries. + Warnings []string `protobuf:"bytes,2,rep,name=warnings,proto3" json:"warnings,omitempty"` } func (x *BoardListResponse) Reset() { @@ -976,6 +989,13 @@ func (x *BoardListResponse) GetPorts() []*DetectedPort { return nil } +func (x *BoardListResponse) GetWarnings() []string { + if x != nil { + return x.Warnings + } + return nil +} + type DetectedPort struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -983,7 +1003,7 @@ type DetectedPort struct { // The possible boards attached to the port. MatchingBoards []*BoardListItem `protobuf:"bytes,1,rep,name=matching_boards,json=matchingBoards,proto3" json:"matching_boards,omitempty"` - // The port details + // The port details. Port *Port `protobuf:"bytes,2,opt,name=port,proto3" json:"port,omitempty"` } @@ -1042,7 +1062,7 @@ type BoardListAllRequest struct { Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` // The search query to filter the board list by. SearchArgs []string `protobuf:"bytes,2,rep,name=search_args,json=searchArgs,proto3" json:"search_args,omitempty"` - // Set to true to get also the boards marked as "hidden" in the platform + // Set to true to get also the boards marked as "hidden" in the platform. IncludeHiddenBoards bool `protobuf:"varint,3,opt,name=include_hidden_boards,json=includeHiddenBoards,proto3" json:"include_hidden_boards,omitempty"` } @@ -1154,6 +1174,9 @@ type BoardListWatchRequest struct { // Arduino Core Service instance from the `Init` response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + // If set to true, when a board cannot be identified using the installed + // platforms, the cloud API will not be called to detect the board. + SkipCloudApiForBoardDetection bool `protobuf:"varint,2,opt,name=skip_cloud_api_for_board_detection,json=skipCloudApiForBoardDetection,proto3" json:"skip_cloud_api_for_board_detection,omitempty"` } func (x *BoardListWatchRequest) Reset() { @@ -1195,16 +1218,23 @@ func (x *BoardListWatchRequest) GetInstance() *Instance { return nil } +func (x *BoardListWatchRequest) GetSkipCloudApiForBoardDetection() bool { + if x != nil { + return x.SkipCloudApiForBoardDetection + } + return false +} + type BoardListWatchResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Event type as received from the serial discovery tool + // Event type as received from the serial discovery tool. EventType string `protobuf:"bytes,1,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` - // Information about the port + // Information about the port. Port *DetectedPort `protobuf:"bytes,2,opt,name=port,proto3" json:"port,omitempty"` - // Eventual errors when detecting connected boards + // Eventual errors when detecting connected boards. Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` } @@ -1270,9 +1300,9 @@ type BoardListItem struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The fully qualified board name. Used to identify the board to a machine. Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` - // If the board is marked as "hidden" in the platform + // If the board is marked as "hidden" in the platform. IsHidden bool `protobuf:"varint,3,opt,name=is_hidden,json=isHidden,proto3" json:"is_hidden,omitempty"` - // Platform this board belongs to + // Platform this board belongs to. Platform *Platform `protobuf:"bytes,6,opt,name=platform,proto3" json:"platform,omitempty"` } @@ -1346,7 +1376,7 @@ type BoardSearchRequest struct { // The search query to filter the board list by. SearchArgs string `protobuf:"bytes,2,opt,name=search_args,json=searchArgs,proto3" json:"search_args,omitempty"` // Set to true to get also the boards marked as "hidden" in installed - // platforms + // platforms. IncludeHiddenBoards bool `protobuf:"varint,3,opt,name=include_hidden_boards,json=includeHiddenBoards,proto3" json:"include_hidden_boards,omitempty"` } @@ -1451,6 +1481,121 @@ func (x *BoardSearchResponse) GetBoards() []*BoardListItem { return nil } +type BoardIdentifyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Arduino Core Service instance from the `Init` response. + Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + // A set of properties to search (can be taken from a Port message). + Properties map[string]string `protobuf:"bytes,2,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // If set to true, when a board cannot be identified using the installed + // platforms, the cloud API will be called to detect the board. + UseCloudApiForUnknownBoardDetection bool `protobuf:"varint,3,opt,name=use_cloud_api_for_unknown_board_detection,json=useCloudApiForUnknownBoardDetection,proto3" json:"use_cloud_api_for_unknown_board_detection,omitempty"` +} + +func (x *BoardIdentifyRequest) Reset() { + *x = BoardIdentifyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_board_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BoardIdentifyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BoardIdentifyRequest) ProtoMessage() {} + +func (x *BoardIdentifyRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_board_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BoardIdentifyRequest.ProtoReflect.Descriptor instead. +func (*BoardIdentifyRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_board_proto_rawDescGZIP(), []int{20} +} + +func (x *BoardIdentifyRequest) GetInstance() *Instance { + if x != nil { + return x.Instance + } + return nil +} + +func (x *BoardIdentifyRequest) GetProperties() map[string]string { + if x != nil { + return x.Properties + } + return nil +} + +func (x *BoardIdentifyRequest) GetUseCloudApiForUnknownBoardDetection() bool { + if x != nil { + return x.UseCloudApiForUnknownBoardDetection + } + return false +} + +type BoardIdentifyResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of matching boards (they may have an FQBN with options set). + Boards []*BoardListItem `protobuf:"bytes,1,rep,name=boards,proto3" json:"boards,omitempty"` +} + +func (x *BoardIdentifyResponse) Reset() { + *x = BoardIdentifyResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_board_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BoardIdentifyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BoardIdentifyResponse) ProtoMessage() {} + +func (x *BoardIdentifyResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_board_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BoardIdentifyResponse.ProtoReflect.Descriptor instead. +func (*BoardIdentifyResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_board_proto_rawDescGZIP(), []int{21} +} + +func (x *BoardIdentifyResponse) GetBoards() []*BoardListItem { + if x != nil { + return x.Boards + } + return nil +} + var File_cc_arduino_cli_commands_v1_board_proto protoreflect.FileDescriptor var file_cc_arduino_cli_commands_v1_board_proto_rawDesc = []byte{ @@ -1474,7 +1619,7 @@ var file_cc_arduino_cli_commands_v1_board_proto_rawDesc = []byte{ 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x9a, 0x06, 0x0a, 0x14, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa3, 0x06, 0x0a, 0x14, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, @@ -1511,107 +1656,114 @@ var file_cc_arduino_cli_commands_v1_board_proto_rawDesc = []byte{ 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x12, - 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x64, 0x65, - 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x12, 0x76, 0x0a, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x18, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x22, 0xc9, 0x01, 0x0a, 0x1d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xbc, 0x01, 0x0a, 0x07, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, - 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, - 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, - 0x0b, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x68, 0x65, 0x6c, 0x70, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x22, 0x1e, - 0x0a, 0x04, 0x48, 0x65, 0x6c, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0xd0, - 0x01, 0x0a, 0x0d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x11, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x44, 0x65, 0x70, 0x65, 0x6e, - 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x76, 0x0a, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x07, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x8a, 0x01, 0x0a, 0x07, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, - 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, - 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x8a, 0x01, - 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x18, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0xc9, 0x01, 0x0a, + 0x1d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x69, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbc, 0x01, 0x0a, 0x07, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, + 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x65, 0x62, + 0x73, 0x69, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x34, 0x0a, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x6c, + 0x70, 0x52, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x22, 0x1e, 0x0a, 0x04, 0x48, 0x65, 0x6c, 0x70, 0x12, + 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x0d, 0x42, 0x6f, 0x61, 0x72, + 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, + 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x69, + 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x11, 0x54, + 0x6f, 0x6f, 0x6c, 0x73, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, + 0x52, 0x07, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x07, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0xcd, 0x01, 0x0a, 0x10, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x49, 0x0a, 0x22, 0x73, 0x6b, + 0x69, 0x70, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x66, 0x6f, 0x72, + 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x73, 0x6b, 0x69, 0x70, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x41, 0x70, 0x69, 0x46, 0x6f, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6f, 0x0a, 0x11, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x70, 0x6f, + 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x0b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x82, 0x01, 0x0a, - 0x10, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, - 0x6e, 0x22, 0x53, 0x0a, 0x11, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x52, - 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x65, 0x63, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, + 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, + 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x52, 0x0a, 0x0f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, @@ -1637,53 +1789,85 @@ var file_cc_arduino_cli_commands_v1_board_proto_rawDesc = []byte{ 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x22, 0x59, 0x0a, 0x15, 0x42, - 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x16, 0x42, 0x6f, 0x61, 0x72, 0x64, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x3c, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x0d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, - 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x1b, - 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x69, 0x73, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x40, 0x0a, 0x08, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xab, 0x01, - 0x0a, 0x12, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x48, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x22, 0x58, 0x0a, 0x13, 0x42, - 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x74, 0x65, 0x6d, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x22, 0xa4, 0x01, 0x0a, 0x15, + 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x22, 0x73, 0x6b, 0x69, 0x70, 0x5f, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x1d, 0x73, 0x6b, 0x69, 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x70, + 0x69, 0x46, 0x6f, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x0a, 0x16, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, + 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x04, + 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x96, 0x01, 0x0a, 0x0d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, + 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, + 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, + 0x73, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x40, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, + 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xab, 0x01, 0x0a, 0x12, 0x42, 0x6f, + 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, 0x67, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, + 0x72, 0x67, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x68, + 0x69, 0x64, 0x64, 0x65, 0x6e, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x48, 0x69, 0x64, 0x64, 0x65, + 0x6e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x22, 0x58, 0x0a, 0x13, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, + 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, + 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x73, 0x22, 0xd1, 0x02, 0x0a, 0x14, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x60, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x40, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, + 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x56, + 0x0a, 0x29, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, + 0x66, 0x6f, 0x72, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x23, 0x75, 0x73, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x41, 0x70, 0x69, 0x46, 0x6f, + 0x72, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x15, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, + 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, + 0x64, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, + 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, + 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1698,8 +1882,8 @@ func file_cc_arduino_cli_commands_v1_board_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_board_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_board_proto_msgTypes = make([]protoimpl.MessageInfo, 21) -var file_cc_arduino_cli_commands_v1_board_proto_goTypes = []interface{}{ +var file_cc_arduino_cli_commands_v1_board_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_cc_arduino_cli_commands_v1_board_proto_goTypes = []any{ (*BoardDetailsRequest)(nil), // 0: cc.arduino.cli.commands.v1.BoardDetailsRequest (*BoardDetailsResponse)(nil), // 1: cc.arduino.cli.commands.v1.BoardDetailsResponse (*BoardIdentificationProperties)(nil), // 2: cc.arduino.cli.commands.v1.BoardIdentificationProperties @@ -1720,40 +1904,46 @@ var file_cc_arduino_cli_commands_v1_board_proto_goTypes = []interface{}{ (*BoardListItem)(nil), // 17: cc.arduino.cli.commands.v1.BoardListItem (*BoardSearchRequest)(nil), // 18: cc.arduino.cli.commands.v1.BoardSearchRequest (*BoardSearchResponse)(nil), // 19: cc.arduino.cli.commands.v1.BoardSearchResponse - nil, // 20: cc.arduino.cli.commands.v1.BoardIdentificationProperties.PropertiesEntry - (*Instance)(nil), // 21: cc.arduino.cli.commands.v1.Instance - (*Programmer)(nil), // 22: cc.arduino.cli.commands.v1.Programmer - (*Port)(nil), // 23: cc.arduino.cli.commands.v1.Port - (*Platform)(nil), // 24: cc.arduino.cli.commands.v1.Platform + (*BoardIdentifyRequest)(nil), // 20: cc.arduino.cli.commands.v1.BoardIdentifyRequest + (*BoardIdentifyResponse)(nil), // 21: cc.arduino.cli.commands.v1.BoardIdentifyResponse + nil, // 22: cc.arduino.cli.commands.v1.BoardIdentificationProperties.PropertiesEntry + nil, // 23: cc.arduino.cli.commands.v1.BoardIdentifyRequest.PropertiesEntry + (*Instance)(nil), // 24: cc.arduino.cli.commands.v1.Instance + (*Programmer)(nil), // 25: cc.arduino.cli.commands.v1.Programmer + (*Port)(nil), // 26: cc.arduino.cli.commands.v1.Port + (*Platform)(nil), // 27: cc.arduino.cli.commands.v1.Platform } var file_cc_arduino_cli_commands_v1_board_proto_depIdxs = []int32{ - 21, // 0: cc.arduino.cli.commands.v1.BoardDetailsRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 24, // 0: cc.arduino.cli.commands.v1.BoardDetailsRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance 3, // 1: cc.arduino.cli.commands.v1.BoardDetailsResponse.package:type_name -> cc.arduino.cli.commands.v1.Package 5, // 2: cc.arduino.cli.commands.v1.BoardDetailsResponse.platform:type_name -> cc.arduino.cli.commands.v1.BoardPlatform 6, // 3: cc.arduino.cli.commands.v1.BoardDetailsResponse.tools_dependencies:type_name -> cc.arduino.cli.commands.v1.ToolsDependencies 8, // 4: cc.arduino.cli.commands.v1.BoardDetailsResponse.config_options:type_name -> cc.arduino.cli.commands.v1.ConfigOption - 22, // 5: cc.arduino.cli.commands.v1.BoardDetailsResponse.programmers:type_name -> cc.arduino.cli.commands.v1.Programmer + 25, // 5: cc.arduino.cli.commands.v1.BoardDetailsResponse.programmers:type_name -> cc.arduino.cli.commands.v1.Programmer 2, // 6: cc.arduino.cli.commands.v1.BoardDetailsResponse.identification_properties:type_name -> cc.arduino.cli.commands.v1.BoardIdentificationProperties - 20, // 7: cc.arduino.cli.commands.v1.BoardIdentificationProperties.properties:type_name -> cc.arduino.cli.commands.v1.BoardIdentificationProperties.PropertiesEntry + 22, // 7: cc.arduino.cli.commands.v1.BoardIdentificationProperties.properties:type_name -> cc.arduino.cli.commands.v1.BoardIdentificationProperties.PropertiesEntry 4, // 8: cc.arduino.cli.commands.v1.Package.help:type_name -> cc.arduino.cli.commands.v1.Help 7, // 9: cc.arduino.cli.commands.v1.ToolsDependencies.systems:type_name -> cc.arduino.cli.commands.v1.Systems 9, // 10: cc.arduino.cli.commands.v1.ConfigOption.values:type_name -> cc.arduino.cli.commands.v1.ConfigValue - 21, // 11: cc.arduino.cli.commands.v1.BoardListRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 24, // 11: cc.arduino.cli.commands.v1.BoardListRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance 12, // 12: cc.arduino.cli.commands.v1.BoardListResponse.ports:type_name -> cc.arduino.cli.commands.v1.DetectedPort 17, // 13: cc.arduino.cli.commands.v1.DetectedPort.matching_boards:type_name -> cc.arduino.cli.commands.v1.BoardListItem - 23, // 14: cc.arduino.cli.commands.v1.DetectedPort.port:type_name -> cc.arduino.cli.commands.v1.Port - 21, // 15: cc.arduino.cli.commands.v1.BoardListAllRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 26, // 14: cc.arduino.cli.commands.v1.DetectedPort.port:type_name -> cc.arduino.cli.commands.v1.Port + 24, // 15: cc.arduino.cli.commands.v1.BoardListAllRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance 17, // 16: cc.arduino.cli.commands.v1.BoardListAllResponse.boards:type_name -> cc.arduino.cli.commands.v1.BoardListItem - 21, // 17: cc.arduino.cli.commands.v1.BoardListWatchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 24, // 17: cc.arduino.cli.commands.v1.BoardListWatchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance 12, // 18: cc.arduino.cli.commands.v1.BoardListWatchResponse.port:type_name -> cc.arduino.cli.commands.v1.DetectedPort - 24, // 19: cc.arduino.cli.commands.v1.BoardListItem.platform:type_name -> cc.arduino.cli.commands.v1.Platform - 21, // 20: cc.arduino.cli.commands.v1.BoardSearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 27, // 19: cc.arduino.cli.commands.v1.BoardListItem.platform:type_name -> cc.arduino.cli.commands.v1.Platform + 24, // 20: cc.arduino.cli.commands.v1.BoardSearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance 17, // 21: cc.arduino.cli.commands.v1.BoardSearchResponse.boards:type_name -> cc.arduino.cli.commands.v1.BoardListItem - 22, // [22:22] is the sub-list for method output_type - 22, // [22:22] is the sub-list for method input_type - 22, // [22:22] is the sub-list for extension type_name - 22, // [22:22] is the sub-list for extension extendee - 0, // [0:22] is the sub-list for field type_name + 24, // 22: cc.arduino.cli.commands.v1.BoardIdentifyRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 23, // 23: cc.arduino.cli.commands.v1.BoardIdentifyRequest.properties:type_name -> cc.arduino.cli.commands.v1.BoardIdentifyRequest.PropertiesEntry + 17, // 24: cc.arduino.cli.commands.v1.BoardIdentifyResponse.boards:type_name -> cc.arduino.cli.commands.v1.BoardListItem + 25, // [25:25] is the sub-list for method output_type + 25, // [25:25] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_board_proto_init() } @@ -1764,7 +1954,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { file_cc_arduino_cli_commands_v1_common_proto_init() file_cc_arduino_cli_commands_v1_port_proto_init() if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*BoardDetailsRequest); i { case 0: return &v.state @@ -1776,7 +1966,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*BoardDetailsResponse); i { case 0: return &v.state @@ -1788,7 +1978,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*BoardIdentificationProperties); i { case 0: return &v.state @@ -1800,7 +1990,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*Package); i { case 0: return &v.state @@ -1812,7 +2002,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Help); i { case 0: return &v.state @@ -1824,7 +2014,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*BoardPlatform); i { case 0: return &v.state @@ -1836,7 +2026,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*ToolsDependencies); i { case 0: return &v.state @@ -1848,7 +2038,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*Systems); i { case 0: return &v.state @@ -1860,7 +2050,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ConfigOption); i { case 0: return &v.state @@ -1872,7 +2062,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*ConfigValue); i { case 0: return &v.state @@ -1884,7 +2074,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*BoardListRequest); i { case 0: return &v.state @@ -1896,7 +2086,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*BoardListResponse); i { case 0: return &v.state @@ -1908,7 +2098,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*DetectedPort); i { case 0: return &v.state @@ -1920,7 +2110,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*BoardListAllRequest); i { case 0: return &v.state @@ -1932,7 +2122,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*BoardListAllResponse); i { case 0: return &v.state @@ -1944,7 +2134,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*BoardListWatchRequest); i { case 0: return &v.state @@ -1956,7 +2146,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*BoardListWatchResponse); i { case 0: return &v.state @@ -1968,7 +2158,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*BoardListItem); i { case 0: return &v.state @@ -1980,7 +2170,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*BoardSearchRequest); i { case 0: return &v.state @@ -1992,7 +2182,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_board_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*BoardSearchResponse); i { case 0: return &v.state @@ -2004,6 +2194,30 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[20].Exporter = func(v any, i int) any { + switch v := v.(*BoardIdentifyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_board_proto_msgTypes[21].Exporter = func(v any, i int) any { + switch v := v.(*BoardIdentifyResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -2011,7 +2225,7 @@ func file_cc_arduino_cli_commands_v1_board_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_board_proto_rawDesc, NumEnums: 0, - NumMessages: 21, + NumMessages: 24, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/board.proto b/rpc/cc/arduino/cli/commands/v1/board.proto index fd1e5dc3825..eef8307689d 100644 --- a/rpc/cc/arduino/cli/commands/v1/board.proto +++ b/rpc/cc/arduino/cli/commands/v1/board.proto @@ -1,27 +1,28 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; package cc.arduino.cli.commands.v1; -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; - import "cc/arduino/cli/commands/v1/common.proto"; import "cc/arduino/cli/commands/v1/port.proto"; +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; + message BoardDetailsRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; @@ -57,18 +58,19 @@ message BoardDetailsResponse { repeated ToolsDependencies tools_dependencies = 10; // The board's custom configuration options. repeated ConfigOption config_options = 11; - // List of programmers supported by the board + // List of programmers supported by the board. repeated Programmer programmers = 13; - // Set to true if the board supports debugging - bool debugging_supported = 14; + reserved 14; // Identifying information for the board (e.g., USB VID/PID). repeated BoardIdentificationProperties identification_properties = 15; - // Board build properties used for compiling + // Board build properties used for compiling. repeated string build_properties = 16; + // Default programmer for the board. + string default_programmer_id = 17; } message BoardIdentificationProperties { - // A set of properties that must all be matched to identify the board + // A set of properties that must all be matched to identify the board. map<string, string> properties = 1; } @@ -155,22 +157,27 @@ message ConfigValue { message BoardListRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; - // Search for boards for the given time (in milliseconds) + // Search for boards for the given time (in milliseconds). int64 timeout = 2; // The fully qualified board name of the board you want information about // (e.g., `arduino:avr:uno`). string fqbn = 3; + // If set to true, when a board cannot be identified using the installed + // platforms, the cloud API will not be called to detect the board. + bool skip_cloud_api_for_board_detection = 4; } message BoardListResponse { // List of ports and the boards detected on those ports. repeated DetectedPort ports = 1; + // Warning messages or errors coming from the discoveries. + repeated string warnings = 2; } message DetectedPort { // The possible boards attached to the port. repeated BoardListItem matching_boards = 1; - // The port details + // The port details. Port port = 2; } @@ -179,7 +186,7 @@ message BoardListAllRequest { Instance instance = 1; // The search query to filter the board list by. repeated string search_args = 2; - // Set to true to get also the boards marked as "hidden" in the platform + // Set to true to get also the boards marked as "hidden" in the platform. bool include_hidden_boards = 3; } @@ -191,14 +198,17 @@ message BoardListAllResponse { message BoardListWatchRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; + // If set to true, when a board cannot be identified using the installed + // platforms, the cloud API will not be called to detect the board. + bool skip_cloud_api_for_board_detection = 2; } message BoardListWatchResponse { - // Event type as received from the serial discovery tool + // Event type as received from the serial discovery tool. string event_type = 1; - // Information about the port + // Information about the port. DetectedPort port = 2; - // Eventual errors when detecting connected boards + // Eventual errors when detecting connected boards. string error = 3; } @@ -207,9 +217,9 @@ message BoardListItem { string name = 1; // The fully qualified board name. Used to identify the board to a machine. string fqbn = 2; - // If the board is marked as "hidden" in the platform + // If the board is marked as "hidden" in the platform. bool is_hidden = 3; - // Platform this board belongs to + // Platform this board belongs to. Platform platform = 6; } @@ -219,7 +229,7 @@ message BoardSearchRequest { // The search query to filter the board list by. string search_args = 2; // Set to true to get also the boards marked as "hidden" in installed - // platforms + // platforms. bool include_hidden_boards = 3; } @@ -227,3 +237,18 @@ message BoardSearchResponse { // List of installed and installable boards. repeated BoardListItem boards = 1; } + +message BoardIdentifyRequest { + // Arduino Core Service instance from the `Init` response. + Instance instance = 1; + // A set of properties to search (can be taken from a Port message). + map<string, string> properties = 2; + // If set to true, when a board cannot be identified using the installed + // platforms, the cloud API will be called to detect the board. + bool use_cloud_api_for_unknown_board_detection = 3; +} + +message BoardIdentifyResponse { + // List of matching boards (they may have an FQBN with options set). + repeated BoardListItem boards = 1; +} diff --git a/rpc/cc/arduino/cli/commands/v1/commands.pb.go b/rpc/cc/arduino/cli/commands/v1/commands.pb.go index 67afa35e70b..b17f636954c 100644 --- a/rpc/cc/arduino/cli/commands/v1/commands.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/commands.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/commands.proto package commands @@ -36,21 +37,22 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Represent the reason why an instance initialization failed. type FailedInstanceInitReason int32 const ( - // FAILED_INSTANCE_INIT_REASON_UNSPECIFIED the error reason is not specialized + // FAILED_INSTANCE_INIT_REASON_UNSPECIFIED the error reason is not specialized. FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_UNSPECIFIED FailedInstanceInitReason = 0 - // INVALID_INDEX_URL a package index url is malformed + // INVALID_INDEX_URL a package index url is malformed. FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INVALID_INDEX_URL FailedInstanceInitReason = 1 // FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR failure encountered while - // loading an index + // loading an index. FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR FailedInstanceInitReason = 2 // FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR failure encountered while - // loading a tool + // loading a tool. FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR FailedInstanceInitReason = 3 // FAILED_INSTANCE_INIT_REASON_INDEX_DOWNLOAD_ERROR failure encountered while - // downloading an index + // downloading an index. FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_DOWNLOAD_ERROR FailedInstanceInitReason = 4 ) @@ -99,6 +101,67 @@ func (FailedInstanceInitReason) EnumDescriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{0} } +// The status represents the result of the index update. +type IndexUpdateReport_Status int32 + +const ( + // The status of the index update is unspecified. + IndexUpdateReport_STATUS_UNSPECIFIED IndexUpdateReport_Status = 0 + // The index has been successfully updated. + IndexUpdateReport_STATUS_UPDATED IndexUpdateReport_Status = 1 + // The index was already up to date. + IndexUpdateReport_STATUS_ALREADY_UP_TO_DATE IndexUpdateReport_Status = 2 + // The index update failed. + IndexUpdateReport_STATUS_FAILED IndexUpdateReport_Status = 3 + // The index update was skipped. + IndexUpdateReport_STATUS_SKIPPED IndexUpdateReport_Status = 4 +) + +// Enum value maps for IndexUpdateReport_Status. +var ( + IndexUpdateReport_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "STATUS_UPDATED", + 2: "STATUS_ALREADY_UP_TO_DATE", + 3: "STATUS_FAILED", + 4: "STATUS_SKIPPED", + } + IndexUpdateReport_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "STATUS_UPDATED": 1, + "STATUS_ALREADY_UP_TO_DATE": 2, + "STATUS_FAILED": 3, + "STATUS_SKIPPED": 4, + } +) + +func (x IndexUpdateReport_Status) Enum() *IndexUpdateReport_Status { + p := new(IndexUpdateReport_Status) + *p = x + return p +} + +func (x IndexUpdateReport_Status) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IndexUpdateReport_Status) Descriptor() protoreflect.EnumDescriptor { + return file_cc_arduino_cli_commands_v1_commands_proto_enumTypes[1].Descriptor() +} + +func (IndexUpdateReport_Status) Type() protoreflect.EnumType { + return &file_cc_arduino_cli_commands_v1_commands_proto_enumTypes[1] +} + +func (x IndexUpdateReport_Status) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IndexUpdateReport_Status.Descriptor instead. +func (IndexUpdateReport_Status) EnumDescriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{11, 0} +} + type CreateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -192,9 +255,9 @@ type InitRequest struct { // An Arduino Core instance. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Profile to use + // Profile to use. Profile string `protobuf:"bytes,2,opt,name=profile,proto3" json:"profile,omitempty"` - // The path where the sketch is stored + // The path where the sketch is stored. SketchPath string `protobuf:"bytes,3,opt,name=sketch_path,json=sketchPath,proto3" json:"sketch_path,omitempty"` } @@ -317,7 +380,7 @@ func (x *InitResponse) GetError() *status.Status { return nil } -func (x *InitResponse) GetProfile() *Profile { +func (x *InitResponse) GetProfile() *SketchProfile { if x, ok := x.GetMessage().(*InitResponse_Profile); ok { return x.Profile } @@ -329,16 +392,18 @@ type isInitResponse_Message interface { } type InitResponse_InitProgress struct { + // The initialization progress. InitProgress *InitResponse_Progress `protobuf:"bytes,1,opt,name=init_progress,json=initProgress,proto3,oneof"` } type InitResponse_Error struct { + // The error in case the initialization failed. Error *status.Status `protobuf:"bytes,2,opt,name=error,proto3,oneof"` } type InitResponse_Profile struct { - // Selected profile information - Profile *Profile `protobuf:"bytes,3,opt,name=profile,proto3,oneof"` + // Selected profile information. + Profile *SketchProfile `protobuf:"bytes,3,opt,name=profile,proto3,oneof"` } func (*InitResponse_InitProgress) isInitResponse_Message() {} @@ -352,9 +417,9 @@ type FailedInstanceInitError struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // specific cause of the error + // specific cause of the error. Reason FailedInstanceInitReason `protobuf:"varint,1,opt,name=reason,proto3,enum=cc.arduino.cli.commands.v1.FailedInstanceInitReason" json:"reason,omitempty"` - // explanation of the error + // explanation of the error. Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` } @@ -499,6 +564,9 @@ type UpdateIndexRequest struct { Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` // If set to true user defined package indexes will not be updated. IgnoreCustomPackageIndexes bool `protobuf:"varint,2,opt,name=ignore_custom_package_indexes,json=ignoreCustomPackageIndexes,proto3" json:"ignore_custom_package_indexes,omitempty"` + // Only perform index update if the index file is older than this value in + // seconds. + UpdateIfOlderThanSecs int64 `protobuf:"varint,3,opt,name=update_if_older_than_secs,json=updateIfOlderThanSecs,proto3" json:"update_if_older_than_secs,omitempty"` } func (x *UpdateIndexRequest) Reset() { @@ -547,13 +615,23 @@ func (x *UpdateIndexRequest) GetIgnoreCustomPackageIndexes() bool { return false } +func (x *UpdateIndexRequest) GetUpdateIfOlderThanSecs() int64 { + if x != nil { + return x.UpdateIfOlderThanSecs + } + return 0 +} + type UpdateIndexResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the package index download. - DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3" json:"download_progress,omitempty"` + // Types that are assignable to Message: + // + // *UpdateIndexResponse_DownloadProgress + // *UpdateIndexResponse_Result_ + Message isUpdateIndexResponse_Message `protobuf_oneof:"message"` } func (x *UpdateIndexResponse) Reset() { @@ -588,13 +666,45 @@ func (*UpdateIndexResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{8} } +func (m *UpdateIndexResponse) GetMessage() isUpdateIndexResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *UpdateIndexResponse) GetDownloadProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*UpdateIndexResponse_DownloadProgress); ok { return x.DownloadProgress } return nil } +func (x *UpdateIndexResponse) GetResult() *UpdateIndexResponse_Result { + if x, ok := x.GetMessage().(*UpdateIndexResponse_Result_); ok { + return x.Result + } + return nil +} + +type isUpdateIndexResponse_Message interface { + isUpdateIndexResponse_Message() +} + +type UpdateIndexResponse_DownloadProgress struct { + // Progress of the package index download. + DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3,oneof"` +} + +type UpdateIndexResponse_Result_ struct { + // The result of the index update. + Result *UpdateIndexResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*UpdateIndexResponse_DownloadProgress) isUpdateIndexResponse_Message() {} + +func (*UpdateIndexResponse_Result_) isUpdateIndexResponse_Message() {} + type UpdateLibrariesIndexRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -602,6 +712,9 @@ type UpdateLibrariesIndexRequest struct { // Arduino Core Service instance from the Init response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + // Only perform index update if the index file is older than this value in + // seconds. + UpdateIfOlderThanSecs int64 `protobuf:"varint,2,opt,name=update_if_older_than_secs,json=updateIfOlderThanSecs,proto3" json:"update_if_older_than_secs,omitempty"` } func (x *UpdateLibrariesIndexRequest) Reset() { @@ -643,13 +756,23 @@ func (x *UpdateLibrariesIndexRequest) GetInstance() *Instance { return nil } +func (x *UpdateLibrariesIndexRequest) GetUpdateIfOlderThanSecs() int64 { + if x != nil { + return x.UpdateIfOlderThanSecs + } + return 0 +} + type UpdateLibrariesIndexResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the libraries index download. - DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3" json:"download_progress,omitempty"` + // Types that are assignable to Message: + // + // *UpdateLibrariesIndexResponse_DownloadProgress + // *UpdateLibrariesIndexResponse_Result_ + Message isUpdateLibrariesIndexResponse_Message `protobuf_oneof:"message"` } func (x *UpdateLibrariesIndexResponse) Reset() { @@ -684,13 +807,102 @@ func (*UpdateLibrariesIndexResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{10} } +func (m *UpdateLibrariesIndexResponse) GetMessage() isUpdateLibrariesIndexResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *UpdateLibrariesIndexResponse) GetDownloadProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*UpdateLibrariesIndexResponse_DownloadProgress); ok { return x.DownloadProgress } return nil } +func (x *UpdateLibrariesIndexResponse) GetResult() *UpdateLibrariesIndexResponse_Result { + if x, ok := x.GetMessage().(*UpdateLibrariesIndexResponse_Result_); ok { + return x.Result + } + return nil +} + +type isUpdateLibrariesIndexResponse_Message interface { + isUpdateLibrariesIndexResponse_Message() +} + +type UpdateLibrariesIndexResponse_DownloadProgress struct { + // Progress of the libraries index download. + DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3,oneof"` +} + +type UpdateLibrariesIndexResponse_Result_ struct { + // The result of the index update. + Result *UpdateLibrariesIndexResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*UpdateLibrariesIndexResponse_DownloadProgress) isUpdateLibrariesIndexResponse_Message() {} + +func (*UpdateLibrariesIndexResponse_Result_) isUpdateLibrariesIndexResponse_Message() {} + +type IndexUpdateReport struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The URL of the index that was updated. + IndexUrl string `protobuf:"bytes,1,opt,name=index_url,json=indexUrl,proto3" json:"index_url,omitempty"` + // The result of the index update. + Status IndexUpdateReport_Status `protobuf:"varint,2,opt,name=status,proto3,enum=cc.arduino.cli.commands.v1.IndexUpdateReport_Status" json:"status,omitempty"` +} + +func (x *IndexUpdateReport) Reset() { + *x = IndexUpdateReport{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IndexUpdateReport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IndexUpdateReport) ProtoMessage() {} + +func (x *IndexUpdateReport) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IndexUpdateReport.ProtoReflect.Descriptor instead. +func (*IndexUpdateReport) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{11} +} + +func (x *IndexUpdateReport) GetIndexUrl() string { + if x != nil { + return x.IndexUrl + } + return "" +} + +func (x *IndexUpdateReport) GetStatus() IndexUpdateReport_Status { + if x != nil { + return x.Status + } + return IndexUpdateReport_STATUS_UNSPECIFIED +} + type VersionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -700,7 +912,7 @@ type VersionRequest struct { func (x *VersionRequest) Reset() { *x = VersionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -713,7 +925,7 @@ func (x *VersionRequest) String() string { func (*VersionRequest) ProtoMessage() {} func (x *VersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -726,7 +938,7 @@ func (x *VersionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionRequest.ProtoReflect.Descriptor instead. func (*VersionRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{11} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{12} } type VersionResponse struct { @@ -741,7 +953,7 @@ type VersionResponse struct { func (x *VersionResponse) Reset() { *x = VersionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -754,7 +966,7 @@ func (x *VersionResponse) String() string { func (*VersionResponse) ProtoMessage() {} func (x *VersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -767,7 +979,7 @@ func (x *VersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionResponse.ProtoReflect.Descriptor instead. func (*VersionResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{12} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{13} } func (x *VersionResponse) GetVersion() string { @@ -782,21 +994,21 @@ type NewSketchRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // New sketch name + // New sketch name. SketchName string `protobuf:"bytes,2,opt,name=sketch_name,json=sketchName,proto3" json:"sketch_name,omitempty"` // Optional: create a Sketch in this directory // (used as "Sketchbook" directory). // Default Sketchbook directory "directories.User" is used if sketch_dir is // empty. SketchDir string `protobuf:"bytes,3,opt,name=sketch_dir,json=sketchDir,proto3" json:"sketch_dir,omitempty"` - // Specificies if an existing .ino sketch should be overwritten + // Specificies if an existing .ino sketch should be overwritten. Overwrite bool `protobuf:"varint,4,opt,name=overwrite,proto3" json:"overwrite,omitempty"` } func (x *NewSketchRequest) Reset() { *x = NewSketchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -809,7 +1021,7 @@ func (x *NewSketchRequest) String() string { func (*NewSketchRequest) ProtoMessage() {} func (x *NewSketchRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -822,7 +1034,7 @@ func (x *NewSketchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NewSketchRequest.ProtoReflect.Descriptor instead. func (*NewSketchRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{13} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{14} } func (x *NewSketchRequest) GetSketchName() string { @@ -851,14 +1063,14 @@ type NewSketchResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Absolute path to a main sketch file + // Absolute path to a main sketch file. MainFile string `protobuf:"bytes,1,opt,name=main_file,json=mainFile,proto3" json:"main_file,omitempty"` } func (x *NewSketchResponse) Reset() { *x = NewSketchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -871,7 +1083,7 @@ func (x *NewSketchResponse) String() string { func (*NewSketchResponse) ProtoMessage() {} func (x *NewSketchResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -884,7 +1096,7 @@ func (x *NewSketchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NewSketchResponse.ProtoReflect.Descriptor instead. func (*NewSketchResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{14} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{15} } func (x *NewSketchResponse) GetMainFile() string { @@ -899,14 +1111,14 @@ type LoadSketchRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Absolute path to single sketch file or a sketch folder + // Absolute path to single sketch file or a sketch folder. SketchPath string `protobuf:"bytes,2,opt,name=sketch_path,json=sketchPath,proto3" json:"sketch_path,omitempty"` } func (x *LoadSketchRequest) Reset() { *x = LoadSketchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -919,7 +1131,7 @@ func (x *LoadSketchRequest) String() string { func (*LoadSketchRequest) ProtoMessage() {} func (x *LoadSketchRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -932,7 +1144,7 @@ func (x *LoadSketchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LoadSketchRequest.ProtoReflect.Descriptor instead. func (*LoadSketchRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{15} + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{16} } func (x *LoadSketchRequest) GetSketchPath() string { @@ -942,89 +1154,13 @@ func (x *LoadSketchRequest) GetSketchPath() string { return "" } -type SketchProfile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of the profile - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // FQBN used by the profile - Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` -} - -func (x *SketchProfile) Reset() { - *x = SketchProfile{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SketchProfile) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SketchProfile) ProtoMessage() {} - -func (x *SketchProfile) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SketchProfile.ProtoReflect.Descriptor instead. -func (*SketchProfile) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{16} -} - -func (x *SketchProfile) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SketchProfile) GetFqbn() string { - if x != nil { - return x.Fqbn - } - return "" -} - type LoadSketchResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Absolute path to a main sketch files - MainFile string `protobuf:"bytes,1,opt,name=main_file,json=mainFile,proto3" json:"main_file,omitempty"` - // Absolute path to folder that contains main_file - LocationPath string `protobuf:"bytes,2,opt,name=location_path,json=locationPath,proto3" json:"location_path,omitempty"` - // List of absolute paths to other sketch files - OtherSketchFiles []string `protobuf:"bytes,3,rep,name=other_sketch_files,json=otherSketchFiles,proto3" json:"other_sketch_files,omitempty"` - // List of absolute paths to additional sketch files - AdditionalFiles []string `protobuf:"bytes,4,rep,name=additional_files,json=additionalFiles,proto3" json:"additional_files,omitempty"` - // List of absolute paths to supported files in the sketch root folder, main - // file excluded - RootFolderFiles []string `protobuf:"bytes,5,rep,name=root_folder_files,json=rootFolderFiles,proto3" json:"root_folder_files,omitempty"` - // Default FQBN set in project file (sketch.yaml) - DefaultFqbn string `protobuf:"bytes,6,opt,name=default_fqbn,json=defaultFqbn,proto3" json:"default_fqbn,omitempty"` - // Default Port set in project file (sketch.yaml) - DefaultPort string `protobuf:"bytes,7,opt,name=default_port,json=defaultPort,proto3" json:"default_port,omitempty"` - // Default Protocol set in project file (sketch.yaml) - DefaultProtocol string `protobuf:"bytes,8,opt,name=default_protocol,json=defaultProtocol,proto3" json:"default_protocol,omitempty"` - // List of profiles present in the project file (sketch.yaml) - Profiles []*SketchProfile `protobuf:"bytes,9,rep,name=profiles,proto3" json:"profiles,omitempty"` - // Default profile set in the project file (sketch.yaml) - DefaultProfile *SketchProfile `protobuf:"bytes,10,opt,name=default_profile,json=defaultProfile,proto3" json:"default_profile,omitempty"` + // The loaded sketch. + Sketch *Sketch `protobuf:"bytes,1,opt,name=sketch,proto3" json:"sketch,omitempty"` } func (x *LoadSketchResponse) Reset() { @@ -1059,72 +1195,9 @@ func (*LoadSketchResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{17} } -func (x *LoadSketchResponse) GetMainFile() string { - if x != nil { - return x.MainFile - } - return "" -} - -func (x *LoadSketchResponse) GetLocationPath() string { - if x != nil { - return x.LocationPath - } - return "" -} - -func (x *LoadSketchResponse) GetOtherSketchFiles() []string { - if x != nil { - return x.OtherSketchFiles - } - return nil -} - -func (x *LoadSketchResponse) GetAdditionalFiles() []string { - if x != nil { - return x.AdditionalFiles - } - return nil -} - -func (x *LoadSketchResponse) GetRootFolderFiles() []string { - if x != nil { - return x.RootFolderFiles - } - return nil -} - -func (x *LoadSketchResponse) GetDefaultFqbn() string { - if x != nil { - return x.DefaultFqbn - } - return "" -} - -func (x *LoadSketchResponse) GetDefaultPort() string { - if x != nil { - return x.DefaultPort - } - return "" -} - -func (x *LoadSketchResponse) GetDefaultProtocol() string { - if x != nil { - return x.DefaultProtocol - } - return "" -} - -func (x *LoadSketchResponse) GetProfiles() []*SketchProfile { - if x != nil { - return x.Profiles - } - return nil -} - -func (x *LoadSketchResponse) GetDefaultProfile() *SketchProfile { +func (x *LoadSketchResponse) GetSketch() *Sketch { if x != nil { - return x.DefaultProfile + return x.Sketch } return nil } @@ -1134,14 +1207,14 @@ type ArchiveSketchRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Absolute path to Sketch file or folder containing Sketch file + // Absolute path to Sketch file or folder containing Sketch file. SketchPath string `protobuf:"bytes,1,opt,name=sketch_path,json=sketchPath,proto3" json:"sketch_path,omitempty"` // Absolute path to archive that will be created or folder that will contain - // it + // it. ArchivePath string `protobuf:"bytes,2,opt,name=archive_path,json=archivePath,proto3" json:"archive_path,omitempty"` - // Specifies if build directory should be included in the archive + // Specifies if build directory should be included in the archive. IncludeBuildDir bool `protobuf:"varint,3,opt,name=include_build_dir,json=includeBuildDir,proto3" json:"include_build_dir,omitempty"` - // Allows to override an already existing archive + // Allows to override an already existing archive. Overwrite bool `protobuf:"varint,4,opt,name=overwrite,proto3" json:"overwrite,omitempty"` } @@ -1248,14 +1321,16 @@ type SetSketchDefaultsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Absolute path to Sketch file or folder containing Sketch file + // Absolute path to Sketch file or folder containing Sketch file. SketchPath string `protobuf:"bytes,1,opt,name=sketch_path,json=sketchPath,proto3" json:"sketch_path,omitempty"` - // The desired value for default_fqbn in project file (sketch.yaml) + // The desired value for default_fqbn in project file (sketch.yaml). DefaultFqbn string `protobuf:"bytes,2,opt,name=default_fqbn,json=defaultFqbn,proto3" json:"default_fqbn,omitempty"` - // The desired value for default_port in project file (sketch.yaml) + // The desired value for default_port in project file (sketch.yaml). DefaultPortAddress string `protobuf:"bytes,3,opt,name=default_port_address,json=defaultPortAddress,proto3" json:"default_port_address,omitempty"` - // The desired value for default_protocol in project file (sketch.yaml) + // The desired value for default_protocol in project file (sketch.yaml). DefaultPortProtocol string `protobuf:"bytes,4,opt,name=default_port_protocol,json=defaultPortProtocol,proto3" json:"default_port_protocol,omitempty"` + // The desired value for default_programmer in project file (sketch.yaml). + DefaultProgrammer string `protobuf:"bytes,5,opt,name=default_programmer,json=defaultProgrammer,proto3" json:"default_programmer,omitempty"` } func (x *SetSketchDefaultsRequest) Reset() { @@ -1318,20 +1393,30 @@ func (x *SetSketchDefaultsRequest) GetDefaultPortProtocol() string { return "" } +func (x *SetSketchDefaultsRequest) GetDefaultProgrammer() string { + if x != nil { + return x.DefaultProgrammer + } + return "" +} + type SetSketchDefaultsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The value of default_fqnn that has been written in project file - // (sketch.yaml) + // (sketch.yaml). DefaultFqbn string `protobuf:"bytes,1,opt,name=default_fqbn,json=defaultFqbn,proto3" json:"default_fqbn,omitempty"` // The value of default_port that has been written in project file - // (sketch.yaml) + // (sketch.yaml). DefaultPortAddress string `protobuf:"bytes,2,opt,name=default_port_address,json=defaultPortAddress,proto3" json:"default_port_address,omitempty"` // The value of default_protocol that has been written in project file - // (sketch.yaml) + // (sketch.yaml). DefaultPortProtocol string `protobuf:"bytes,3,opt,name=default_port_protocol,json=defaultPortProtocol,proto3" json:"default_port_protocol,omitempty"` + // The value of default_programmer that has been written in project file + // (sketch.yaml). + DefaultProgrammer string `protobuf:"bytes,4,opt,name=default_programmer,json=defaultProgrammer,proto3" json:"default_programmer,omitempty"` } func (x *SetSketchDefaultsResponse) Reset() { @@ -1387,19 +1472,25 @@ func (x *SetSketchDefaultsResponse) GetDefaultPortProtocol() string { return "" } -type InitResponse_Progress struct { +func (x *SetSketchDefaultsResponse) GetDefaultProgrammer() string { + if x != nil { + return x.DefaultProgrammer + } + return "" +} + +type CheckForArduinoCLIUpdatesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of platforms and libraries index files. - DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3" json:"download_progress,omitempty"` - // Describes the current stage of the initialization. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Force the check, even if the configuration says not to check for + // updates. + ForceCheck bool `protobuf:"varint,1,opt,name=force_check,json=forceCheck,proto3" json:"force_check,omitempty"` } -func (x *InitResponse_Progress) Reset() { - *x = InitResponse_Progress{} +func (x *CheckForArduinoCLIUpdatesRequest) Reset() { + *x = CheckForArduinoCLIUpdatesRequest{} if protoimpl.UnsafeEnabled { mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1407,6 +1498,191 @@ func (x *InitResponse_Progress) Reset() { } } +func (x *CheckForArduinoCLIUpdatesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckForArduinoCLIUpdatesRequest) ProtoMessage() {} + +func (x *CheckForArduinoCLIUpdatesRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckForArduinoCLIUpdatesRequest.ProtoReflect.Descriptor instead. +func (*CheckForArduinoCLIUpdatesRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{22} +} + +func (x *CheckForArduinoCLIUpdatesRequest) GetForceCheck() bool { + if x != nil { + return x.ForceCheck + } + return false +} + +type CheckForArduinoCLIUpdatesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The latest version of Arduino CLI available, if bigger than the + // current version. + NewestVersion string `protobuf:"bytes,1,opt,name=newest_version,json=newestVersion,proto3" json:"newest_version,omitempty"` +} + +func (x *CheckForArduinoCLIUpdatesResponse) Reset() { + *x = CheckForArduinoCLIUpdatesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckForArduinoCLIUpdatesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckForArduinoCLIUpdatesResponse) ProtoMessage() {} + +func (x *CheckForArduinoCLIUpdatesResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckForArduinoCLIUpdatesResponse.ProtoReflect.Descriptor instead. +func (*CheckForArduinoCLIUpdatesResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{23} +} + +func (x *CheckForArduinoCLIUpdatesResponse) GetNewestVersion() string { + if x != nil { + return x.NewestVersion + } + return "" +} + +type CleanDownloadCacheDirectoryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Arduino Core Service instance. + Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` +} + +func (x *CleanDownloadCacheDirectoryRequest) Reset() { + *x = CleanDownloadCacheDirectoryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CleanDownloadCacheDirectoryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CleanDownloadCacheDirectoryRequest) ProtoMessage() {} + +func (x *CleanDownloadCacheDirectoryRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CleanDownloadCacheDirectoryRequest.ProtoReflect.Descriptor instead. +func (*CleanDownloadCacheDirectoryRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{24} +} + +func (x *CleanDownloadCacheDirectoryRequest) GetInstance() *Instance { + if x != nil { + return x.Instance + } + return nil +} + +type CleanDownloadCacheDirectoryResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CleanDownloadCacheDirectoryResponse) Reset() { + *x = CleanDownloadCacheDirectoryResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CleanDownloadCacheDirectoryResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CleanDownloadCacheDirectoryResponse) ProtoMessage() {} + +func (x *CleanDownloadCacheDirectoryResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CleanDownloadCacheDirectoryResponse.ProtoReflect.Descriptor instead. +func (*CleanDownloadCacheDirectoryResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{25} +} + +type InitResponse_Progress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Progress of the downloads of platforms and libraries index files. + DownloadProgress *DownloadProgress `protobuf:"bytes,1,opt,name=download_progress,json=downloadProgress,proto3" json:"download_progress,omitempty"` + // Describes the current stage of the initialization. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` +} + +func (x *InitResponse_Progress) Reset() { + *x = InitResponse_Progress{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + func (x *InitResponse_Progress) String() string { return protoimpl.X.MessageStringOf(x) } @@ -1414,7 +1690,7 @@ func (x *InitResponse_Progress) String() string { func (*InitResponse_Progress) ProtoMessage() {} func (x *InitResponse_Progress) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[22] + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1444,6 +1720,102 @@ func (x *InitResponse_Progress) GetTaskProgress() *TaskProgress { return nil } +type UpdateIndexResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The result of the packages index update. + UpdatedIndexes []*IndexUpdateReport `protobuf:"bytes,1,rep,name=updated_indexes,json=updatedIndexes,proto3" json:"updated_indexes,omitempty"` +} + +func (x *UpdateIndexResponse_Result) Reset() { + *x = UpdateIndexResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateIndexResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateIndexResponse_Result) ProtoMessage() {} + +func (x *UpdateIndexResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateIndexResponse_Result.ProtoReflect.Descriptor instead. +func (*UpdateIndexResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{8, 0} +} + +func (x *UpdateIndexResponse_Result) GetUpdatedIndexes() []*IndexUpdateReport { + if x != nil { + return x.UpdatedIndexes + } + return nil +} + +type UpdateLibrariesIndexResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The result of the libraries index update. + LibrariesIndex *IndexUpdateReport `protobuf:"bytes,1,opt,name=libraries_index,json=librariesIndex,proto3" json:"libraries_index,omitempty"` +} + +func (x *UpdateLibrariesIndexResponse_Result) Reset() { + *x = UpdateLibrariesIndexResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateLibrariesIndexResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateLibrariesIndexResponse_Result) ProtoMessage() {} + +func (x *UpdateLibrariesIndexResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateLibrariesIndexResponse_Result.ProtoReflect.Descriptor instead. +func (*UpdateLibrariesIndexResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP(), []int{10, 0} +} + +func (x *UpdateLibrariesIndexResponse_Result) GetLibrariesIndex() *IndexUpdateReport { + if x != nil { + return x.LibrariesIndex + } + return nil +} + var File_cc_arduino_cli_commands_v1_commands_proto protoreflect.FileDescriptor var file_cc_arduino_cli_commands_v1_commands_proto_rawDesc = []byte{ @@ -1451,115 +1823,166 @@ var file_cc_arduino_cli_commands_v1_commands_proto_rawDesc = []byte{ 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, - 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x63, 0x63, 0x2f, 0x61, 0x72, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x26, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x25, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, + 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x28, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, - 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x63, 0x63, 0x2f, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x26, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, - 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, - 0x65, 0x62, 0x75, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x63, 0x63, 0x2f, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x63, - 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x62, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x52, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x24, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, + 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, + 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x29, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, + 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x63, 0x63, + 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0f, + 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x52, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, + 0x22, 0x9d, 0x03, 0x0a, 0x0c, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, - 0x68, 0x50, 0x61, 0x74, 0x68, 0x22, 0x97, 0x03, 0x0a, 0x0c, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3f, 0x0a, 0x07, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x69, + 0x6e, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0xb4, + 0x01, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x59, 0x0a, 0x11, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0xb4, 0x01, - 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x59, 0x0a, 0x11, 0x64, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x81, 0x01, 0x0a, 0x17, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4c, 0x0a, 0x06, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x81, 0x01, 0x0a, 0x17, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4c, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x63, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x52, 0x0a, 0x0e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, + 0x72, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x12, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x67, 0x6e, + 0x6f, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x5f, + 0x73, 0x65, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x49, 0x66, 0x4f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x53, 0x65, 0x63, + 0x73, 0x22, 0xb1, 0x02, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x11, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x48, 0x00, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, + 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x60, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x52, 0x0a, 0x0e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x22, 0x70, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, - 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x5f, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x79, 0x0a, 0x1c, 0x55, 0x70, 0x64, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x5f, + 0x73, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x49, 0x66, 0x4f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x53, 0x65, 0x63, + 0x73, 0x22, 0xc3, 0x02, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x10, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x59, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x11, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x60, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, + 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x0e, 0x6c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x09, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xfa, 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x72, 0x6c, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x7a, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1d, + 0x0a, 0x19, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, + 0x5f, 0x55, 0x50, 0x5f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x11, 0x0a, + 0x0d, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, + 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, + 0x45, 0x44, 0x10, 0x04, 0x22, 0x10, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2b, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, @@ -1577,297 +2000,292 @@ var file_cc_arduino_cli_commands_v1_commands_proto_rawDesc = []byte{ 0x11, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, - 0x61, 0x74, 0x68, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x37, 0x0a, 0x0d, 0x53, 0x6b, 0x65, - 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, - 0x62, 0x6e, 0x22, 0xe7, 0x03, 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x69, - 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, - 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2c, 0x0a, 0x12, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x5f, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x6b, - 0x65, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0f, 0x72, 0x6f, 0x6f, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, - 0x71, 0x62, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0e, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xa4, 0x01, 0x0a, - 0x14, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, - 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x44, 0x69, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, - 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc4, 0x01, 0x0a, - 0x18, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, - 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x71, 0x62, 0x6e, 0x12, 0x30, 0x0a, - 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x32, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, - 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x46, 0x71, 0x62, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, - 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2a, 0x93, 0x02, 0x0a, 0x18, 0x46, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, - 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x46, 0x41, 0x49, 0x4c, 0x45, - 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, - 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x31, 0x0a, 0x2d, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, + 0x61, 0x74, 0x68, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x50, 0x0a, 0x12, 0x4c, 0x6f, 0x61, + 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3a, 0x0a, 0x06, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x65, + 0x74, 0x63, 0x68, 0x52, 0x06, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x22, 0xa4, 0x01, 0x0a, 0x14, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, + 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x44, 0x69, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, + 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf3, 0x01, 0x0a, 0x18, + 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, + 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, + 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x71, 0x62, 0x6e, 0x12, 0x30, 0x0a, 0x14, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, + 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, + 0x72, 0x22, 0xd3, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x71, 0x62, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x71, + 0x62, 0x6e, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, + 0x72, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x22, 0x43, 0x0a, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x46, 0x6f, 0x72, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x4c, 0x49, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x4a, 0x0a, 0x21, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x6f, 0x72, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, + 0x4c, 0x49, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x65, 0x73, + 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x22, 0x43, 0x6c, 0x65, 0x61, + 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, + 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x22, 0x25, 0x0a, 0x23, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x93, 0x02, 0x0a, 0x18, 0x46, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, + 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, + 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x31, 0x0a, 0x2d, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, + 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, 0x55, + 0x52, 0x4c, 0x10, 0x01, 0x12, 0x30, 0x0a, 0x2c, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, - 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x44, 0x45, - 0x58, 0x5f, 0x55, 0x52, 0x4c, 0x10, 0x01, 0x12, 0x30, 0x0a, 0x2c, 0x46, 0x41, 0x49, 0x4c, 0x45, + 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x2f, 0x0a, 0x2b, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, 0x52, + 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x54, 0x4f, 0x4f, 0x4c, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x34, 0x0a, 0x30, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, - 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, 0x4c, 0x4f, 0x41, - 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x2f, 0x0a, 0x2b, 0x46, 0x41, 0x49, - 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, 0x49, - 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x54, 0x4f, 0x4f, 0x4c, 0x5f, 0x4c, 0x4f, - 0x41, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x34, 0x0a, 0x30, 0x46, 0x41, - 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x49, 0x4e, - 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, - 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, - 0x32, 0xab, 0x27, 0x0a, 0x12, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x6f, 0x72, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x61, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x04, 0x49, 0x6e, - 0x69, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x5f, 0x44, 0x4f, 0x57, + 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x32, 0xf1, 0x30, + 0x0a, 0x12, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x61, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x29, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, + 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x07, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, + 0x79, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, + 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x0b, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2e, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x8d, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, + 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x63, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x64, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x07, 0x44, 0x65, 0x73, - 0x74, 0x72, 0x6f, 0x79, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x72, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2e, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x8d, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, - 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x37, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, - 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x09, 0x4e, 0x65, 0x77, - 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x65, 0x77, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x4e, 0x65, 0x77, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, - 0x74, 0x63, 0x68, 0x12, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x09, 0x4e, 0x65, 0x77, 0x53, 0x6b, 0x65, + 0x74, 0x63, 0x68, 0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x2e, 0x4e, 0x65, 0x77, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, + 0x65, 0x77, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, + 0x12, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, + 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, + 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x76, 0x0a, 0x0d, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, + 0x63, 0x68, 0x12, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x0d, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, - 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x53, 0x65, + 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, + 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, + 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x82, 0x01, 0x0a, - 0x11, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x73, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x71, 0x0a, 0x0c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x09, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, + 0x0a, 0x0c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2f, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, + 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, - 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, - 0x0a, 0x0c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x2f, + 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x68, 0x0a, 0x09, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, - 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0c, 0x42, + 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x2f, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, + 0x0a, 0x0b, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x2e, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, + 0x0a, 0x0d, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x12, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, - 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6e, 0x0a, 0x0b, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x12, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, - 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, - 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x79, 0x0a, 0x0e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, + 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x0e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, + 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x07, - 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x7c, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x7f, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, - 0x01, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, + 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x64, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7c, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x7f, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7c, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, - 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x61, 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x29, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7c, 0x0a, 0x0f, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x32, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x61, 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x8e, 0x01, 0x0a, 0x15, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x38, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, - 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x8e, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, - 0x72, 0x12, 0x38, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x63, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x86, 0x01, 0x0a, 0x13, + 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x12, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, - 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x86, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x12, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, - 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, - 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x44, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x0e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, - 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x44, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x45, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x0e, 0x42, 0x75, 0x72, 0x6e, 0x42, + 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, - 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x77, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, + 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x77, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0f, 0x4c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0f, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, @@ -1971,19 +2389,96 @@ var file_cc_arduino_cli_commands_v1_commands_proto_rawDesc = []byte{ 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, - 0x01, 0x30, 0x01, 0x12, 0x79, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x01, 0x30, 0x01, 0x12, 0x7f, 0x0a, 0x10, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, + 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x98, 0x01, 0x0a, 0x19, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x6f, 0x72, 0x41, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x43, 0x4c, 0x49, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3c, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x46, 0x6f, 0x72, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x4c, 0x49, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x6f, + 0x72, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x4c, 0x49, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x1b, 0x43, + 0x6c, 0x65, 0x61, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3e, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x11, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x76, + 0x65, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x76, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, + 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x7d, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x48, - 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, - 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x80, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, + 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x65, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x65, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, + 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, + 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1998,204 +2493,249 @@ func file_cc_arduino_cli_commands_v1_commands_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_commands_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_commands_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_cc_arduino_cli_commands_v1_commands_proto_msgTypes = make([]protoimpl.MessageInfo, 23) -var file_cc_arduino_cli_commands_v1_commands_proto_goTypes = []interface{}{ +var file_cc_arduino_cli_commands_v1_commands_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_cc_arduino_cli_commands_v1_commands_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_cc_arduino_cli_commands_v1_commands_proto_goTypes = []any{ (FailedInstanceInitReason)(0), // 0: cc.arduino.cli.commands.v1.FailedInstanceInitReason - (*CreateRequest)(nil), // 1: cc.arduino.cli.commands.v1.CreateRequest - (*CreateResponse)(nil), // 2: cc.arduino.cli.commands.v1.CreateResponse - (*InitRequest)(nil), // 3: cc.arduino.cli.commands.v1.InitRequest - (*InitResponse)(nil), // 4: cc.arduino.cli.commands.v1.InitResponse - (*FailedInstanceInitError)(nil), // 5: cc.arduino.cli.commands.v1.FailedInstanceInitError - (*DestroyRequest)(nil), // 6: cc.arduino.cli.commands.v1.DestroyRequest - (*DestroyResponse)(nil), // 7: cc.arduino.cli.commands.v1.DestroyResponse - (*UpdateIndexRequest)(nil), // 8: cc.arduino.cli.commands.v1.UpdateIndexRequest - (*UpdateIndexResponse)(nil), // 9: cc.arduino.cli.commands.v1.UpdateIndexResponse - (*UpdateLibrariesIndexRequest)(nil), // 10: cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest - (*UpdateLibrariesIndexResponse)(nil), // 11: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse - (*VersionRequest)(nil), // 12: cc.arduino.cli.commands.v1.VersionRequest - (*VersionResponse)(nil), // 13: cc.arduino.cli.commands.v1.VersionResponse - (*NewSketchRequest)(nil), // 14: cc.arduino.cli.commands.v1.NewSketchRequest - (*NewSketchResponse)(nil), // 15: cc.arduino.cli.commands.v1.NewSketchResponse - (*LoadSketchRequest)(nil), // 16: cc.arduino.cli.commands.v1.LoadSketchRequest - (*SketchProfile)(nil), // 17: cc.arduino.cli.commands.v1.SketchProfile - (*LoadSketchResponse)(nil), // 18: cc.arduino.cli.commands.v1.LoadSketchResponse - (*ArchiveSketchRequest)(nil), // 19: cc.arduino.cli.commands.v1.ArchiveSketchRequest - (*ArchiveSketchResponse)(nil), // 20: cc.arduino.cli.commands.v1.ArchiveSketchResponse - (*SetSketchDefaultsRequest)(nil), // 21: cc.arduino.cli.commands.v1.SetSketchDefaultsRequest - (*SetSketchDefaultsResponse)(nil), // 22: cc.arduino.cli.commands.v1.SetSketchDefaultsResponse - (*InitResponse_Progress)(nil), // 23: cc.arduino.cli.commands.v1.InitResponse.Progress - (*Instance)(nil), // 24: cc.arduino.cli.commands.v1.Instance - (*status.Status)(nil), // 25: google.rpc.Status - (*Profile)(nil), // 26: cc.arduino.cli.commands.v1.Profile - (*DownloadProgress)(nil), // 27: cc.arduino.cli.commands.v1.DownloadProgress - (*TaskProgress)(nil), // 28: cc.arduino.cli.commands.v1.TaskProgress - (*BoardDetailsRequest)(nil), // 29: cc.arduino.cli.commands.v1.BoardDetailsRequest - (*BoardListRequest)(nil), // 30: cc.arduino.cli.commands.v1.BoardListRequest - (*BoardListAllRequest)(nil), // 31: cc.arduino.cli.commands.v1.BoardListAllRequest - (*BoardSearchRequest)(nil), // 32: cc.arduino.cli.commands.v1.BoardSearchRequest - (*BoardListWatchRequest)(nil), // 33: cc.arduino.cli.commands.v1.BoardListWatchRequest - (*CompileRequest)(nil), // 34: cc.arduino.cli.commands.v1.CompileRequest - (*PlatformInstallRequest)(nil), // 35: cc.arduino.cli.commands.v1.PlatformInstallRequest - (*PlatformDownloadRequest)(nil), // 36: cc.arduino.cli.commands.v1.PlatformDownloadRequest - (*PlatformUninstallRequest)(nil), // 37: cc.arduino.cli.commands.v1.PlatformUninstallRequest - (*PlatformUpgradeRequest)(nil), // 38: cc.arduino.cli.commands.v1.PlatformUpgradeRequest - (*UploadRequest)(nil), // 39: cc.arduino.cli.commands.v1.UploadRequest - (*UploadUsingProgrammerRequest)(nil), // 40: cc.arduino.cli.commands.v1.UploadUsingProgrammerRequest - (*SupportedUserFieldsRequest)(nil), // 41: cc.arduino.cli.commands.v1.SupportedUserFieldsRequest - (*ListProgrammersAvailableForUploadRequest)(nil), // 42: cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadRequest - (*BurnBootloaderRequest)(nil), // 43: cc.arduino.cli.commands.v1.BurnBootloaderRequest - (*PlatformSearchRequest)(nil), // 44: cc.arduino.cli.commands.v1.PlatformSearchRequest - (*PlatformListRequest)(nil), // 45: cc.arduino.cli.commands.v1.PlatformListRequest - (*LibraryDownloadRequest)(nil), // 46: cc.arduino.cli.commands.v1.LibraryDownloadRequest - (*LibraryInstallRequest)(nil), // 47: cc.arduino.cli.commands.v1.LibraryInstallRequest - (*LibraryUpgradeRequest)(nil), // 48: cc.arduino.cli.commands.v1.LibraryUpgradeRequest - (*ZipLibraryInstallRequest)(nil), // 49: cc.arduino.cli.commands.v1.ZipLibraryInstallRequest - (*GitLibraryInstallRequest)(nil), // 50: cc.arduino.cli.commands.v1.GitLibraryInstallRequest - (*LibraryUninstallRequest)(nil), // 51: cc.arduino.cli.commands.v1.LibraryUninstallRequest - (*LibraryUpgradeAllRequest)(nil), // 52: cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest - (*LibraryResolveDependenciesRequest)(nil), // 53: cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest - (*LibrarySearchRequest)(nil), // 54: cc.arduino.cli.commands.v1.LibrarySearchRequest - (*LibraryListRequest)(nil), // 55: cc.arduino.cli.commands.v1.LibraryListRequest - (*MonitorRequest)(nil), // 56: cc.arduino.cli.commands.v1.MonitorRequest - (*EnumerateMonitorPortSettingsRequest)(nil), // 57: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest - (*DebugRequest)(nil), // 58: cc.arduino.cli.commands.v1.DebugRequest - (*GetDebugConfigRequest)(nil), // 59: cc.arduino.cli.commands.v1.GetDebugConfigRequest - (*BoardDetailsResponse)(nil), // 60: cc.arduino.cli.commands.v1.BoardDetailsResponse - (*BoardListResponse)(nil), // 61: cc.arduino.cli.commands.v1.BoardListResponse - (*BoardListAllResponse)(nil), // 62: cc.arduino.cli.commands.v1.BoardListAllResponse - (*BoardSearchResponse)(nil), // 63: cc.arduino.cli.commands.v1.BoardSearchResponse - (*BoardListWatchResponse)(nil), // 64: cc.arduino.cli.commands.v1.BoardListWatchResponse - (*CompileResponse)(nil), // 65: cc.arduino.cli.commands.v1.CompileResponse - (*PlatformInstallResponse)(nil), // 66: cc.arduino.cli.commands.v1.PlatformInstallResponse - (*PlatformDownloadResponse)(nil), // 67: cc.arduino.cli.commands.v1.PlatformDownloadResponse - (*PlatformUninstallResponse)(nil), // 68: cc.arduino.cli.commands.v1.PlatformUninstallResponse - (*PlatformUpgradeResponse)(nil), // 69: cc.arduino.cli.commands.v1.PlatformUpgradeResponse - (*UploadResponse)(nil), // 70: cc.arduino.cli.commands.v1.UploadResponse - (*UploadUsingProgrammerResponse)(nil), // 71: cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse - (*SupportedUserFieldsResponse)(nil), // 72: cc.arduino.cli.commands.v1.SupportedUserFieldsResponse - (*ListProgrammersAvailableForUploadResponse)(nil), // 73: cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadResponse - (*BurnBootloaderResponse)(nil), // 74: cc.arduino.cli.commands.v1.BurnBootloaderResponse - (*PlatformSearchResponse)(nil), // 75: cc.arduino.cli.commands.v1.PlatformSearchResponse - (*PlatformListResponse)(nil), // 76: cc.arduino.cli.commands.v1.PlatformListResponse - (*LibraryDownloadResponse)(nil), // 77: cc.arduino.cli.commands.v1.LibraryDownloadResponse - (*LibraryInstallResponse)(nil), // 78: cc.arduino.cli.commands.v1.LibraryInstallResponse - (*LibraryUpgradeResponse)(nil), // 79: cc.arduino.cli.commands.v1.LibraryUpgradeResponse - (*ZipLibraryInstallResponse)(nil), // 80: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse - (*GitLibraryInstallResponse)(nil), // 81: cc.arduino.cli.commands.v1.GitLibraryInstallResponse - (*LibraryUninstallResponse)(nil), // 82: cc.arduino.cli.commands.v1.LibraryUninstallResponse - (*LibraryUpgradeAllResponse)(nil), // 83: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse - (*LibraryResolveDependenciesResponse)(nil), // 84: cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse - (*LibrarySearchResponse)(nil), // 85: cc.arduino.cli.commands.v1.LibrarySearchResponse - (*LibraryListResponse)(nil), // 86: cc.arduino.cli.commands.v1.LibraryListResponse - (*MonitorResponse)(nil), // 87: cc.arduino.cli.commands.v1.MonitorResponse - (*EnumerateMonitorPortSettingsResponse)(nil), // 88: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse - (*DebugResponse)(nil), // 89: cc.arduino.cli.commands.v1.DebugResponse - (*GetDebugConfigResponse)(nil), // 90: cc.arduino.cli.commands.v1.GetDebugConfigResponse + (IndexUpdateReport_Status)(0), // 1: cc.arduino.cli.commands.v1.IndexUpdateReport.Status + (*CreateRequest)(nil), // 2: cc.arduino.cli.commands.v1.CreateRequest + (*CreateResponse)(nil), // 3: cc.arduino.cli.commands.v1.CreateResponse + (*InitRequest)(nil), // 4: cc.arduino.cli.commands.v1.InitRequest + (*InitResponse)(nil), // 5: cc.arduino.cli.commands.v1.InitResponse + (*FailedInstanceInitError)(nil), // 6: cc.arduino.cli.commands.v1.FailedInstanceInitError + (*DestroyRequest)(nil), // 7: cc.arduino.cli.commands.v1.DestroyRequest + (*DestroyResponse)(nil), // 8: cc.arduino.cli.commands.v1.DestroyResponse + (*UpdateIndexRequest)(nil), // 9: cc.arduino.cli.commands.v1.UpdateIndexRequest + (*UpdateIndexResponse)(nil), // 10: cc.arduino.cli.commands.v1.UpdateIndexResponse + (*UpdateLibrariesIndexRequest)(nil), // 11: cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest + (*UpdateLibrariesIndexResponse)(nil), // 12: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse + (*IndexUpdateReport)(nil), // 13: cc.arduino.cli.commands.v1.IndexUpdateReport + (*VersionRequest)(nil), // 14: cc.arduino.cli.commands.v1.VersionRequest + (*VersionResponse)(nil), // 15: cc.arduino.cli.commands.v1.VersionResponse + (*NewSketchRequest)(nil), // 16: cc.arduino.cli.commands.v1.NewSketchRequest + (*NewSketchResponse)(nil), // 17: cc.arduino.cli.commands.v1.NewSketchResponse + (*LoadSketchRequest)(nil), // 18: cc.arduino.cli.commands.v1.LoadSketchRequest + (*LoadSketchResponse)(nil), // 19: cc.arduino.cli.commands.v1.LoadSketchResponse + (*ArchiveSketchRequest)(nil), // 20: cc.arduino.cli.commands.v1.ArchiveSketchRequest + (*ArchiveSketchResponse)(nil), // 21: cc.arduino.cli.commands.v1.ArchiveSketchResponse + (*SetSketchDefaultsRequest)(nil), // 22: cc.arduino.cli.commands.v1.SetSketchDefaultsRequest + (*SetSketchDefaultsResponse)(nil), // 23: cc.arduino.cli.commands.v1.SetSketchDefaultsResponse + (*CheckForArduinoCLIUpdatesRequest)(nil), // 24: cc.arduino.cli.commands.v1.CheckForArduinoCLIUpdatesRequest + (*CheckForArduinoCLIUpdatesResponse)(nil), // 25: cc.arduino.cli.commands.v1.CheckForArduinoCLIUpdatesResponse + (*CleanDownloadCacheDirectoryRequest)(nil), // 26: cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryRequest + (*CleanDownloadCacheDirectoryResponse)(nil), // 27: cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryResponse + (*InitResponse_Progress)(nil), // 28: cc.arduino.cli.commands.v1.InitResponse.Progress + (*UpdateIndexResponse_Result)(nil), // 29: cc.arduino.cli.commands.v1.UpdateIndexResponse.Result + (*UpdateLibrariesIndexResponse_Result)(nil), // 30: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.Result + (*Instance)(nil), // 31: cc.arduino.cli.commands.v1.Instance + (*status.Status)(nil), // 32: google.rpc.Status + (*SketchProfile)(nil), // 33: cc.arduino.cli.commands.v1.SketchProfile + (*DownloadProgress)(nil), // 34: cc.arduino.cli.commands.v1.DownloadProgress + (*Sketch)(nil), // 35: cc.arduino.cli.commands.v1.Sketch + (*TaskProgress)(nil), // 36: cc.arduino.cli.commands.v1.TaskProgress + (*BoardDetailsRequest)(nil), // 37: cc.arduino.cli.commands.v1.BoardDetailsRequest + (*BoardListRequest)(nil), // 38: cc.arduino.cli.commands.v1.BoardListRequest + (*BoardListAllRequest)(nil), // 39: cc.arduino.cli.commands.v1.BoardListAllRequest + (*BoardSearchRequest)(nil), // 40: cc.arduino.cli.commands.v1.BoardSearchRequest + (*BoardIdentifyRequest)(nil), // 41: cc.arduino.cli.commands.v1.BoardIdentifyRequest + (*BoardListWatchRequest)(nil), // 42: cc.arduino.cli.commands.v1.BoardListWatchRequest + (*CompileRequest)(nil), // 43: cc.arduino.cli.commands.v1.CompileRequest + (*PlatformInstallRequest)(nil), // 44: cc.arduino.cli.commands.v1.PlatformInstallRequest + (*PlatformDownloadRequest)(nil), // 45: cc.arduino.cli.commands.v1.PlatformDownloadRequest + (*PlatformUninstallRequest)(nil), // 46: cc.arduino.cli.commands.v1.PlatformUninstallRequest + (*PlatformUpgradeRequest)(nil), // 47: cc.arduino.cli.commands.v1.PlatformUpgradeRequest + (*UploadRequest)(nil), // 48: cc.arduino.cli.commands.v1.UploadRequest + (*UploadUsingProgrammerRequest)(nil), // 49: cc.arduino.cli.commands.v1.UploadUsingProgrammerRequest + (*SupportedUserFieldsRequest)(nil), // 50: cc.arduino.cli.commands.v1.SupportedUserFieldsRequest + (*ListProgrammersAvailableForUploadRequest)(nil), // 51: cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadRequest + (*BurnBootloaderRequest)(nil), // 52: cc.arduino.cli.commands.v1.BurnBootloaderRequest + (*PlatformSearchRequest)(nil), // 53: cc.arduino.cli.commands.v1.PlatformSearchRequest + (*LibraryDownloadRequest)(nil), // 54: cc.arduino.cli.commands.v1.LibraryDownloadRequest + (*LibraryInstallRequest)(nil), // 55: cc.arduino.cli.commands.v1.LibraryInstallRequest + (*LibraryUpgradeRequest)(nil), // 56: cc.arduino.cli.commands.v1.LibraryUpgradeRequest + (*ZipLibraryInstallRequest)(nil), // 57: cc.arduino.cli.commands.v1.ZipLibraryInstallRequest + (*GitLibraryInstallRequest)(nil), // 58: cc.arduino.cli.commands.v1.GitLibraryInstallRequest + (*LibraryUninstallRequest)(nil), // 59: cc.arduino.cli.commands.v1.LibraryUninstallRequest + (*LibraryUpgradeAllRequest)(nil), // 60: cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest + (*LibraryResolveDependenciesRequest)(nil), // 61: cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest + (*LibrarySearchRequest)(nil), // 62: cc.arduino.cli.commands.v1.LibrarySearchRequest + (*LibraryListRequest)(nil), // 63: cc.arduino.cli.commands.v1.LibraryListRequest + (*MonitorRequest)(nil), // 64: cc.arduino.cli.commands.v1.MonitorRequest + (*EnumerateMonitorPortSettingsRequest)(nil), // 65: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest + (*DebugRequest)(nil), // 66: cc.arduino.cli.commands.v1.DebugRequest + (*IsDebugSupportedRequest)(nil), // 67: cc.arduino.cli.commands.v1.IsDebugSupportedRequest + (*GetDebugConfigRequest)(nil), // 68: cc.arduino.cli.commands.v1.GetDebugConfigRequest + (*ConfigurationSaveRequest)(nil), // 69: cc.arduino.cli.commands.v1.ConfigurationSaveRequest + (*ConfigurationOpenRequest)(nil), // 70: cc.arduino.cli.commands.v1.ConfigurationOpenRequest + (*ConfigurationGetRequest)(nil), // 71: cc.arduino.cli.commands.v1.ConfigurationGetRequest + (*SettingsEnumerateRequest)(nil), // 72: cc.arduino.cli.commands.v1.SettingsEnumerateRequest + (*SettingsGetValueRequest)(nil), // 73: cc.arduino.cli.commands.v1.SettingsGetValueRequest + (*SettingsSetValueRequest)(nil), // 74: cc.arduino.cli.commands.v1.SettingsSetValueRequest + (*BoardDetailsResponse)(nil), // 75: cc.arduino.cli.commands.v1.BoardDetailsResponse + (*BoardListResponse)(nil), // 76: cc.arduino.cli.commands.v1.BoardListResponse + (*BoardListAllResponse)(nil), // 77: cc.arduino.cli.commands.v1.BoardListAllResponse + (*BoardSearchResponse)(nil), // 78: cc.arduino.cli.commands.v1.BoardSearchResponse + (*BoardIdentifyResponse)(nil), // 79: cc.arduino.cli.commands.v1.BoardIdentifyResponse + (*BoardListWatchResponse)(nil), // 80: cc.arduino.cli.commands.v1.BoardListWatchResponse + (*CompileResponse)(nil), // 81: cc.arduino.cli.commands.v1.CompileResponse + (*PlatformInstallResponse)(nil), // 82: cc.arduino.cli.commands.v1.PlatformInstallResponse + (*PlatformDownloadResponse)(nil), // 83: cc.arduino.cli.commands.v1.PlatformDownloadResponse + (*PlatformUninstallResponse)(nil), // 84: cc.arduino.cli.commands.v1.PlatformUninstallResponse + (*PlatformUpgradeResponse)(nil), // 85: cc.arduino.cli.commands.v1.PlatformUpgradeResponse + (*UploadResponse)(nil), // 86: cc.arduino.cli.commands.v1.UploadResponse + (*UploadUsingProgrammerResponse)(nil), // 87: cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse + (*SupportedUserFieldsResponse)(nil), // 88: cc.arduino.cli.commands.v1.SupportedUserFieldsResponse + (*ListProgrammersAvailableForUploadResponse)(nil), // 89: cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadResponse + (*BurnBootloaderResponse)(nil), // 90: cc.arduino.cli.commands.v1.BurnBootloaderResponse + (*PlatformSearchResponse)(nil), // 91: cc.arduino.cli.commands.v1.PlatformSearchResponse + (*LibraryDownloadResponse)(nil), // 92: cc.arduino.cli.commands.v1.LibraryDownloadResponse + (*LibraryInstallResponse)(nil), // 93: cc.arduino.cli.commands.v1.LibraryInstallResponse + (*LibraryUpgradeResponse)(nil), // 94: cc.arduino.cli.commands.v1.LibraryUpgradeResponse + (*ZipLibraryInstallResponse)(nil), // 95: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse + (*GitLibraryInstallResponse)(nil), // 96: cc.arduino.cli.commands.v1.GitLibraryInstallResponse + (*LibraryUninstallResponse)(nil), // 97: cc.arduino.cli.commands.v1.LibraryUninstallResponse + (*LibraryUpgradeAllResponse)(nil), // 98: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse + (*LibraryResolveDependenciesResponse)(nil), // 99: cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse + (*LibrarySearchResponse)(nil), // 100: cc.arduino.cli.commands.v1.LibrarySearchResponse + (*LibraryListResponse)(nil), // 101: cc.arduino.cli.commands.v1.LibraryListResponse + (*MonitorResponse)(nil), // 102: cc.arduino.cli.commands.v1.MonitorResponse + (*EnumerateMonitorPortSettingsResponse)(nil), // 103: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse + (*DebugResponse)(nil), // 104: cc.arduino.cli.commands.v1.DebugResponse + (*IsDebugSupportedResponse)(nil), // 105: cc.arduino.cli.commands.v1.IsDebugSupportedResponse + (*GetDebugConfigResponse)(nil), // 106: cc.arduino.cli.commands.v1.GetDebugConfigResponse + (*ConfigurationSaveResponse)(nil), // 107: cc.arduino.cli.commands.v1.ConfigurationSaveResponse + (*ConfigurationOpenResponse)(nil), // 108: cc.arduino.cli.commands.v1.ConfigurationOpenResponse + (*ConfigurationGetResponse)(nil), // 109: cc.arduino.cli.commands.v1.ConfigurationGetResponse + (*SettingsEnumerateResponse)(nil), // 110: cc.arduino.cli.commands.v1.SettingsEnumerateResponse + (*SettingsGetValueResponse)(nil), // 111: cc.arduino.cli.commands.v1.SettingsGetValueResponse + (*SettingsSetValueResponse)(nil), // 112: cc.arduino.cli.commands.v1.SettingsSetValueResponse } var file_cc_arduino_cli_commands_v1_commands_proto_depIdxs = []int32{ - 24, // 0: cc.arduino.cli.commands.v1.CreateResponse.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 24, // 1: cc.arduino.cli.commands.v1.InitRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 23, // 2: cc.arduino.cli.commands.v1.InitResponse.init_progress:type_name -> cc.arduino.cli.commands.v1.InitResponse.Progress - 25, // 3: cc.arduino.cli.commands.v1.InitResponse.error:type_name -> google.rpc.Status - 26, // 4: cc.arduino.cli.commands.v1.InitResponse.profile:type_name -> cc.arduino.cli.commands.v1.Profile - 0, // 5: cc.arduino.cli.commands.v1.FailedInstanceInitError.reason:type_name -> cc.arduino.cli.commands.v1.FailedInstanceInitReason - 24, // 6: cc.arduino.cli.commands.v1.DestroyRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 24, // 7: cc.arduino.cli.commands.v1.UpdateIndexRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 27, // 8: cc.arduino.cli.commands.v1.UpdateIndexResponse.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 24, // 9: cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 27, // 10: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 17, // 11: cc.arduino.cli.commands.v1.LoadSketchResponse.profiles:type_name -> cc.arduino.cli.commands.v1.SketchProfile - 17, // 12: cc.arduino.cli.commands.v1.LoadSketchResponse.default_profile:type_name -> cc.arduino.cli.commands.v1.SketchProfile - 27, // 13: cc.arduino.cli.commands.v1.InitResponse.Progress.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 28, // 14: cc.arduino.cli.commands.v1.InitResponse.Progress.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 1, // 15: cc.arduino.cli.commands.v1.ArduinoCoreService.Create:input_type -> cc.arduino.cli.commands.v1.CreateRequest - 3, // 16: cc.arduino.cli.commands.v1.ArduinoCoreService.Init:input_type -> cc.arduino.cli.commands.v1.InitRequest - 6, // 17: cc.arduino.cli.commands.v1.ArduinoCoreService.Destroy:input_type -> cc.arduino.cli.commands.v1.DestroyRequest - 8, // 18: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateIndex:input_type -> cc.arduino.cli.commands.v1.UpdateIndexRequest - 10, // 19: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateLibrariesIndex:input_type -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest - 12, // 20: cc.arduino.cli.commands.v1.ArduinoCoreService.Version:input_type -> cc.arduino.cli.commands.v1.VersionRequest - 14, // 21: cc.arduino.cli.commands.v1.ArduinoCoreService.NewSketch:input_type -> cc.arduino.cli.commands.v1.NewSketchRequest - 16, // 22: cc.arduino.cli.commands.v1.ArduinoCoreService.LoadSketch:input_type -> cc.arduino.cli.commands.v1.LoadSketchRequest - 19, // 23: cc.arduino.cli.commands.v1.ArduinoCoreService.ArchiveSketch:input_type -> cc.arduino.cli.commands.v1.ArchiveSketchRequest - 21, // 24: cc.arduino.cli.commands.v1.ArduinoCoreService.SetSketchDefaults:input_type -> cc.arduino.cli.commands.v1.SetSketchDefaultsRequest - 29, // 25: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardDetails:input_type -> cc.arduino.cli.commands.v1.BoardDetailsRequest - 30, // 26: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardList:input_type -> cc.arduino.cli.commands.v1.BoardListRequest - 31, // 27: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListAll:input_type -> cc.arduino.cli.commands.v1.BoardListAllRequest - 32, // 28: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardSearch:input_type -> cc.arduino.cli.commands.v1.BoardSearchRequest - 33, // 29: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListWatch:input_type -> cc.arduino.cli.commands.v1.BoardListWatchRequest - 34, // 30: cc.arduino.cli.commands.v1.ArduinoCoreService.Compile:input_type -> cc.arduino.cli.commands.v1.CompileRequest - 35, // 31: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformInstall:input_type -> cc.arduino.cli.commands.v1.PlatformInstallRequest - 36, // 32: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformDownload:input_type -> cc.arduino.cli.commands.v1.PlatformDownloadRequest - 37, // 33: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUninstall:input_type -> cc.arduino.cli.commands.v1.PlatformUninstallRequest - 38, // 34: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUpgrade:input_type -> cc.arduino.cli.commands.v1.PlatformUpgradeRequest - 39, // 35: cc.arduino.cli.commands.v1.ArduinoCoreService.Upload:input_type -> cc.arduino.cli.commands.v1.UploadRequest - 40, // 36: cc.arduino.cli.commands.v1.ArduinoCoreService.UploadUsingProgrammer:input_type -> cc.arduino.cli.commands.v1.UploadUsingProgrammerRequest - 41, // 37: cc.arduino.cli.commands.v1.ArduinoCoreService.SupportedUserFields:input_type -> cc.arduino.cli.commands.v1.SupportedUserFieldsRequest - 42, // 38: cc.arduino.cli.commands.v1.ArduinoCoreService.ListProgrammersAvailableForUpload:input_type -> cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadRequest - 43, // 39: cc.arduino.cli.commands.v1.ArduinoCoreService.BurnBootloader:input_type -> cc.arduino.cli.commands.v1.BurnBootloaderRequest - 44, // 40: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformSearch:input_type -> cc.arduino.cli.commands.v1.PlatformSearchRequest - 45, // 41: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformList:input_type -> cc.arduino.cli.commands.v1.PlatformListRequest - 46, // 42: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryDownload:input_type -> cc.arduino.cli.commands.v1.LibraryDownloadRequest - 47, // 43: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryInstall:input_type -> cc.arduino.cli.commands.v1.LibraryInstallRequest - 48, // 44: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgrade:input_type -> cc.arduino.cli.commands.v1.LibraryUpgradeRequest - 49, // 45: cc.arduino.cli.commands.v1.ArduinoCoreService.ZipLibraryInstall:input_type -> cc.arduino.cli.commands.v1.ZipLibraryInstallRequest - 50, // 46: cc.arduino.cli.commands.v1.ArduinoCoreService.GitLibraryInstall:input_type -> cc.arduino.cli.commands.v1.GitLibraryInstallRequest - 51, // 47: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUninstall:input_type -> cc.arduino.cli.commands.v1.LibraryUninstallRequest - 52, // 48: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgradeAll:input_type -> cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest - 53, // 49: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryResolveDependencies:input_type -> cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest - 54, // 50: cc.arduino.cli.commands.v1.ArduinoCoreService.LibrarySearch:input_type -> cc.arduino.cli.commands.v1.LibrarySearchRequest - 55, // 51: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryList:input_type -> cc.arduino.cli.commands.v1.LibraryListRequest - 56, // 52: cc.arduino.cli.commands.v1.ArduinoCoreService.Monitor:input_type -> cc.arduino.cli.commands.v1.MonitorRequest - 57, // 53: cc.arduino.cli.commands.v1.ArduinoCoreService.EnumerateMonitorPortSettings:input_type -> cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest - 58, // 54: cc.arduino.cli.commands.v1.ArduinoCoreService.Debug:input_type -> cc.arduino.cli.commands.v1.DebugRequest - 59, // 55: cc.arduino.cli.commands.v1.ArduinoCoreService.GetDebugConfig:input_type -> cc.arduino.cli.commands.v1.GetDebugConfigRequest - 2, // 56: cc.arduino.cli.commands.v1.ArduinoCoreService.Create:output_type -> cc.arduino.cli.commands.v1.CreateResponse - 4, // 57: cc.arduino.cli.commands.v1.ArduinoCoreService.Init:output_type -> cc.arduino.cli.commands.v1.InitResponse - 7, // 58: cc.arduino.cli.commands.v1.ArduinoCoreService.Destroy:output_type -> cc.arduino.cli.commands.v1.DestroyResponse - 9, // 59: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateIndex:output_type -> cc.arduino.cli.commands.v1.UpdateIndexResponse - 11, // 60: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateLibrariesIndex:output_type -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse - 13, // 61: cc.arduino.cli.commands.v1.ArduinoCoreService.Version:output_type -> cc.arduino.cli.commands.v1.VersionResponse - 15, // 62: cc.arduino.cli.commands.v1.ArduinoCoreService.NewSketch:output_type -> cc.arduino.cli.commands.v1.NewSketchResponse - 18, // 63: cc.arduino.cli.commands.v1.ArduinoCoreService.LoadSketch:output_type -> cc.arduino.cli.commands.v1.LoadSketchResponse - 20, // 64: cc.arduino.cli.commands.v1.ArduinoCoreService.ArchiveSketch:output_type -> cc.arduino.cli.commands.v1.ArchiveSketchResponse - 22, // 65: cc.arduino.cli.commands.v1.ArduinoCoreService.SetSketchDefaults:output_type -> cc.arduino.cli.commands.v1.SetSketchDefaultsResponse - 60, // 66: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardDetails:output_type -> cc.arduino.cli.commands.v1.BoardDetailsResponse - 61, // 67: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardList:output_type -> cc.arduino.cli.commands.v1.BoardListResponse - 62, // 68: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListAll:output_type -> cc.arduino.cli.commands.v1.BoardListAllResponse - 63, // 69: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardSearch:output_type -> cc.arduino.cli.commands.v1.BoardSearchResponse - 64, // 70: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListWatch:output_type -> cc.arduino.cli.commands.v1.BoardListWatchResponse - 65, // 71: cc.arduino.cli.commands.v1.ArduinoCoreService.Compile:output_type -> cc.arduino.cli.commands.v1.CompileResponse - 66, // 72: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformInstall:output_type -> cc.arduino.cli.commands.v1.PlatformInstallResponse - 67, // 73: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformDownload:output_type -> cc.arduino.cli.commands.v1.PlatformDownloadResponse - 68, // 74: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUninstall:output_type -> cc.arduino.cli.commands.v1.PlatformUninstallResponse - 69, // 75: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUpgrade:output_type -> cc.arduino.cli.commands.v1.PlatformUpgradeResponse - 70, // 76: cc.arduino.cli.commands.v1.ArduinoCoreService.Upload:output_type -> cc.arduino.cli.commands.v1.UploadResponse - 71, // 77: cc.arduino.cli.commands.v1.ArduinoCoreService.UploadUsingProgrammer:output_type -> cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse - 72, // 78: cc.arduino.cli.commands.v1.ArduinoCoreService.SupportedUserFields:output_type -> cc.arduino.cli.commands.v1.SupportedUserFieldsResponse - 73, // 79: cc.arduino.cli.commands.v1.ArduinoCoreService.ListProgrammersAvailableForUpload:output_type -> cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadResponse - 74, // 80: cc.arduino.cli.commands.v1.ArduinoCoreService.BurnBootloader:output_type -> cc.arduino.cli.commands.v1.BurnBootloaderResponse - 75, // 81: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformSearch:output_type -> cc.arduino.cli.commands.v1.PlatformSearchResponse - 76, // 82: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformList:output_type -> cc.arduino.cli.commands.v1.PlatformListResponse - 77, // 83: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryDownload:output_type -> cc.arduino.cli.commands.v1.LibraryDownloadResponse - 78, // 84: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryInstall:output_type -> cc.arduino.cli.commands.v1.LibraryInstallResponse - 79, // 85: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgrade:output_type -> cc.arduino.cli.commands.v1.LibraryUpgradeResponse - 80, // 86: cc.arduino.cli.commands.v1.ArduinoCoreService.ZipLibraryInstall:output_type -> cc.arduino.cli.commands.v1.ZipLibraryInstallResponse - 81, // 87: cc.arduino.cli.commands.v1.ArduinoCoreService.GitLibraryInstall:output_type -> cc.arduino.cli.commands.v1.GitLibraryInstallResponse - 82, // 88: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUninstall:output_type -> cc.arduino.cli.commands.v1.LibraryUninstallResponse - 83, // 89: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgradeAll:output_type -> cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse - 84, // 90: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryResolveDependencies:output_type -> cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse - 85, // 91: cc.arduino.cli.commands.v1.ArduinoCoreService.LibrarySearch:output_type -> cc.arduino.cli.commands.v1.LibrarySearchResponse - 86, // 92: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryList:output_type -> cc.arduino.cli.commands.v1.LibraryListResponse - 87, // 93: cc.arduino.cli.commands.v1.ArduinoCoreService.Monitor:output_type -> cc.arduino.cli.commands.v1.MonitorResponse - 88, // 94: cc.arduino.cli.commands.v1.ArduinoCoreService.EnumerateMonitorPortSettings:output_type -> cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse - 89, // 95: cc.arduino.cli.commands.v1.ArduinoCoreService.Debug:output_type -> cc.arduino.cli.commands.v1.DebugResponse - 90, // 96: cc.arduino.cli.commands.v1.ArduinoCoreService.GetDebugConfig:output_type -> cc.arduino.cli.commands.v1.GetDebugConfigResponse - 56, // [56:97] is the sub-list for method output_type - 15, // [15:56] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 31, // 0: cc.arduino.cli.commands.v1.CreateResponse.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 31, // 1: cc.arduino.cli.commands.v1.InitRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 28, // 2: cc.arduino.cli.commands.v1.InitResponse.init_progress:type_name -> cc.arduino.cli.commands.v1.InitResponse.Progress + 32, // 3: cc.arduino.cli.commands.v1.InitResponse.error:type_name -> google.rpc.Status + 33, // 4: cc.arduino.cli.commands.v1.InitResponse.profile:type_name -> cc.arduino.cli.commands.v1.SketchProfile + 0, // 5: cc.arduino.cli.commands.v1.FailedInstanceInitError.reason:type_name -> cc.arduino.cli.commands.v1.FailedInstanceInitReason + 31, // 6: cc.arduino.cli.commands.v1.DestroyRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 31, // 7: cc.arduino.cli.commands.v1.UpdateIndexRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 34, // 8: cc.arduino.cli.commands.v1.UpdateIndexResponse.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 29, // 9: cc.arduino.cli.commands.v1.UpdateIndexResponse.result:type_name -> cc.arduino.cli.commands.v1.UpdateIndexResponse.Result + 31, // 10: cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 34, // 11: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 30, // 12: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.result:type_name -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.Result + 1, // 13: cc.arduino.cli.commands.v1.IndexUpdateReport.status:type_name -> cc.arduino.cli.commands.v1.IndexUpdateReport.Status + 35, // 14: cc.arduino.cli.commands.v1.LoadSketchResponse.sketch:type_name -> cc.arduino.cli.commands.v1.Sketch + 31, // 15: cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 34, // 16: cc.arduino.cli.commands.v1.InitResponse.Progress.download_progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 36, // 17: cc.arduino.cli.commands.v1.InitResponse.Progress.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 13, // 18: cc.arduino.cli.commands.v1.UpdateIndexResponse.Result.updated_indexes:type_name -> cc.arduino.cli.commands.v1.IndexUpdateReport + 13, // 19: cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse.Result.libraries_index:type_name -> cc.arduino.cli.commands.v1.IndexUpdateReport + 2, // 20: cc.arduino.cli.commands.v1.ArduinoCoreService.Create:input_type -> cc.arduino.cli.commands.v1.CreateRequest + 4, // 21: cc.arduino.cli.commands.v1.ArduinoCoreService.Init:input_type -> cc.arduino.cli.commands.v1.InitRequest + 7, // 22: cc.arduino.cli.commands.v1.ArduinoCoreService.Destroy:input_type -> cc.arduino.cli.commands.v1.DestroyRequest + 9, // 23: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateIndex:input_type -> cc.arduino.cli.commands.v1.UpdateIndexRequest + 11, // 24: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateLibrariesIndex:input_type -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexRequest + 14, // 25: cc.arduino.cli.commands.v1.ArduinoCoreService.Version:input_type -> cc.arduino.cli.commands.v1.VersionRequest + 16, // 26: cc.arduino.cli.commands.v1.ArduinoCoreService.NewSketch:input_type -> cc.arduino.cli.commands.v1.NewSketchRequest + 18, // 27: cc.arduino.cli.commands.v1.ArduinoCoreService.LoadSketch:input_type -> cc.arduino.cli.commands.v1.LoadSketchRequest + 20, // 28: cc.arduino.cli.commands.v1.ArduinoCoreService.ArchiveSketch:input_type -> cc.arduino.cli.commands.v1.ArchiveSketchRequest + 22, // 29: cc.arduino.cli.commands.v1.ArduinoCoreService.SetSketchDefaults:input_type -> cc.arduino.cli.commands.v1.SetSketchDefaultsRequest + 37, // 30: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardDetails:input_type -> cc.arduino.cli.commands.v1.BoardDetailsRequest + 38, // 31: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardList:input_type -> cc.arduino.cli.commands.v1.BoardListRequest + 39, // 32: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListAll:input_type -> cc.arduino.cli.commands.v1.BoardListAllRequest + 40, // 33: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardSearch:input_type -> cc.arduino.cli.commands.v1.BoardSearchRequest + 41, // 34: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardIdentify:input_type -> cc.arduino.cli.commands.v1.BoardIdentifyRequest + 42, // 35: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListWatch:input_type -> cc.arduino.cli.commands.v1.BoardListWatchRequest + 43, // 36: cc.arduino.cli.commands.v1.ArduinoCoreService.Compile:input_type -> cc.arduino.cli.commands.v1.CompileRequest + 44, // 37: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformInstall:input_type -> cc.arduino.cli.commands.v1.PlatformInstallRequest + 45, // 38: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformDownload:input_type -> cc.arduino.cli.commands.v1.PlatformDownloadRequest + 46, // 39: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUninstall:input_type -> cc.arduino.cli.commands.v1.PlatformUninstallRequest + 47, // 40: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUpgrade:input_type -> cc.arduino.cli.commands.v1.PlatformUpgradeRequest + 48, // 41: cc.arduino.cli.commands.v1.ArduinoCoreService.Upload:input_type -> cc.arduino.cli.commands.v1.UploadRequest + 49, // 42: cc.arduino.cli.commands.v1.ArduinoCoreService.UploadUsingProgrammer:input_type -> cc.arduino.cli.commands.v1.UploadUsingProgrammerRequest + 50, // 43: cc.arduino.cli.commands.v1.ArduinoCoreService.SupportedUserFields:input_type -> cc.arduino.cli.commands.v1.SupportedUserFieldsRequest + 51, // 44: cc.arduino.cli.commands.v1.ArduinoCoreService.ListProgrammersAvailableForUpload:input_type -> cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadRequest + 52, // 45: cc.arduino.cli.commands.v1.ArduinoCoreService.BurnBootloader:input_type -> cc.arduino.cli.commands.v1.BurnBootloaderRequest + 53, // 46: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformSearch:input_type -> cc.arduino.cli.commands.v1.PlatformSearchRequest + 54, // 47: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryDownload:input_type -> cc.arduino.cli.commands.v1.LibraryDownloadRequest + 55, // 48: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryInstall:input_type -> cc.arduino.cli.commands.v1.LibraryInstallRequest + 56, // 49: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgrade:input_type -> cc.arduino.cli.commands.v1.LibraryUpgradeRequest + 57, // 50: cc.arduino.cli.commands.v1.ArduinoCoreService.ZipLibraryInstall:input_type -> cc.arduino.cli.commands.v1.ZipLibraryInstallRequest + 58, // 51: cc.arduino.cli.commands.v1.ArduinoCoreService.GitLibraryInstall:input_type -> cc.arduino.cli.commands.v1.GitLibraryInstallRequest + 59, // 52: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUninstall:input_type -> cc.arduino.cli.commands.v1.LibraryUninstallRequest + 60, // 53: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgradeAll:input_type -> cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest + 61, // 54: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryResolveDependencies:input_type -> cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest + 62, // 55: cc.arduino.cli.commands.v1.ArduinoCoreService.LibrarySearch:input_type -> cc.arduino.cli.commands.v1.LibrarySearchRequest + 63, // 56: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryList:input_type -> cc.arduino.cli.commands.v1.LibraryListRequest + 64, // 57: cc.arduino.cli.commands.v1.ArduinoCoreService.Monitor:input_type -> cc.arduino.cli.commands.v1.MonitorRequest + 65, // 58: cc.arduino.cli.commands.v1.ArduinoCoreService.EnumerateMonitorPortSettings:input_type -> cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest + 66, // 59: cc.arduino.cli.commands.v1.ArduinoCoreService.Debug:input_type -> cc.arduino.cli.commands.v1.DebugRequest + 67, // 60: cc.arduino.cli.commands.v1.ArduinoCoreService.IsDebugSupported:input_type -> cc.arduino.cli.commands.v1.IsDebugSupportedRequest + 68, // 61: cc.arduino.cli.commands.v1.ArduinoCoreService.GetDebugConfig:input_type -> cc.arduino.cli.commands.v1.GetDebugConfigRequest + 24, // 62: cc.arduino.cli.commands.v1.ArduinoCoreService.CheckForArduinoCLIUpdates:input_type -> cc.arduino.cli.commands.v1.CheckForArduinoCLIUpdatesRequest + 26, // 63: cc.arduino.cli.commands.v1.ArduinoCoreService.CleanDownloadCacheDirectory:input_type -> cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryRequest + 69, // 64: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationSave:input_type -> cc.arduino.cli.commands.v1.ConfigurationSaveRequest + 70, // 65: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationOpen:input_type -> cc.arduino.cli.commands.v1.ConfigurationOpenRequest + 71, // 66: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationGet:input_type -> cc.arduino.cli.commands.v1.ConfigurationGetRequest + 72, // 67: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsEnumerate:input_type -> cc.arduino.cli.commands.v1.SettingsEnumerateRequest + 73, // 68: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsGetValue:input_type -> cc.arduino.cli.commands.v1.SettingsGetValueRequest + 74, // 69: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsSetValue:input_type -> cc.arduino.cli.commands.v1.SettingsSetValueRequest + 3, // 70: cc.arduino.cli.commands.v1.ArduinoCoreService.Create:output_type -> cc.arduino.cli.commands.v1.CreateResponse + 5, // 71: cc.arduino.cli.commands.v1.ArduinoCoreService.Init:output_type -> cc.arduino.cli.commands.v1.InitResponse + 8, // 72: cc.arduino.cli.commands.v1.ArduinoCoreService.Destroy:output_type -> cc.arduino.cli.commands.v1.DestroyResponse + 10, // 73: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateIndex:output_type -> cc.arduino.cli.commands.v1.UpdateIndexResponse + 12, // 74: cc.arduino.cli.commands.v1.ArduinoCoreService.UpdateLibrariesIndex:output_type -> cc.arduino.cli.commands.v1.UpdateLibrariesIndexResponse + 15, // 75: cc.arduino.cli.commands.v1.ArduinoCoreService.Version:output_type -> cc.arduino.cli.commands.v1.VersionResponse + 17, // 76: cc.arduino.cli.commands.v1.ArduinoCoreService.NewSketch:output_type -> cc.arduino.cli.commands.v1.NewSketchResponse + 19, // 77: cc.arduino.cli.commands.v1.ArduinoCoreService.LoadSketch:output_type -> cc.arduino.cli.commands.v1.LoadSketchResponse + 21, // 78: cc.arduino.cli.commands.v1.ArduinoCoreService.ArchiveSketch:output_type -> cc.arduino.cli.commands.v1.ArchiveSketchResponse + 23, // 79: cc.arduino.cli.commands.v1.ArduinoCoreService.SetSketchDefaults:output_type -> cc.arduino.cli.commands.v1.SetSketchDefaultsResponse + 75, // 80: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardDetails:output_type -> cc.arduino.cli.commands.v1.BoardDetailsResponse + 76, // 81: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardList:output_type -> cc.arduino.cli.commands.v1.BoardListResponse + 77, // 82: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListAll:output_type -> cc.arduino.cli.commands.v1.BoardListAllResponse + 78, // 83: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardSearch:output_type -> cc.arduino.cli.commands.v1.BoardSearchResponse + 79, // 84: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardIdentify:output_type -> cc.arduino.cli.commands.v1.BoardIdentifyResponse + 80, // 85: cc.arduino.cli.commands.v1.ArduinoCoreService.BoardListWatch:output_type -> cc.arduino.cli.commands.v1.BoardListWatchResponse + 81, // 86: cc.arduino.cli.commands.v1.ArduinoCoreService.Compile:output_type -> cc.arduino.cli.commands.v1.CompileResponse + 82, // 87: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformInstall:output_type -> cc.arduino.cli.commands.v1.PlatformInstallResponse + 83, // 88: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformDownload:output_type -> cc.arduino.cli.commands.v1.PlatformDownloadResponse + 84, // 89: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUninstall:output_type -> cc.arduino.cli.commands.v1.PlatformUninstallResponse + 85, // 90: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformUpgrade:output_type -> cc.arduino.cli.commands.v1.PlatformUpgradeResponse + 86, // 91: cc.arduino.cli.commands.v1.ArduinoCoreService.Upload:output_type -> cc.arduino.cli.commands.v1.UploadResponse + 87, // 92: cc.arduino.cli.commands.v1.ArduinoCoreService.UploadUsingProgrammer:output_type -> cc.arduino.cli.commands.v1.UploadUsingProgrammerResponse + 88, // 93: cc.arduino.cli.commands.v1.ArduinoCoreService.SupportedUserFields:output_type -> cc.arduino.cli.commands.v1.SupportedUserFieldsResponse + 89, // 94: cc.arduino.cli.commands.v1.ArduinoCoreService.ListProgrammersAvailableForUpload:output_type -> cc.arduino.cli.commands.v1.ListProgrammersAvailableForUploadResponse + 90, // 95: cc.arduino.cli.commands.v1.ArduinoCoreService.BurnBootloader:output_type -> cc.arduino.cli.commands.v1.BurnBootloaderResponse + 91, // 96: cc.arduino.cli.commands.v1.ArduinoCoreService.PlatformSearch:output_type -> cc.arduino.cli.commands.v1.PlatformSearchResponse + 92, // 97: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryDownload:output_type -> cc.arduino.cli.commands.v1.LibraryDownloadResponse + 93, // 98: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryInstall:output_type -> cc.arduino.cli.commands.v1.LibraryInstallResponse + 94, // 99: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgrade:output_type -> cc.arduino.cli.commands.v1.LibraryUpgradeResponse + 95, // 100: cc.arduino.cli.commands.v1.ArduinoCoreService.ZipLibraryInstall:output_type -> cc.arduino.cli.commands.v1.ZipLibraryInstallResponse + 96, // 101: cc.arduino.cli.commands.v1.ArduinoCoreService.GitLibraryInstall:output_type -> cc.arduino.cli.commands.v1.GitLibraryInstallResponse + 97, // 102: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUninstall:output_type -> cc.arduino.cli.commands.v1.LibraryUninstallResponse + 98, // 103: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryUpgradeAll:output_type -> cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse + 99, // 104: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryResolveDependencies:output_type -> cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse + 100, // 105: cc.arduino.cli.commands.v1.ArduinoCoreService.LibrarySearch:output_type -> cc.arduino.cli.commands.v1.LibrarySearchResponse + 101, // 106: cc.arduino.cli.commands.v1.ArduinoCoreService.LibraryList:output_type -> cc.arduino.cli.commands.v1.LibraryListResponse + 102, // 107: cc.arduino.cli.commands.v1.ArduinoCoreService.Monitor:output_type -> cc.arduino.cli.commands.v1.MonitorResponse + 103, // 108: cc.arduino.cli.commands.v1.ArduinoCoreService.EnumerateMonitorPortSettings:output_type -> cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse + 104, // 109: cc.arduino.cli.commands.v1.ArduinoCoreService.Debug:output_type -> cc.arduino.cli.commands.v1.DebugResponse + 105, // 110: cc.arduino.cli.commands.v1.ArduinoCoreService.IsDebugSupported:output_type -> cc.arduino.cli.commands.v1.IsDebugSupportedResponse + 106, // 111: cc.arduino.cli.commands.v1.ArduinoCoreService.GetDebugConfig:output_type -> cc.arduino.cli.commands.v1.GetDebugConfigResponse + 25, // 112: cc.arduino.cli.commands.v1.ArduinoCoreService.CheckForArduinoCLIUpdates:output_type -> cc.arduino.cli.commands.v1.CheckForArduinoCLIUpdatesResponse + 27, // 113: cc.arduino.cli.commands.v1.ArduinoCoreService.CleanDownloadCacheDirectory:output_type -> cc.arduino.cli.commands.v1.CleanDownloadCacheDirectoryResponse + 107, // 114: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationSave:output_type -> cc.arduino.cli.commands.v1.ConfigurationSaveResponse + 108, // 115: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationOpen:output_type -> cc.arduino.cli.commands.v1.ConfigurationOpenResponse + 109, // 116: cc.arduino.cli.commands.v1.ArduinoCoreService.ConfigurationGet:output_type -> cc.arduino.cli.commands.v1.ConfigurationGetResponse + 110, // 117: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsEnumerate:output_type -> cc.arduino.cli.commands.v1.SettingsEnumerateResponse + 111, // 118: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsGetValue:output_type -> cc.arduino.cli.commands.v1.SettingsGetValueResponse + 112, // 119: cc.arduino.cli.commands.v1.ArduinoCoreService.SettingsSetValue:output_type -> cc.arduino.cli.commands.v1.SettingsSetValueResponse + 70, // [70:120] is the sub-list for method output_type + 20, // [20:70] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_commands_proto_init() } @@ -2203,16 +2743,17 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { if File_cc_arduino_cli_commands_v1_commands_proto != nil { return } - file_cc_arduino_cli_commands_v1_common_proto_init() file_cc_arduino_cli_commands_v1_board_proto_init() + file_cc_arduino_cli_commands_v1_common_proto_init() file_cc_arduino_cli_commands_v1_compile_proto_init() file_cc_arduino_cli_commands_v1_core_proto_init() file_cc_arduino_cli_commands_v1_debug_proto_init() + file_cc_arduino_cli_commands_v1_lib_proto_init() file_cc_arduino_cli_commands_v1_monitor_proto_init() + file_cc_arduino_cli_commands_v1_settings_proto_init() file_cc_arduino_cli_commands_v1_upload_proto_init() - file_cc_arduino_cli_commands_v1_lib_proto_init() if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateRequest); i { case 0: return &v.state @@ -2224,7 +2765,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*CreateResponse); i { case 0: return &v.state @@ -2236,7 +2777,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*InitRequest); i { case 0: return &v.state @@ -2248,7 +2789,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*InitResponse); i { case 0: return &v.state @@ -2260,7 +2801,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*FailedInstanceInitError); i { case 0: return &v.state @@ -2272,7 +2813,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DestroyRequest); i { case 0: return &v.state @@ -2284,7 +2825,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DestroyResponse); i { case 0: return &v.state @@ -2296,7 +2837,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UpdateIndexRequest); i { case 0: return &v.state @@ -2308,7 +2849,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UpdateIndexResponse); i { case 0: return &v.state @@ -2320,7 +2861,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UpdateLibrariesIndexRequest); i { case 0: return &v.state @@ -2332,7 +2873,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*UpdateLibrariesIndexResponse); i { case 0: return &v.state @@ -2344,8 +2885,8 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionRequest); i { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[11].Exporter = func(v any, i int) any { + switch v := v.(*IndexUpdateReport); i { case 0: return &v.state case 1: @@ -2356,8 +2897,8 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionResponse); i { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[12].Exporter = func(v any, i int) any { + switch v := v.(*VersionRequest); i { case 0: return &v.state case 1: @@ -2368,8 +2909,8 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewSketchRequest); i { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[13].Exporter = func(v any, i int) any { + switch v := v.(*VersionResponse); i { case 0: return &v.state case 1: @@ -2380,8 +2921,8 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewSketchResponse); i { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[14].Exporter = func(v any, i int) any { + switch v := v.(*NewSketchRequest); i { case 0: return &v.state case 1: @@ -2392,8 +2933,8 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadSketchRequest); i { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[15].Exporter = func(v any, i int) any { + switch v := v.(*NewSketchResponse); i { case 0: return &v.state case 1: @@ -2404,8 +2945,8 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SketchProfile); i { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[16].Exporter = func(v any, i int) any { + switch v := v.(*LoadSketchRequest); i { case 0: return &v.state case 1: @@ -2416,7 +2957,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*LoadSketchResponse); i { case 0: return &v.state @@ -2428,7 +2969,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*ArchiveSketchRequest); i { case 0: return &v.state @@ -2440,7 +2981,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*ArchiveSketchResponse); i { case 0: return &v.state @@ -2452,7 +2993,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*SetSketchDefaultsRequest); i { case 0: return &v.state @@ -2464,7 +3005,7 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*SetSketchDefaultsResponse); i { case 0: return &v.state @@ -2476,7 +3017,55 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[22].Exporter = func(v any, i int) any { + switch v := v.(*CheckForArduinoCLIUpdatesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[23].Exporter = func(v any, i int) any { + switch v := v.(*CheckForArduinoCLIUpdatesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[24].Exporter = func(v any, i int) any { + switch v := v.(*CleanDownloadCacheDirectoryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[25].Exporter = func(v any, i int) any { + switch v := v.(*CleanDownloadCacheDirectoryResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*InitResponse_Progress); i { case 0: return &v.state @@ -2488,19 +3077,51 @@ func file_cc_arduino_cli_commands_v1_commands_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[27].Exporter = func(v any, i int) any { + switch v := v.(*UpdateIndexResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[28].Exporter = func(v any, i int) any { + switch v := v.(*UpdateLibrariesIndexResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } - file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[3].OneofWrappers = []interface{}{ + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[3].OneofWrappers = []any{ (*InitResponse_InitProgress)(nil), (*InitResponse_Error)(nil), (*InitResponse_Profile)(nil), } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[8].OneofWrappers = []any{ + (*UpdateIndexResponse_DownloadProgress)(nil), + (*UpdateIndexResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_commands_proto_msgTypes[10].OneofWrappers = []any{ + (*UpdateLibrariesIndexResponse_DownloadProgress)(nil), + (*UpdateLibrariesIndexResponse_Result_)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_commands_proto_rawDesc, - NumEnums: 1, - NumMessages: 23, + NumEnums: 2, + NumMessages: 29, NumExtensions: 0, NumServices: 1, }, diff --git a/rpc/cc/arduino/cli/commands/v1/commands.proto b/rpc/cc/arduino/cli/commands/v1/commands.proto index d16aab2c5a5..4a55e0ded24 100644 --- a/rpc/cc/arduino/cli/commands/v1/commands.proto +++ b/rpc/cc/arduino/cli/commands/v1/commands.proto @@ -1,76 +1,72 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; package cc.arduino.cli.commands.v1; -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; - -import "google/rpc/status.proto"; - -import "cc/arduino/cli/commands/v1/common.proto"; import "cc/arduino/cli/commands/v1/board.proto"; +import "cc/arduino/cli/commands/v1/common.proto"; import "cc/arduino/cli/commands/v1/compile.proto"; import "cc/arduino/cli/commands/v1/core.proto"; import "cc/arduino/cli/commands/v1/debug.proto"; +import "cc/arduino/cli/commands/v1/lib.proto"; import "cc/arduino/cli/commands/v1/monitor.proto"; +import "cc/arduino/cli/commands/v1/settings.proto"; import "cc/arduino/cli/commands/v1/upload.proto"; -import "cc/arduino/cli/commands/v1/lib.proto"; +import "google/rpc/status.proto"; + +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; -// The main Arduino Platform service API +// The main Arduino Platform service API. service ArduinoCoreService { - // Create a new Arduino Core instance + // Create a new Arduino Core instance. rpc Create(CreateRequest) returns (CreateResponse) {} // Initializes an existing Arduino Core instance by loading platforms and - // libraries + // libraries. rpc Init(InitRequest) returns (stream InitResponse) {} - // Destroy an instance of the Arduino Core Service + // Destroy an instance of the Arduino Core Service. rpc Destroy(DestroyRequest) returns (DestroyResponse) {} - // Update package index of the Arduino Core Service + // Update package index of the Arduino Core Service. rpc UpdateIndex(UpdateIndexRequest) returns (stream UpdateIndexResponse) {} - // Update libraries index - rpc UpdateLibrariesIndex(UpdateLibrariesIndexRequest) - returns (stream UpdateLibrariesIndexResponse) {} + // Update libraries index. + rpc UpdateLibrariesIndex(UpdateLibrariesIndexRequest) returns (stream UpdateLibrariesIndexResponse) {} // Get the version of Arduino CLI in use. rpc Version(VersionRequest) returns (VersionResponse) {} - // Create a new Sketch + // Create a new Sketch. rpc NewSketch(NewSketchRequest) returns (NewSketchResponse) {} - // Returns all files composing a Sketch + // Returns all files composing a Sketch. rpc LoadSketch(LoadSketchRequest) returns (LoadSketchResponse) {} - // Creates a zip file containing all files of specified Sketch + // Creates a zip file containing all files of specified Sketch. rpc ArchiveSketch(ArchiveSketchRequest) returns (ArchiveSketchResponse) {} // Sets the sketch default FQBN and Port Address/Protocol in // the sketch project file (sketch.yaml). These metadata can be retrieved // using LoadSketch. - rpc SetSketchDefaults(SetSketchDefaultsRequest) - returns (SetSketchDefaultsResponse) {} + rpc SetSketchDefaults(SetSketchDefaultsRequest) returns (SetSketchDefaultsResponse) {} - // BOARD COMMANDS - // -------------- - - // Requests details about a board + // Requests details about a board. rpc BoardDetails(BoardDetailsRequest) returns (BoardDetailsResponse); // List the boards currently connected to the computer. @@ -82,91 +78,73 @@ service ArduinoCoreService { // Search boards in installed and not installed Platforms. rpc BoardSearch(BoardSearchRequest) returns (BoardSearchResponse); + // Identify a board using the given properties. + rpc BoardIdentify(BoardIdentifyRequest) returns (BoardIdentifyResponse); + // List boards connection and disconnected events. - rpc BoardListWatch(BoardListWatchRequest) - returns (stream BoardListWatchResponse); + rpc BoardListWatch(BoardListWatchRequest) returns (stream BoardListWatchResponse); // Compile an Arduino sketch. rpc Compile(CompileRequest) returns (stream CompileResponse); // Download and install a platform and its tool dependencies. - rpc PlatformInstall(PlatformInstallRequest) - returns (stream PlatformInstallResponse); + rpc PlatformInstall(PlatformInstallRequest) returns (stream PlatformInstallResponse); // Download a platform and its tool dependencies to the `staging/packages` // subdirectory of the data directory. - rpc PlatformDownload(PlatformDownloadRequest) - returns (stream PlatformDownloadResponse); + rpc PlatformDownload(PlatformDownloadRequest) returns (stream PlatformDownloadResponse); // Uninstall a platform as well as its tool dependencies that are not used by // other installed platforms. - rpc PlatformUninstall(PlatformUninstallRequest) - returns (stream PlatformUninstallResponse); + rpc PlatformUninstall(PlatformUninstallRequest) returns (stream PlatformUninstallResponse); // Upgrade an installed platform to the latest version. - rpc PlatformUpgrade(PlatformUpgradeRequest) - returns (stream PlatformUpgradeResponse); + rpc PlatformUpgrade(PlatformUpgradeRequest) returns (stream PlatformUpgradeResponse); // Upload a compiled sketch to a board. rpc Upload(UploadRequest) returns (stream UploadResponse); // Upload a compiled sketch to a board using a programmer. - rpc UploadUsingProgrammer(UploadUsingProgrammerRequest) - returns (stream UploadUsingProgrammerResponse); + rpc UploadUsingProgrammer(UploadUsingProgrammerRequest) returns (stream UploadUsingProgrammerResponse); // Returns the list of users fields necessary to upload to that board // using the specified protocol. - rpc SupportedUserFields(SupportedUserFieldsRequest) - returns (SupportedUserFieldsResponse); + rpc SupportedUserFields(SupportedUserFieldsRequest) returns (SupportedUserFieldsResponse); // List programmers available for a board. - rpc ListProgrammersAvailableForUpload( - ListProgrammersAvailableForUploadRequest) - returns (ListProgrammersAvailableForUploadResponse); + rpc ListProgrammersAvailableForUpload(ListProgrammersAvailableForUploadRequest) returns (ListProgrammersAvailableForUploadResponse); // Burn bootloader to a board. - rpc BurnBootloader(BurnBootloaderRequest) - returns (stream BurnBootloaderResponse); + rpc BurnBootloader(BurnBootloaderRequest) returns (stream BurnBootloaderResponse); // Search for a platform in the platforms indexes. rpc PlatformSearch(PlatformSearchRequest) returns (PlatformSearchResponse); - // List all installed platforms. - rpc PlatformList(PlatformListRequest) returns (PlatformListResponse); - // Download the archive file of an Arduino library in the libraries index to // the staging directory. - rpc LibraryDownload(LibraryDownloadRequest) - returns (stream LibraryDownloadResponse); + rpc LibraryDownload(LibraryDownloadRequest) returns (stream LibraryDownloadResponse); // Download and install an Arduino library from the libraries index. - rpc LibraryInstall(LibraryInstallRequest) - returns (stream LibraryInstallResponse); + rpc LibraryInstall(LibraryInstallRequest) returns (stream LibraryInstallResponse); // Upgrade a library to the newest version available. - rpc LibraryUpgrade(LibraryUpgradeRequest) - returns (stream LibraryUpgradeResponse); + rpc LibraryUpgrade(LibraryUpgradeRequest) returns (stream LibraryUpgradeResponse); - // Install a library from a Zip File - rpc ZipLibraryInstall(ZipLibraryInstallRequest) - returns (stream ZipLibraryInstallResponse); + // Install a library from a Zip File. + rpc ZipLibraryInstall(ZipLibraryInstallRequest) returns (stream ZipLibraryInstallResponse); - // Download and install a library from a git url - rpc GitLibraryInstall(GitLibraryInstallRequest) - returns (stream GitLibraryInstallResponse); + // Download and install a library from a git url. + rpc GitLibraryInstall(GitLibraryInstallRequest) returns (stream GitLibraryInstallResponse); // Uninstall an Arduino library. - rpc LibraryUninstall(LibraryUninstallRequest) - returns (stream LibraryUninstallResponse); + rpc LibraryUninstall(LibraryUninstallRequest) returns (stream LibraryUninstallResponse); // Upgrade all installed Arduino libraries to the newest version available. - rpc LibraryUpgradeAll(LibraryUpgradeAllRequest) - returns (stream LibraryUpgradeAllResponse); + rpc LibraryUpgradeAll(LibraryUpgradeAllRequest) returns (stream LibraryUpgradeAllResponse); // List the recursive dependencies of a library, as defined by the `depends` // field of the library.properties files. - rpc LibraryResolveDependencies(LibraryResolveDependenciesRequest) - returns (LibraryResolveDependenciesResponse); + rpc LibraryResolveDependencies(LibraryResolveDependenciesRequest) returns (LibraryResolveDependenciesResponse); // Search the Arduino libraries index for libraries. rpc LibrarySearch(LibrarySearchRequest) returns (LibrarySearchResponse); @@ -174,17 +152,44 @@ service ArduinoCoreService { // List the installed libraries. rpc LibraryList(LibraryListRequest) returns (LibraryListResponse); - // Open a monitor connection to a board port + // Open a monitor connection to a board port. rpc Monitor(stream MonitorRequest) returns (stream MonitorResponse); - // Returns the parameters that can be set in the MonitorRequest calls - rpc EnumerateMonitorPortSettings(EnumerateMonitorPortSettingsRequest) - returns (EnumerateMonitorPortSettingsResponse); + // Returns the parameters that can be set in the MonitorRequest calls. + rpc EnumerateMonitorPortSettings(EnumerateMonitorPortSettingsRequest) returns (EnumerateMonitorPortSettingsResponse); // Start a debug session and communicate with the debugger tool. rpc Debug(stream DebugRequest) returns (stream DebugResponse) {} + // Determine if debugging is suported given a specific configuration. + rpc IsDebugSupported(IsDebugSupportedRequest) returns (IsDebugSupportedResponse) {} + + // Query the debugger information given a specific configuration. rpc GetDebugConfig(GetDebugConfigRequest) returns (GetDebugConfigResponse) {} + + // Check for updates to the Arduino CLI. + rpc CheckForArduinoCLIUpdates(CheckForArduinoCLIUpdatesRequest) returns (CheckForArduinoCLIUpdatesResponse); + + // Clean the download cache directory (where archives are downloaded). + rpc CleanDownloadCacheDirectory(CleanDownloadCacheDirectoryRequest) returns (CleanDownloadCacheDirectoryResponse); + + // Writes the settings currently stored in memory in a YAML file. + rpc ConfigurationSave(ConfigurationSaveRequest) returns (ConfigurationSaveResponse); + + // Read the settings from a YAML file. + rpc ConfigurationOpen(ConfigurationOpenRequest) returns (ConfigurationOpenResponse); + + // Get the current configuration. + rpc ConfigurationGet(ConfigurationGetRequest) returns (ConfigurationGetResponse); + + // Enumerate all the keys/values pairs available in the configuration. + rpc SettingsEnumerate(SettingsEnumerateRequest) returns (SettingsEnumerateResponse); + + // Get a single configuration value. + rpc SettingsGetValue(SettingsGetValueRequest) returns (SettingsGetValueResponse); + + // Set a single configuration value. + rpc SettingsSetValue(SettingsSetValueRequest) returns (SettingsSetValueResponse); } message CreateRequest {} @@ -197,9 +202,9 @@ message CreateResponse { message InitRequest { // An Arduino Core instance. Instance instance = 1; - // Profile to use + // Profile to use. string profile = 2; - // The path where the sketch is stored + // The path where the sketch is stored. string sketch_path = 3; } @@ -211,33 +216,36 @@ message InitResponse { TaskProgress task_progress = 2; } oneof message { + // The initialization progress. Progress init_progress = 1; + // The error in case the initialization failed. google.rpc.Status error = 2; - // Selected profile information - Profile profile = 3; + // Selected profile information. + SketchProfile profile = 3; } } +// Represent the reason why an instance initialization failed. enum FailedInstanceInitReason { - // FAILED_INSTANCE_INIT_REASON_UNSPECIFIED the error reason is not specialized + // FAILED_INSTANCE_INIT_REASON_UNSPECIFIED the error reason is not specialized. FAILED_INSTANCE_INIT_REASON_UNSPECIFIED = 0; - // INVALID_INDEX_URL a package index url is malformed + // INVALID_INDEX_URL a package index url is malformed. FAILED_INSTANCE_INIT_REASON_INVALID_INDEX_URL = 1; // FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR failure encountered while - // loading an index + // loading an index. FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR = 2; // FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR failure encountered while - // loading a tool + // loading a tool. FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR = 3; // FAILED_INSTANCE_INIT_REASON_INDEX_DOWNLOAD_ERROR failure encountered while - // downloading an index + // downloading an index. FAILED_INSTANCE_INIT_REASON_INDEX_DOWNLOAD_ERROR = 4; } message FailedInstanceInitError { - // specific cause of the error + // specific cause of the error. FailedInstanceInitReason reason = 1; - // explanation of the error + // explanation of the error. string message = 2; } @@ -253,21 +261,64 @@ message UpdateIndexRequest { Instance instance = 1; // If set to true user defined package indexes will not be updated. bool ignore_custom_package_indexes = 2; + // Only perform index update if the index file is older than this value in + // seconds. + int64 update_if_older_than_secs = 3; } message UpdateIndexResponse { - // Progress of the package index download. - DownloadProgress download_progress = 1; + message Result { + // The result of the packages index update. + repeated IndexUpdateReport updated_indexes = 1; + } + oneof message { + // Progress of the package index download. + DownloadProgress download_progress = 1; + // The result of the index update. + Result result = 2; + } } message UpdateLibrariesIndexRequest { // Arduino Core Service instance from the Init response. Instance instance = 1; + // Only perform index update if the index file is older than this value in + // seconds. + int64 update_if_older_than_secs = 2; } message UpdateLibrariesIndexResponse { - // Progress of the libraries index download. - DownloadProgress download_progress = 1; + message Result { + // The result of the libraries index update. + IndexUpdateReport libraries_index = 1; + } + oneof message { + // Progress of the libraries index download. + DownloadProgress download_progress = 1; + // The result of the index update. + Result result = 2; + } +} + +message IndexUpdateReport { + // The status represents the result of the index update. + enum Status { + // The status of the index update is unspecified. + STATUS_UNSPECIFIED = 0; + // The index has been successfully updated. + STATUS_UPDATED = 1; + // The index was already up to date. + STATUS_ALREADY_UP_TO_DATE = 2; + // The index update failed. + STATUS_FAILED = 3; + // The index update was skipped. + STATUS_SKIPPED = 4; + } + + // The URL of the index that was updated. + string index_url = 1; + // The result of the index update. + Status status = 2; } message VersionRequest {} @@ -278,95 +329,93 @@ message VersionResponse { } message NewSketchRequest { - // New sketch name + // New sketch name. string sketch_name = 2; // Optional: create a Sketch in this directory // (used as "Sketchbook" directory). // Default Sketchbook directory "directories.User" is used if sketch_dir is // empty. string sketch_dir = 3; - // Specificies if an existing .ino sketch should be overwritten + // Specificies if an existing .ino sketch should be overwritten. bool overwrite = 4; reserved 1; } message NewSketchResponse { - // Absolute path to a main sketch file + // Absolute path to a main sketch file. string main_file = 1; } message LoadSketchRequest { - // Absolute path to single sketch file or a sketch folder + // Absolute path to single sketch file or a sketch folder. string sketch_path = 2; reserved 1; } -message SketchProfile { - // Name of the profile - string name = 1; - // FQBN used by the profile - string fqbn = 2; -} - message LoadSketchResponse { - // Absolute path to a main sketch files - string main_file = 1; - // Absolute path to folder that contains main_file - string location_path = 2; - // List of absolute paths to other sketch files - repeated string other_sketch_files = 3; - // List of absolute paths to additional sketch files - repeated string additional_files = 4; - // List of absolute paths to supported files in the sketch root folder, main - // file excluded - repeated string root_folder_files = 5; - // Default FQBN set in project file (sketch.yaml) - string default_fqbn = 6; - // Default Port set in project file (sketch.yaml) - string default_port = 7; - // Default Protocol set in project file (sketch.yaml) - string default_protocol = 8; - // List of profiles present in the project file (sketch.yaml) - repeated SketchProfile profiles = 9; - // Default profile set in the project file (sketch.yaml) - SketchProfile default_profile = 10; + // The loaded sketch. + Sketch sketch = 1; } message ArchiveSketchRequest { - // Absolute path to Sketch file or folder containing Sketch file + // Absolute path to Sketch file or folder containing Sketch file. string sketch_path = 1; // Absolute path to archive that will be created or folder that will contain - // it + // it. string archive_path = 2; - // Specifies if build directory should be included in the archive + // Specifies if build directory should be included in the archive. bool include_build_dir = 3; - // Allows to override an already existing archive + // Allows to override an already existing archive. bool overwrite = 4; } message ArchiveSketchResponse {} message SetSketchDefaultsRequest { - // Absolute path to Sketch file or folder containing Sketch file + // Absolute path to Sketch file or folder containing Sketch file. string sketch_path = 1; - // The desired value for default_fqbn in project file (sketch.yaml) + // The desired value for default_fqbn in project file (sketch.yaml). string default_fqbn = 2; - // The desired value for default_port in project file (sketch.yaml) + // The desired value for default_port in project file (sketch.yaml). string default_port_address = 3; - // The desired value for default_protocol in project file (sketch.yaml) + // The desired value for default_protocol in project file (sketch.yaml). string default_port_protocol = 4; + // The desired value for default_programmer in project file (sketch.yaml). + string default_programmer = 5; } message SetSketchDefaultsResponse { // The value of default_fqnn that has been written in project file - // (sketch.yaml) + // (sketch.yaml). string default_fqbn = 1; // The value of default_port that has been written in project file - // (sketch.yaml) + // (sketch.yaml). string default_port_address = 2; // The value of default_protocol that has been written in project file - // (sketch.yaml) + // (sketch.yaml). string default_port_protocol = 3; + // The value of default_programmer that has been written in project file + // (sketch.yaml). + string default_programmer = 4; } + +message CheckForArduinoCLIUpdatesRequest { + // Force the check, even if the configuration says not to check for + // updates. + bool force_check = 1; +} + +message CheckForArduinoCLIUpdatesResponse { + // The latest version of Arduino CLI available, if bigger than the + // current version. + string newest_version = 1; +} + +message CleanDownloadCacheDirectoryRequest { + // The Arduino Core Service instance. + Instance instance = 1; +} + +message CleanDownloadCacheDirectoryResponse {} diff --git a/rpc/cc/arduino/cli/commands/v1/commands_grpc.pb.go b/rpc/cc/arduino/cli/commands/v1/commands_grpc.pb.go index 454d07dd5d2..1daf07db43b 100644 --- a/rpc/cc/arduino/cli/commands/v1/commands_grpc.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/commands_grpc.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.24.3 +// - protoc-gen-go-grpc v1.5.1 +// - protoc (unknown) // source: cc/arduino/cli/commands/v1/commands.proto package commands @@ -30,8 +31,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( ArduinoCoreService_Create_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/Create" @@ -48,6 +49,7 @@ const ( ArduinoCoreService_BoardList_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardList" ArduinoCoreService_BoardListAll_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardListAll" ArduinoCoreService_BoardSearch_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardSearch" + ArduinoCoreService_BoardIdentify_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardIdentify" ArduinoCoreService_BoardListWatch_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardListWatch" ArduinoCoreService_Compile_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/Compile" ArduinoCoreService_PlatformInstall_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/PlatformInstall" @@ -60,7 +62,6 @@ const ( ArduinoCoreService_ListProgrammersAvailableForUpload_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/ListProgrammersAvailableForUpload" ArduinoCoreService_BurnBootloader_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/BurnBootloader" ArduinoCoreService_PlatformSearch_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/PlatformSearch" - ArduinoCoreService_PlatformList_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/PlatformList" ArduinoCoreService_LibraryDownload_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/LibraryDownload" ArduinoCoreService_LibraryInstall_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/LibraryInstall" ArduinoCoreService_LibraryUpgrade_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/LibraryUpgrade" @@ -74,37 +75,48 @@ const ( ArduinoCoreService_Monitor_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/Monitor" ArduinoCoreService_EnumerateMonitorPortSettings_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/EnumerateMonitorPortSettings" ArduinoCoreService_Debug_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/Debug" + ArduinoCoreService_IsDebugSupported_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/IsDebugSupported" ArduinoCoreService_GetDebugConfig_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/GetDebugConfig" + ArduinoCoreService_CheckForArduinoCLIUpdates_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/CheckForArduinoCLIUpdates" + ArduinoCoreService_CleanDownloadCacheDirectory_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/CleanDownloadCacheDirectory" + ArduinoCoreService_ConfigurationSave_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/ConfigurationSave" + ArduinoCoreService_ConfigurationOpen_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/ConfigurationOpen" + ArduinoCoreService_ConfigurationGet_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/ConfigurationGet" + ArduinoCoreService_SettingsEnumerate_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/SettingsEnumerate" + ArduinoCoreService_SettingsGetValue_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/SettingsGetValue" + ArduinoCoreService_SettingsSetValue_FullMethodName = "/cc.arduino.cli.commands.v1.ArduinoCoreService/SettingsSetValue" ) // ArduinoCoreServiceClient is the client API for ArduinoCoreService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +// +// The main Arduino Platform service API. type ArduinoCoreServiceClient interface { - // Create a new Arduino Core instance + // Create a new Arduino Core instance. Create(ctx context.Context, in *CreateRequest, opts ...grpc.CallOption) (*CreateResponse, error) // Initializes an existing Arduino Core instance by loading platforms and - // libraries - Init(ctx context.Context, in *InitRequest, opts ...grpc.CallOption) (ArduinoCoreService_InitClient, error) - // Destroy an instance of the Arduino Core Service + // libraries. + Init(ctx context.Context, in *InitRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[InitResponse], error) + // Destroy an instance of the Arduino Core Service. Destroy(ctx context.Context, in *DestroyRequest, opts ...grpc.CallOption) (*DestroyResponse, error) - // Update package index of the Arduino Core Service - UpdateIndex(ctx context.Context, in *UpdateIndexRequest, opts ...grpc.CallOption) (ArduinoCoreService_UpdateIndexClient, error) - // Update libraries index - UpdateLibrariesIndex(ctx context.Context, in *UpdateLibrariesIndexRequest, opts ...grpc.CallOption) (ArduinoCoreService_UpdateLibrariesIndexClient, error) + // Update package index of the Arduino Core Service. + UpdateIndex(ctx context.Context, in *UpdateIndexRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[UpdateIndexResponse], error) + // Update libraries index. + UpdateLibrariesIndex(ctx context.Context, in *UpdateLibrariesIndexRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[UpdateLibrariesIndexResponse], error) // Get the version of Arduino CLI in use. Version(ctx context.Context, in *VersionRequest, opts ...grpc.CallOption) (*VersionResponse, error) - // Create a new Sketch + // Create a new Sketch. NewSketch(ctx context.Context, in *NewSketchRequest, opts ...grpc.CallOption) (*NewSketchResponse, error) - // Returns all files composing a Sketch + // Returns all files composing a Sketch. LoadSketch(ctx context.Context, in *LoadSketchRequest, opts ...grpc.CallOption) (*LoadSketchResponse, error) - // Creates a zip file containing all files of specified Sketch + // Creates a zip file containing all files of specified Sketch. ArchiveSketch(ctx context.Context, in *ArchiveSketchRequest, opts ...grpc.CallOption) (*ArchiveSketchResponse, error) // Sets the sketch default FQBN and Port Address/Protocol in // the sketch project file (sketch.yaml). These metadata can be retrieved // using LoadSketch. SetSketchDefaults(ctx context.Context, in *SetSketchDefaultsRequest, opts ...grpc.CallOption) (*SetSketchDefaultsResponse, error) - // Requests details about a board + // Requests details about a board. BoardDetails(ctx context.Context, in *BoardDetailsRequest, opts ...grpc.CallOption) (*BoardDetailsResponse, error) // List the boards currently connected to the computer. BoardList(ctx context.Context, in *BoardListRequest, opts ...grpc.CallOption) (*BoardListResponse, error) @@ -112,50 +124,50 @@ type ArduinoCoreServiceClient interface { BoardListAll(ctx context.Context, in *BoardListAllRequest, opts ...grpc.CallOption) (*BoardListAllResponse, error) // Search boards in installed and not installed Platforms. BoardSearch(ctx context.Context, in *BoardSearchRequest, opts ...grpc.CallOption) (*BoardSearchResponse, error) + // Identify a board using the given properties. + BoardIdentify(ctx context.Context, in *BoardIdentifyRequest, opts ...grpc.CallOption) (*BoardIdentifyResponse, error) // List boards connection and disconnected events. - BoardListWatch(ctx context.Context, in *BoardListWatchRequest, opts ...grpc.CallOption) (ArduinoCoreService_BoardListWatchClient, error) + BoardListWatch(ctx context.Context, in *BoardListWatchRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[BoardListWatchResponse], error) // Compile an Arduino sketch. - Compile(ctx context.Context, in *CompileRequest, opts ...grpc.CallOption) (ArduinoCoreService_CompileClient, error) + Compile(ctx context.Context, in *CompileRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[CompileResponse], error) // Download and install a platform and its tool dependencies. - PlatformInstall(ctx context.Context, in *PlatformInstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_PlatformInstallClient, error) + PlatformInstall(ctx context.Context, in *PlatformInstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PlatformInstallResponse], error) // Download a platform and its tool dependencies to the `staging/packages` // subdirectory of the data directory. - PlatformDownload(ctx context.Context, in *PlatformDownloadRequest, opts ...grpc.CallOption) (ArduinoCoreService_PlatformDownloadClient, error) + PlatformDownload(ctx context.Context, in *PlatformDownloadRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PlatformDownloadResponse], error) // Uninstall a platform as well as its tool dependencies that are not used by // other installed platforms. - PlatformUninstall(ctx context.Context, in *PlatformUninstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_PlatformUninstallClient, error) + PlatformUninstall(ctx context.Context, in *PlatformUninstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PlatformUninstallResponse], error) // Upgrade an installed platform to the latest version. - PlatformUpgrade(ctx context.Context, in *PlatformUpgradeRequest, opts ...grpc.CallOption) (ArduinoCoreService_PlatformUpgradeClient, error) + PlatformUpgrade(ctx context.Context, in *PlatformUpgradeRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PlatformUpgradeResponse], error) // Upload a compiled sketch to a board. - Upload(ctx context.Context, in *UploadRequest, opts ...grpc.CallOption) (ArduinoCoreService_UploadClient, error) + Upload(ctx context.Context, in *UploadRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[UploadResponse], error) // Upload a compiled sketch to a board using a programmer. - UploadUsingProgrammer(ctx context.Context, in *UploadUsingProgrammerRequest, opts ...grpc.CallOption) (ArduinoCoreService_UploadUsingProgrammerClient, error) + UploadUsingProgrammer(ctx context.Context, in *UploadUsingProgrammerRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[UploadUsingProgrammerResponse], error) // Returns the list of users fields necessary to upload to that board // using the specified protocol. SupportedUserFields(ctx context.Context, in *SupportedUserFieldsRequest, opts ...grpc.CallOption) (*SupportedUserFieldsResponse, error) // List programmers available for a board. ListProgrammersAvailableForUpload(ctx context.Context, in *ListProgrammersAvailableForUploadRequest, opts ...grpc.CallOption) (*ListProgrammersAvailableForUploadResponse, error) // Burn bootloader to a board. - BurnBootloader(ctx context.Context, in *BurnBootloaderRequest, opts ...grpc.CallOption) (ArduinoCoreService_BurnBootloaderClient, error) + BurnBootloader(ctx context.Context, in *BurnBootloaderRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[BurnBootloaderResponse], error) // Search for a platform in the platforms indexes. PlatformSearch(ctx context.Context, in *PlatformSearchRequest, opts ...grpc.CallOption) (*PlatformSearchResponse, error) - // List all installed platforms. - PlatformList(ctx context.Context, in *PlatformListRequest, opts ...grpc.CallOption) (*PlatformListResponse, error) // Download the archive file of an Arduino library in the libraries index to // the staging directory. - LibraryDownload(ctx context.Context, in *LibraryDownloadRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryDownloadClient, error) + LibraryDownload(ctx context.Context, in *LibraryDownloadRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryDownloadResponse], error) // Download and install an Arduino library from the libraries index. - LibraryInstall(ctx context.Context, in *LibraryInstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryInstallClient, error) + LibraryInstall(ctx context.Context, in *LibraryInstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryInstallResponse], error) // Upgrade a library to the newest version available. - LibraryUpgrade(ctx context.Context, in *LibraryUpgradeRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryUpgradeClient, error) - // Install a library from a Zip File - ZipLibraryInstall(ctx context.Context, in *ZipLibraryInstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_ZipLibraryInstallClient, error) - // Download and install a library from a git url - GitLibraryInstall(ctx context.Context, in *GitLibraryInstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_GitLibraryInstallClient, error) + LibraryUpgrade(ctx context.Context, in *LibraryUpgradeRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryUpgradeResponse], error) + // Install a library from a Zip File. + ZipLibraryInstall(ctx context.Context, in *ZipLibraryInstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[ZipLibraryInstallResponse], error) + // Download and install a library from a git url. + GitLibraryInstall(ctx context.Context, in *GitLibraryInstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[GitLibraryInstallResponse], error) // Uninstall an Arduino library. - LibraryUninstall(ctx context.Context, in *LibraryUninstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryUninstallClient, error) + LibraryUninstall(ctx context.Context, in *LibraryUninstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryUninstallResponse], error) // Upgrade all installed Arduino libraries to the newest version available. - LibraryUpgradeAll(ctx context.Context, in *LibraryUpgradeAllRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryUpgradeAllClient, error) + LibraryUpgradeAll(ctx context.Context, in *LibraryUpgradeAllRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryUpgradeAllResponse], error) // List the recursive dependencies of a library, as defined by the `depends` // field of the library.properties files. LibraryResolveDependencies(ctx context.Context, in *LibraryResolveDependenciesRequest, opts ...grpc.CallOption) (*LibraryResolveDependenciesResponse, error) @@ -163,13 +175,32 @@ type ArduinoCoreServiceClient interface { LibrarySearch(ctx context.Context, in *LibrarySearchRequest, opts ...grpc.CallOption) (*LibrarySearchResponse, error) // List the installed libraries. LibraryList(ctx context.Context, in *LibraryListRequest, opts ...grpc.CallOption) (*LibraryListResponse, error) - // Open a monitor connection to a board port - Monitor(ctx context.Context, opts ...grpc.CallOption) (ArduinoCoreService_MonitorClient, error) - // Returns the parameters that can be set in the MonitorRequest calls + // Open a monitor connection to a board port. + Monitor(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[MonitorRequest, MonitorResponse], error) + // Returns the parameters that can be set in the MonitorRequest calls. EnumerateMonitorPortSettings(ctx context.Context, in *EnumerateMonitorPortSettingsRequest, opts ...grpc.CallOption) (*EnumerateMonitorPortSettingsResponse, error) // Start a debug session and communicate with the debugger tool. - Debug(ctx context.Context, opts ...grpc.CallOption) (ArduinoCoreService_DebugClient, error) + Debug(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[DebugRequest, DebugResponse], error) + // Determine if debugging is suported given a specific configuration. + IsDebugSupported(ctx context.Context, in *IsDebugSupportedRequest, opts ...grpc.CallOption) (*IsDebugSupportedResponse, error) + // Query the debugger information given a specific configuration. GetDebugConfig(ctx context.Context, in *GetDebugConfigRequest, opts ...grpc.CallOption) (*GetDebugConfigResponse, error) + // Check for updates to the Arduino CLI. + CheckForArduinoCLIUpdates(ctx context.Context, in *CheckForArduinoCLIUpdatesRequest, opts ...grpc.CallOption) (*CheckForArduinoCLIUpdatesResponse, error) + // Clean the download cache directory (where archives are downloaded). + CleanDownloadCacheDirectory(ctx context.Context, in *CleanDownloadCacheDirectoryRequest, opts ...grpc.CallOption) (*CleanDownloadCacheDirectoryResponse, error) + // Writes the settings currently stored in memory in a YAML file. + ConfigurationSave(ctx context.Context, in *ConfigurationSaveRequest, opts ...grpc.CallOption) (*ConfigurationSaveResponse, error) + // Read the settings from a YAML file. + ConfigurationOpen(ctx context.Context, in *ConfigurationOpenRequest, opts ...grpc.CallOption) (*ConfigurationOpenResponse, error) + // Get the current configuration. + ConfigurationGet(ctx context.Context, in *ConfigurationGetRequest, opts ...grpc.CallOption) (*ConfigurationGetResponse, error) + // Enumerate all the keys/values pairs available in the configuration. + SettingsEnumerate(ctx context.Context, in *SettingsEnumerateRequest, opts ...grpc.CallOption) (*SettingsEnumerateResponse, error) + // Get a single configuration value. + SettingsGetValue(ctx context.Context, in *SettingsGetValueRequest, opts ...grpc.CallOption) (*SettingsGetValueResponse, error) + // Set a single configuration value. + SettingsSetValue(ctx context.Context, in *SettingsSetValueRequest, opts ...grpc.CallOption) (*SettingsSetValueResponse, error) } type arduinoCoreServiceClient struct { @@ -181,20 +212,22 @@ func NewArduinoCoreServiceClient(cc grpc.ClientConnInterface) ArduinoCoreService } func (c *arduinoCoreServiceClient) Create(ctx context.Context, in *CreateRequest, opts ...grpc.CallOption) (*CreateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_Create_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_Create_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *arduinoCoreServiceClient) Init(ctx context.Context, in *InitRequest, opts ...grpc.CallOption) (ArduinoCoreService_InitClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[0], ArduinoCoreService_Init_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) Init(ctx context.Context, in *InitRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[InitResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[0], ArduinoCoreService_Init_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceInitClient{stream} + x := &grpc.GenericClientStream[InitRequest, InitResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -204,38 +237,26 @@ func (c *arduinoCoreServiceClient) Init(ctx context.Context, in *InitRequest, op return x, nil } -type ArduinoCoreService_InitClient interface { - Recv() (*InitResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceInitClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceInitClient) Recv() (*InitResponse, error) { - m := new(InitResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_InitClient = grpc.ServerStreamingClient[InitResponse] func (c *arduinoCoreServiceClient) Destroy(ctx context.Context, in *DestroyRequest, opts ...grpc.CallOption) (*DestroyResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(DestroyResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_Destroy_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_Destroy_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *arduinoCoreServiceClient) UpdateIndex(ctx context.Context, in *UpdateIndexRequest, opts ...grpc.CallOption) (ArduinoCoreService_UpdateIndexClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[1], ArduinoCoreService_UpdateIndex_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) UpdateIndex(ctx context.Context, in *UpdateIndexRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[UpdateIndexResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[1], ArduinoCoreService_UpdateIndex_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceUpdateIndexClient{stream} + x := &grpc.GenericClientStream[UpdateIndexRequest, UpdateIndexResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -245,29 +266,16 @@ func (c *arduinoCoreServiceClient) UpdateIndex(ctx context.Context, in *UpdateIn return x, nil } -type ArduinoCoreService_UpdateIndexClient interface { - Recv() (*UpdateIndexResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceUpdateIndexClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceUpdateIndexClient) Recv() (*UpdateIndexResponse, error) { - m := new(UpdateIndexResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_UpdateIndexClient = grpc.ServerStreamingClient[UpdateIndexResponse] -func (c *arduinoCoreServiceClient) UpdateLibrariesIndex(ctx context.Context, in *UpdateLibrariesIndexRequest, opts ...grpc.CallOption) (ArduinoCoreService_UpdateLibrariesIndexClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[2], ArduinoCoreService_UpdateLibrariesIndex_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) UpdateLibrariesIndex(ctx context.Context, in *UpdateLibrariesIndexRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[UpdateLibrariesIndexResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[2], ArduinoCoreService_UpdateLibrariesIndex_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceUpdateLibrariesIndexClient{stream} + x := &grpc.GenericClientStream[UpdateLibrariesIndexRequest, UpdateLibrariesIndexResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -277,26 +285,13 @@ func (c *arduinoCoreServiceClient) UpdateLibrariesIndex(ctx context.Context, in return x, nil } -type ArduinoCoreService_UpdateLibrariesIndexClient interface { - Recv() (*UpdateLibrariesIndexResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceUpdateLibrariesIndexClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceUpdateLibrariesIndexClient) Recv() (*UpdateLibrariesIndexResponse, error) { - m := new(UpdateLibrariesIndexResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_UpdateLibrariesIndexClient = grpc.ServerStreamingClient[UpdateLibrariesIndexResponse] func (c *arduinoCoreServiceClient) Version(ctx context.Context, in *VersionRequest, opts ...grpc.CallOption) (*VersionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(VersionResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_Version_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_Version_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -304,8 +299,9 @@ func (c *arduinoCoreServiceClient) Version(ctx context.Context, in *VersionReque } func (c *arduinoCoreServiceClient) NewSketch(ctx context.Context, in *NewSketchRequest, opts ...grpc.CallOption) (*NewSketchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(NewSketchResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_NewSketch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_NewSketch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -313,8 +309,9 @@ func (c *arduinoCoreServiceClient) NewSketch(ctx context.Context, in *NewSketchR } func (c *arduinoCoreServiceClient) LoadSketch(ctx context.Context, in *LoadSketchRequest, opts ...grpc.CallOption) (*LoadSketchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(LoadSketchResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_LoadSketch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_LoadSketch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -322,8 +319,9 @@ func (c *arduinoCoreServiceClient) LoadSketch(ctx context.Context, in *LoadSketc } func (c *arduinoCoreServiceClient) ArchiveSketch(ctx context.Context, in *ArchiveSketchRequest, opts ...grpc.CallOption) (*ArchiveSketchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ArchiveSketchResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_ArchiveSketch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_ArchiveSketch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -331,8 +329,9 @@ func (c *arduinoCoreServiceClient) ArchiveSketch(ctx context.Context, in *Archiv } func (c *arduinoCoreServiceClient) SetSketchDefaults(ctx context.Context, in *SetSketchDefaultsRequest, opts ...grpc.CallOption) (*SetSketchDefaultsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SetSketchDefaultsResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_SetSketchDefaults_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_SetSketchDefaults_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -340,8 +339,9 @@ func (c *arduinoCoreServiceClient) SetSketchDefaults(ctx context.Context, in *Se } func (c *arduinoCoreServiceClient) BoardDetails(ctx context.Context, in *BoardDetailsRequest, opts ...grpc.CallOption) (*BoardDetailsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(BoardDetailsResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_BoardDetails_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_BoardDetails_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -349,8 +349,9 @@ func (c *arduinoCoreServiceClient) BoardDetails(ctx context.Context, in *BoardDe } func (c *arduinoCoreServiceClient) BoardList(ctx context.Context, in *BoardListRequest, opts ...grpc.CallOption) (*BoardListResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(BoardListResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_BoardList_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_BoardList_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -358,8 +359,9 @@ func (c *arduinoCoreServiceClient) BoardList(ctx context.Context, in *BoardListR } func (c *arduinoCoreServiceClient) BoardListAll(ctx context.Context, in *BoardListAllRequest, opts ...grpc.CallOption) (*BoardListAllResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(BoardListAllResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_BoardListAll_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_BoardListAll_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -367,20 +369,32 @@ func (c *arduinoCoreServiceClient) BoardListAll(ctx context.Context, in *BoardLi } func (c *arduinoCoreServiceClient) BoardSearch(ctx context.Context, in *BoardSearchRequest, opts ...grpc.CallOption) (*BoardSearchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(BoardSearchResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_BoardSearch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_BoardSearch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *arduinoCoreServiceClient) BoardListWatch(ctx context.Context, in *BoardListWatchRequest, opts ...grpc.CallOption) (ArduinoCoreService_BoardListWatchClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[3], ArduinoCoreService_BoardListWatch_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) BoardIdentify(ctx context.Context, in *BoardIdentifyRequest, opts ...grpc.CallOption) (*BoardIdentifyResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(BoardIdentifyResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_BoardIdentify_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceBoardListWatchClient{stream} + return out, nil +} + +func (c *arduinoCoreServiceClient) BoardListWatch(ctx context.Context, in *BoardListWatchRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[BoardListWatchResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[3], ArduinoCoreService_BoardListWatch_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[BoardListWatchRequest, BoardListWatchResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -390,29 +404,16 @@ func (c *arduinoCoreServiceClient) BoardListWatch(ctx context.Context, in *Board return x, nil } -type ArduinoCoreService_BoardListWatchClient interface { - Recv() (*BoardListWatchResponse, error) - grpc.ClientStream -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_BoardListWatchClient = grpc.ServerStreamingClient[BoardListWatchResponse] -type arduinoCoreServiceBoardListWatchClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceBoardListWatchClient) Recv() (*BoardListWatchResponse, error) { - m := new(BoardListWatchResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *arduinoCoreServiceClient) Compile(ctx context.Context, in *CompileRequest, opts ...grpc.CallOption) (ArduinoCoreService_CompileClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[4], ArduinoCoreService_Compile_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) Compile(ctx context.Context, in *CompileRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[CompileResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[4], ArduinoCoreService_Compile_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceCompileClient{stream} + x := &grpc.GenericClientStream[CompileRequest, CompileResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -422,29 +423,16 @@ func (c *arduinoCoreServiceClient) Compile(ctx context.Context, in *CompileReque return x, nil } -type ArduinoCoreService_CompileClient interface { - Recv() (*CompileResponse, error) - grpc.ClientStream -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_CompileClient = grpc.ServerStreamingClient[CompileResponse] -type arduinoCoreServiceCompileClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceCompileClient) Recv() (*CompileResponse, error) { - m := new(CompileResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *arduinoCoreServiceClient) PlatformInstall(ctx context.Context, in *PlatformInstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_PlatformInstallClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[5], ArduinoCoreService_PlatformInstall_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) PlatformInstall(ctx context.Context, in *PlatformInstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PlatformInstallResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[5], ArduinoCoreService_PlatformInstall_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServicePlatformInstallClient{stream} + x := &grpc.GenericClientStream[PlatformInstallRequest, PlatformInstallResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -454,29 +442,16 @@ func (c *arduinoCoreServiceClient) PlatformInstall(ctx context.Context, in *Plat return x, nil } -type ArduinoCoreService_PlatformInstallClient interface { - Recv() (*PlatformInstallResponse, error) - grpc.ClientStream -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_PlatformInstallClient = grpc.ServerStreamingClient[PlatformInstallResponse] -type arduinoCoreServicePlatformInstallClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServicePlatformInstallClient) Recv() (*PlatformInstallResponse, error) { - m := new(PlatformInstallResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *arduinoCoreServiceClient) PlatformDownload(ctx context.Context, in *PlatformDownloadRequest, opts ...grpc.CallOption) (ArduinoCoreService_PlatformDownloadClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[6], ArduinoCoreService_PlatformDownload_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) PlatformDownload(ctx context.Context, in *PlatformDownloadRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PlatformDownloadResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[6], ArduinoCoreService_PlatformDownload_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServicePlatformDownloadClient{stream} + x := &grpc.GenericClientStream[PlatformDownloadRequest, PlatformDownloadResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -486,29 +461,16 @@ func (c *arduinoCoreServiceClient) PlatformDownload(ctx context.Context, in *Pla return x, nil } -type ArduinoCoreService_PlatformDownloadClient interface { - Recv() (*PlatformDownloadResponse, error) - grpc.ClientStream -} - -type arduinoCoreServicePlatformDownloadClient struct { - grpc.ClientStream -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_PlatformDownloadClient = grpc.ServerStreamingClient[PlatformDownloadResponse] -func (x *arduinoCoreServicePlatformDownloadClient) Recv() (*PlatformDownloadResponse, error) { - m := new(PlatformDownloadResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *arduinoCoreServiceClient) PlatformUninstall(ctx context.Context, in *PlatformUninstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_PlatformUninstallClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[7], ArduinoCoreService_PlatformUninstall_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) PlatformUninstall(ctx context.Context, in *PlatformUninstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PlatformUninstallResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[7], ArduinoCoreService_PlatformUninstall_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServicePlatformUninstallClient{stream} + x := &grpc.GenericClientStream[PlatformUninstallRequest, PlatformUninstallResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -518,29 +480,16 @@ func (c *arduinoCoreServiceClient) PlatformUninstall(ctx context.Context, in *Pl return x, nil } -type ArduinoCoreService_PlatformUninstallClient interface { - Recv() (*PlatformUninstallResponse, error) - grpc.ClientStream -} - -type arduinoCoreServicePlatformUninstallClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServicePlatformUninstallClient) Recv() (*PlatformUninstallResponse, error) { - m := new(PlatformUninstallResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_PlatformUninstallClient = grpc.ServerStreamingClient[PlatformUninstallResponse] -func (c *arduinoCoreServiceClient) PlatformUpgrade(ctx context.Context, in *PlatformUpgradeRequest, opts ...grpc.CallOption) (ArduinoCoreService_PlatformUpgradeClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[8], ArduinoCoreService_PlatformUpgrade_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) PlatformUpgrade(ctx context.Context, in *PlatformUpgradeRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PlatformUpgradeResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[8], ArduinoCoreService_PlatformUpgrade_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServicePlatformUpgradeClient{stream} + x := &grpc.GenericClientStream[PlatformUpgradeRequest, PlatformUpgradeResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -550,29 +499,16 @@ func (c *arduinoCoreServiceClient) PlatformUpgrade(ctx context.Context, in *Plat return x, nil } -type ArduinoCoreService_PlatformUpgradeClient interface { - Recv() (*PlatformUpgradeResponse, error) - grpc.ClientStream -} - -type arduinoCoreServicePlatformUpgradeClient struct { - grpc.ClientStream -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_PlatformUpgradeClient = grpc.ServerStreamingClient[PlatformUpgradeResponse] -func (x *arduinoCoreServicePlatformUpgradeClient) Recv() (*PlatformUpgradeResponse, error) { - m := new(PlatformUpgradeResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *arduinoCoreServiceClient) Upload(ctx context.Context, in *UploadRequest, opts ...grpc.CallOption) (ArduinoCoreService_UploadClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[9], ArduinoCoreService_Upload_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) Upload(ctx context.Context, in *UploadRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[UploadResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[9], ArduinoCoreService_Upload_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceUploadClient{stream} + x := &grpc.GenericClientStream[UploadRequest, UploadResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -582,29 +518,16 @@ func (c *arduinoCoreServiceClient) Upload(ctx context.Context, in *UploadRequest return x, nil } -type ArduinoCoreService_UploadClient interface { - Recv() (*UploadResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceUploadClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceUploadClient) Recv() (*UploadResponse, error) { - m := new(UploadResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_UploadClient = grpc.ServerStreamingClient[UploadResponse] -func (c *arduinoCoreServiceClient) UploadUsingProgrammer(ctx context.Context, in *UploadUsingProgrammerRequest, opts ...grpc.CallOption) (ArduinoCoreService_UploadUsingProgrammerClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[10], ArduinoCoreService_UploadUsingProgrammer_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) UploadUsingProgrammer(ctx context.Context, in *UploadUsingProgrammerRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[UploadUsingProgrammerResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[10], ArduinoCoreService_UploadUsingProgrammer_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceUploadUsingProgrammerClient{stream} + x := &grpc.GenericClientStream[UploadUsingProgrammerRequest, UploadUsingProgrammerResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -614,26 +537,13 @@ func (c *arduinoCoreServiceClient) UploadUsingProgrammer(ctx context.Context, in return x, nil } -type ArduinoCoreService_UploadUsingProgrammerClient interface { - Recv() (*UploadUsingProgrammerResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceUploadUsingProgrammerClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceUploadUsingProgrammerClient) Recv() (*UploadUsingProgrammerResponse, error) { - m := new(UploadUsingProgrammerResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_UploadUsingProgrammerClient = grpc.ServerStreamingClient[UploadUsingProgrammerResponse] func (c *arduinoCoreServiceClient) SupportedUserFields(ctx context.Context, in *SupportedUserFieldsRequest, opts ...grpc.CallOption) (*SupportedUserFieldsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SupportedUserFieldsResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_SupportedUserFields_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_SupportedUserFields_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -641,20 +551,22 @@ func (c *arduinoCoreServiceClient) SupportedUserFields(ctx context.Context, in * } func (c *arduinoCoreServiceClient) ListProgrammersAvailableForUpload(ctx context.Context, in *ListProgrammersAvailableForUploadRequest, opts ...grpc.CallOption) (*ListProgrammersAvailableForUploadResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListProgrammersAvailableForUploadResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_ListProgrammersAvailableForUpload_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_ListProgrammersAvailableForUpload_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *arduinoCoreServiceClient) BurnBootloader(ctx context.Context, in *BurnBootloaderRequest, opts ...grpc.CallOption) (ArduinoCoreService_BurnBootloaderClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[11], ArduinoCoreService_BurnBootloader_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) BurnBootloader(ctx context.Context, in *BurnBootloaderRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[BurnBootloaderResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[11], ArduinoCoreService_BurnBootloader_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceBurnBootloaderClient{stream} + x := &grpc.GenericClientStream[BurnBootloaderRequest, BurnBootloaderResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -664,47 +576,26 @@ func (c *arduinoCoreServiceClient) BurnBootloader(ctx context.Context, in *BurnB return x, nil } -type ArduinoCoreService_BurnBootloaderClient interface { - Recv() (*BurnBootloaderResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceBurnBootloaderClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceBurnBootloaderClient) Recv() (*BurnBootloaderResponse, error) { - m := new(BurnBootloaderResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_BurnBootloaderClient = grpc.ServerStreamingClient[BurnBootloaderResponse] func (c *arduinoCoreServiceClient) PlatformSearch(ctx context.Context, in *PlatformSearchRequest, opts ...grpc.CallOption) (*PlatformSearchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(PlatformSearchResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_PlatformSearch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_PlatformSearch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *arduinoCoreServiceClient) PlatformList(ctx context.Context, in *PlatformListRequest, opts ...grpc.CallOption) (*PlatformListResponse, error) { - out := new(PlatformListResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_PlatformList_FullMethodName, in, out, opts...) +func (c *arduinoCoreServiceClient) LibraryDownload(ctx context.Context, in *LibraryDownloadRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryDownloadResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[12], ArduinoCoreService_LibraryDownload_FullMethodName, cOpts...) if err != nil { return nil, err } - return out, nil -} - -func (c *arduinoCoreServiceClient) LibraryDownload(ctx context.Context, in *LibraryDownloadRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryDownloadClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[12], ArduinoCoreService_LibraryDownload_FullMethodName, opts...) - if err != nil { - return nil, err - } - x := &arduinoCoreServiceLibraryDownloadClient{stream} + x := &grpc.GenericClientStream[LibraryDownloadRequest, LibraryDownloadResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -714,29 +605,16 @@ func (c *arduinoCoreServiceClient) LibraryDownload(ctx context.Context, in *Libr return x, nil } -type ArduinoCoreService_LibraryDownloadClient interface { - Recv() (*LibraryDownloadResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceLibraryDownloadClient struct { - grpc.ClientStream -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryDownloadClient = grpc.ServerStreamingClient[LibraryDownloadResponse] -func (x *arduinoCoreServiceLibraryDownloadClient) Recv() (*LibraryDownloadResponse, error) { - m := new(LibraryDownloadResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *arduinoCoreServiceClient) LibraryInstall(ctx context.Context, in *LibraryInstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryInstallClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[13], ArduinoCoreService_LibraryInstall_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) LibraryInstall(ctx context.Context, in *LibraryInstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryInstallResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[13], ArduinoCoreService_LibraryInstall_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceLibraryInstallClient{stream} + x := &grpc.GenericClientStream[LibraryInstallRequest, LibraryInstallResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -746,29 +624,16 @@ func (c *arduinoCoreServiceClient) LibraryInstall(ctx context.Context, in *Libra return x, nil } -type ArduinoCoreService_LibraryInstallClient interface { - Recv() (*LibraryInstallResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceLibraryInstallClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceLibraryInstallClient) Recv() (*LibraryInstallResponse, error) { - m := new(LibraryInstallResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryInstallClient = grpc.ServerStreamingClient[LibraryInstallResponse] -func (c *arduinoCoreServiceClient) LibraryUpgrade(ctx context.Context, in *LibraryUpgradeRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryUpgradeClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[14], ArduinoCoreService_LibraryUpgrade_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) LibraryUpgrade(ctx context.Context, in *LibraryUpgradeRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryUpgradeResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[14], ArduinoCoreService_LibraryUpgrade_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceLibraryUpgradeClient{stream} + x := &grpc.GenericClientStream[LibraryUpgradeRequest, LibraryUpgradeResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -778,29 +643,16 @@ func (c *arduinoCoreServiceClient) LibraryUpgrade(ctx context.Context, in *Libra return x, nil } -type ArduinoCoreService_LibraryUpgradeClient interface { - Recv() (*LibraryUpgradeResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceLibraryUpgradeClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceLibraryUpgradeClient) Recv() (*LibraryUpgradeResponse, error) { - m := new(LibraryUpgradeResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryUpgradeClient = grpc.ServerStreamingClient[LibraryUpgradeResponse] -func (c *arduinoCoreServiceClient) ZipLibraryInstall(ctx context.Context, in *ZipLibraryInstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_ZipLibraryInstallClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[15], ArduinoCoreService_ZipLibraryInstall_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) ZipLibraryInstall(ctx context.Context, in *ZipLibraryInstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[ZipLibraryInstallResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[15], ArduinoCoreService_ZipLibraryInstall_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceZipLibraryInstallClient{stream} + x := &grpc.GenericClientStream[ZipLibraryInstallRequest, ZipLibraryInstallResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -810,29 +662,16 @@ func (c *arduinoCoreServiceClient) ZipLibraryInstall(ctx context.Context, in *Zi return x, nil } -type ArduinoCoreService_ZipLibraryInstallClient interface { - Recv() (*ZipLibraryInstallResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceZipLibraryInstallClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceZipLibraryInstallClient) Recv() (*ZipLibraryInstallResponse, error) { - m := new(ZipLibraryInstallResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_ZipLibraryInstallClient = grpc.ServerStreamingClient[ZipLibraryInstallResponse] -func (c *arduinoCoreServiceClient) GitLibraryInstall(ctx context.Context, in *GitLibraryInstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_GitLibraryInstallClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[16], ArduinoCoreService_GitLibraryInstall_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) GitLibraryInstall(ctx context.Context, in *GitLibraryInstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[GitLibraryInstallResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[16], ArduinoCoreService_GitLibraryInstall_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceGitLibraryInstallClient{stream} + x := &grpc.GenericClientStream[GitLibraryInstallRequest, GitLibraryInstallResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -842,29 +681,16 @@ func (c *arduinoCoreServiceClient) GitLibraryInstall(ctx context.Context, in *Gi return x, nil } -type ArduinoCoreService_GitLibraryInstallClient interface { - Recv() (*GitLibraryInstallResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceGitLibraryInstallClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceGitLibraryInstallClient) Recv() (*GitLibraryInstallResponse, error) { - m := new(GitLibraryInstallResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_GitLibraryInstallClient = grpc.ServerStreamingClient[GitLibraryInstallResponse] -func (c *arduinoCoreServiceClient) LibraryUninstall(ctx context.Context, in *LibraryUninstallRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryUninstallClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[17], ArduinoCoreService_LibraryUninstall_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) LibraryUninstall(ctx context.Context, in *LibraryUninstallRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryUninstallResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[17], ArduinoCoreService_LibraryUninstall_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceLibraryUninstallClient{stream} + x := &grpc.GenericClientStream[LibraryUninstallRequest, LibraryUninstallResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -874,29 +700,16 @@ func (c *arduinoCoreServiceClient) LibraryUninstall(ctx context.Context, in *Lib return x, nil } -type ArduinoCoreService_LibraryUninstallClient interface { - Recv() (*LibraryUninstallResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceLibraryUninstallClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceLibraryUninstallClient) Recv() (*LibraryUninstallResponse, error) { - m := new(LibraryUninstallResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryUninstallClient = grpc.ServerStreamingClient[LibraryUninstallResponse] -func (c *arduinoCoreServiceClient) LibraryUpgradeAll(ctx context.Context, in *LibraryUpgradeAllRequest, opts ...grpc.CallOption) (ArduinoCoreService_LibraryUpgradeAllClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[18], ArduinoCoreService_LibraryUpgradeAll_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) LibraryUpgradeAll(ctx context.Context, in *LibraryUpgradeAllRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[LibraryUpgradeAllResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[18], ArduinoCoreService_LibraryUpgradeAll_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceLibraryUpgradeAllClient{stream} + x := &grpc.GenericClientStream[LibraryUpgradeAllRequest, LibraryUpgradeAllResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -906,26 +719,13 @@ func (c *arduinoCoreServiceClient) LibraryUpgradeAll(ctx context.Context, in *Li return x, nil } -type ArduinoCoreService_LibraryUpgradeAllClient interface { - Recv() (*LibraryUpgradeAllResponse, error) - grpc.ClientStream -} - -type arduinoCoreServiceLibraryUpgradeAllClient struct { - grpc.ClientStream -} - -func (x *arduinoCoreServiceLibraryUpgradeAllClient) Recv() (*LibraryUpgradeAllResponse, error) { - m := new(LibraryUpgradeAllResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryUpgradeAllClient = grpc.ServerStreamingClient[LibraryUpgradeAllResponse] func (c *arduinoCoreServiceClient) LibraryResolveDependencies(ctx context.Context, in *LibraryResolveDependenciesRequest, opts ...grpc.CallOption) (*LibraryResolveDependenciesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(LibraryResolveDependenciesResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_LibraryResolveDependencies_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_LibraryResolveDependencies_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -933,8 +733,9 @@ func (c *arduinoCoreServiceClient) LibraryResolveDependencies(ctx context.Contex } func (c *arduinoCoreServiceClient) LibrarySearch(ctx context.Context, in *LibrarySearchRequest, opts ...grpc.CallOption) (*LibrarySearchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(LibrarySearchResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_LibrarySearch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_LibrarySearch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -942,88 +743,145 @@ func (c *arduinoCoreServiceClient) LibrarySearch(ctx context.Context, in *Librar } func (c *arduinoCoreServiceClient) LibraryList(ctx context.Context, in *LibraryListRequest, opts ...grpc.CallOption) (*LibraryListResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(LibraryListResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_LibraryList_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, ArduinoCoreService_LibraryList_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *arduinoCoreServiceClient) Monitor(ctx context.Context, opts ...grpc.CallOption) (ArduinoCoreService_MonitorClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[19], ArduinoCoreService_Monitor_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) Monitor(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[MonitorRequest, MonitorResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[19], ArduinoCoreService_Monitor_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceMonitorClient{stream} + x := &grpc.GenericClientStream[MonitorRequest, MonitorResponse]{ClientStream: stream} return x, nil } -type ArduinoCoreService_MonitorClient interface { - Send(*MonitorRequest) error - Recv() (*MonitorResponse, error) - grpc.ClientStream +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_MonitorClient = grpc.BidiStreamingClient[MonitorRequest, MonitorResponse] + +func (c *arduinoCoreServiceClient) EnumerateMonitorPortSettings(ctx context.Context, in *EnumerateMonitorPortSettingsRequest, opts ...grpc.CallOption) (*EnumerateMonitorPortSettingsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(EnumerateMonitorPortSettingsResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_EnumerateMonitorPortSettings_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil } -type arduinoCoreServiceMonitorClient struct { - grpc.ClientStream +func (c *arduinoCoreServiceClient) Debug(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[DebugRequest, DebugResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[20], ArduinoCoreService_Debug_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[DebugRequest, DebugResponse]{ClientStream: stream} + return x, nil } -func (x *arduinoCoreServiceMonitorClient) Send(m *MonitorRequest) error { - return x.ClientStream.SendMsg(m) +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_DebugClient = grpc.BidiStreamingClient[DebugRequest, DebugResponse] + +func (c *arduinoCoreServiceClient) IsDebugSupported(ctx context.Context, in *IsDebugSupportedRequest, opts ...grpc.CallOption) (*IsDebugSupportedResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IsDebugSupportedResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_IsDebugSupported_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil } -func (x *arduinoCoreServiceMonitorClient) Recv() (*MonitorResponse, error) { - m := new(MonitorResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { +func (c *arduinoCoreServiceClient) GetDebugConfig(ctx context.Context, in *GetDebugConfigRequest, opts ...grpc.CallOption) (*GetDebugConfigResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetDebugConfigResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_GetDebugConfig_FullMethodName, in, out, cOpts...) + if err != nil { return nil, err } - return m, nil + return out, nil } -func (c *arduinoCoreServiceClient) EnumerateMonitorPortSettings(ctx context.Context, in *EnumerateMonitorPortSettingsRequest, opts ...grpc.CallOption) (*EnumerateMonitorPortSettingsResponse, error) { - out := new(EnumerateMonitorPortSettingsResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_EnumerateMonitorPortSettings_FullMethodName, in, out, opts...) +func (c *arduinoCoreServiceClient) CheckForArduinoCLIUpdates(ctx context.Context, in *CheckForArduinoCLIUpdatesRequest, opts ...grpc.CallOption) (*CheckForArduinoCLIUpdatesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CheckForArduinoCLIUpdatesResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_CheckForArduinoCLIUpdates_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *arduinoCoreServiceClient) Debug(ctx context.Context, opts ...grpc.CallOption) (ArduinoCoreService_DebugClient, error) { - stream, err := c.cc.NewStream(ctx, &ArduinoCoreService_ServiceDesc.Streams[20], ArduinoCoreService_Debug_FullMethodName, opts...) +func (c *arduinoCoreServiceClient) CleanDownloadCacheDirectory(ctx context.Context, in *CleanDownloadCacheDirectoryRequest, opts ...grpc.CallOption) (*CleanDownloadCacheDirectoryResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CleanDownloadCacheDirectoryResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_CleanDownloadCacheDirectory_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } - x := &arduinoCoreServiceDebugClient{stream} - return x, nil + return out, nil +} + +func (c *arduinoCoreServiceClient) ConfigurationSave(ctx context.Context, in *ConfigurationSaveRequest, opts ...grpc.CallOption) (*ConfigurationSaveResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ConfigurationSaveResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_ConfigurationSave_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil } -type ArduinoCoreService_DebugClient interface { - Send(*DebugRequest) error - Recv() (*DebugResponse, error) - grpc.ClientStream +func (c *arduinoCoreServiceClient) ConfigurationOpen(ctx context.Context, in *ConfigurationOpenRequest, opts ...grpc.CallOption) (*ConfigurationOpenResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ConfigurationOpenResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_ConfigurationOpen_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil } -type arduinoCoreServiceDebugClient struct { - grpc.ClientStream +func (c *arduinoCoreServiceClient) ConfigurationGet(ctx context.Context, in *ConfigurationGetRequest, opts ...grpc.CallOption) (*ConfigurationGetResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ConfigurationGetResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_ConfigurationGet_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil } -func (x *arduinoCoreServiceDebugClient) Send(m *DebugRequest) error { - return x.ClientStream.SendMsg(m) +func (c *arduinoCoreServiceClient) SettingsEnumerate(ctx context.Context, in *SettingsEnumerateRequest, opts ...grpc.CallOption) (*SettingsEnumerateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SettingsEnumerateResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_SettingsEnumerate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil } -func (x *arduinoCoreServiceDebugClient) Recv() (*DebugResponse, error) { - m := new(DebugResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { +func (c *arduinoCoreServiceClient) SettingsGetValue(ctx context.Context, in *SettingsGetValueRequest, opts ...grpc.CallOption) (*SettingsGetValueResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SettingsGetValueResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_SettingsGetValue_FullMethodName, in, out, cOpts...) + if err != nil { return nil, err } - return m, nil + return out, nil } -func (c *arduinoCoreServiceClient) GetDebugConfig(ctx context.Context, in *GetDebugConfigRequest, opts ...grpc.CallOption) (*GetDebugConfigResponse, error) { - out := new(GetDebugConfigResponse) - err := c.cc.Invoke(ctx, ArduinoCoreService_GetDebugConfig_FullMethodName, in, out, opts...) +func (c *arduinoCoreServiceClient) SettingsSetValue(ctx context.Context, in *SettingsSetValueRequest, opts ...grpc.CallOption) (*SettingsSetValueResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SettingsSetValueResponse) + err := c.cc.Invoke(ctx, ArduinoCoreService_SettingsSetValue_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -1032,32 +890,34 @@ func (c *arduinoCoreServiceClient) GetDebugConfig(ctx context.Context, in *GetDe // ArduinoCoreServiceServer is the server API for ArduinoCoreService service. // All implementations must embed UnimplementedArduinoCoreServiceServer -// for forward compatibility +// for forward compatibility. +// +// The main Arduino Platform service API. type ArduinoCoreServiceServer interface { - // Create a new Arduino Core instance + // Create a new Arduino Core instance. Create(context.Context, *CreateRequest) (*CreateResponse, error) // Initializes an existing Arduino Core instance by loading platforms and - // libraries - Init(*InitRequest, ArduinoCoreService_InitServer) error - // Destroy an instance of the Arduino Core Service + // libraries. + Init(*InitRequest, grpc.ServerStreamingServer[InitResponse]) error + // Destroy an instance of the Arduino Core Service. Destroy(context.Context, *DestroyRequest) (*DestroyResponse, error) - // Update package index of the Arduino Core Service - UpdateIndex(*UpdateIndexRequest, ArduinoCoreService_UpdateIndexServer) error - // Update libraries index - UpdateLibrariesIndex(*UpdateLibrariesIndexRequest, ArduinoCoreService_UpdateLibrariesIndexServer) error + // Update package index of the Arduino Core Service. + UpdateIndex(*UpdateIndexRequest, grpc.ServerStreamingServer[UpdateIndexResponse]) error + // Update libraries index. + UpdateLibrariesIndex(*UpdateLibrariesIndexRequest, grpc.ServerStreamingServer[UpdateLibrariesIndexResponse]) error // Get the version of Arduino CLI in use. Version(context.Context, *VersionRequest) (*VersionResponse, error) - // Create a new Sketch + // Create a new Sketch. NewSketch(context.Context, *NewSketchRequest) (*NewSketchResponse, error) - // Returns all files composing a Sketch + // Returns all files composing a Sketch. LoadSketch(context.Context, *LoadSketchRequest) (*LoadSketchResponse, error) - // Creates a zip file containing all files of specified Sketch + // Creates a zip file containing all files of specified Sketch. ArchiveSketch(context.Context, *ArchiveSketchRequest) (*ArchiveSketchResponse, error) // Sets the sketch default FQBN and Port Address/Protocol in // the sketch project file (sketch.yaml). These metadata can be retrieved // using LoadSketch. SetSketchDefaults(context.Context, *SetSketchDefaultsRequest) (*SetSketchDefaultsResponse, error) - // Requests details about a board + // Requests details about a board. BoardDetails(context.Context, *BoardDetailsRequest) (*BoardDetailsResponse, error) // List the boards currently connected to the computer. BoardList(context.Context, *BoardListRequest) (*BoardListResponse, error) @@ -1065,50 +925,50 @@ type ArduinoCoreServiceServer interface { BoardListAll(context.Context, *BoardListAllRequest) (*BoardListAllResponse, error) // Search boards in installed and not installed Platforms. BoardSearch(context.Context, *BoardSearchRequest) (*BoardSearchResponse, error) + // Identify a board using the given properties. + BoardIdentify(context.Context, *BoardIdentifyRequest) (*BoardIdentifyResponse, error) // List boards connection and disconnected events. - BoardListWatch(*BoardListWatchRequest, ArduinoCoreService_BoardListWatchServer) error + BoardListWatch(*BoardListWatchRequest, grpc.ServerStreamingServer[BoardListWatchResponse]) error // Compile an Arduino sketch. - Compile(*CompileRequest, ArduinoCoreService_CompileServer) error + Compile(*CompileRequest, grpc.ServerStreamingServer[CompileResponse]) error // Download and install a platform and its tool dependencies. - PlatformInstall(*PlatformInstallRequest, ArduinoCoreService_PlatformInstallServer) error + PlatformInstall(*PlatformInstallRequest, grpc.ServerStreamingServer[PlatformInstallResponse]) error // Download a platform and its tool dependencies to the `staging/packages` // subdirectory of the data directory. - PlatformDownload(*PlatformDownloadRequest, ArduinoCoreService_PlatformDownloadServer) error + PlatformDownload(*PlatformDownloadRequest, grpc.ServerStreamingServer[PlatformDownloadResponse]) error // Uninstall a platform as well as its tool dependencies that are not used by // other installed platforms. - PlatformUninstall(*PlatformUninstallRequest, ArduinoCoreService_PlatformUninstallServer) error + PlatformUninstall(*PlatformUninstallRequest, grpc.ServerStreamingServer[PlatformUninstallResponse]) error // Upgrade an installed platform to the latest version. - PlatformUpgrade(*PlatformUpgradeRequest, ArduinoCoreService_PlatformUpgradeServer) error + PlatformUpgrade(*PlatformUpgradeRequest, grpc.ServerStreamingServer[PlatformUpgradeResponse]) error // Upload a compiled sketch to a board. - Upload(*UploadRequest, ArduinoCoreService_UploadServer) error + Upload(*UploadRequest, grpc.ServerStreamingServer[UploadResponse]) error // Upload a compiled sketch to a board using a programmer. - UploadUsingProgrammer(*UploadUsingProgrammerRequest, ArduinoCoreService_UploadUsingProgrammerServer) error + UploadUsingProgrammer(*UploadUsingProgrammerRequest, grpc.ServerStreamingServer[UploadUsingProgrammerResponse]) error // Returns the list of users fields necessary to upload to that board // using the specified protocol. SupportedUserFields(context.Context, *SupportedUserFieldsRequest) (*SupportedUserFieldsResponse, error) // List programmers available for a board. ListProgrammersAvailableForUpload(context.Context, *ListProgrammersAvailableForUploadRequest) (*ListProgrammersAvailableForUploadResponse, error) // Burn bootloader to a board. - BurnBootloader(*BurnBootloaderRequest, ArduinoCoreService_BurnBootloaderServer) error + BurnBootloader(*BurnBootloaderRequest, grpc.ServerStreamingServer[BurnBootloaderResponse]) error // Search for a platform in the platforms indexes. PlatformSearch(context.Context, *PlatformSearchRequest) (*PlatformSearchResponse, error) - // List all installed platforms. - PlatformList(context.Context, *PlatformListRequest) (*PlatformListResponse, error) // Download the archive file of an Arduino library in the libraries index to // the staging directory. - LibraryDownload(*LibraryDownloadRequest, ArduinoCoreService_LibraryDownloadServer) error + LibraryDownload(*LibraryDownloadRequest, grpc.ServerStreamingServer[LibraryDownloadResponse]) error // Download and install an Arduino library from the libraries index. - LibraryInstall(*LibraryInstallRequest, ArduinoCoreService_LibraryInstallServer) error + LibraryInstall(*LibraryInstallRequest, grpc.ServerStreamingServer[LibraryInstallResponse]) error // Upgrade a library to the newest version available. - LibraryUpgrade(*LibraryUpgradeRequest, ArduinoCoreService_LibraryUpgradeServer) error - // Install a library from a Zip File - ZipLibraryInstall(*ZipLibraryInstallRequest, ArduinoCoreService_ZipLibraryInstallServer) error - // Download and install a library from a git url - GitLibraryInstall(*GitLibraryInstallRequest, ArduinoCoreService_GitLibraryInstallServer) error + LibraryUpgrade(*LibraryUpgradeRequest, grpc.ServerStreamingServer[LibraryUpgradeResponse]) error + // Install a library from a Zip File. + ZipLibraryInstall(*ZipLibraryInstallRequest, grpc.ServerStreamingServer[ZipLibraryInstallResponse]) error + // Download and install a library from a git url. + GitLibraryInstall(*GitLibraryInstallRequest, grpc.ServerStreamingServer[GitLibraryInstallResponse]) error // Uninstall an Arduino library. - LibraryUninstall(*LibraryUninstallRequest, ArduinoCoreService_LibraryUninstallServer) error + LibraryUninstall(*LibraryUninstallRequest, grpc.ServerStreamingServer[LibraryUninstallResponse]) error // Upgrade all installed Arduino libraries to the newest version available. - LibraryUpgradeAll(*LibraryUpgradeAllRequest, ArduinoCoreService_LibraryUpgradeAllServer) error + LibraryUpgradeAll(*LibraryUpgradeAllRequest, grpc.ServerStreamingServer[LibraryUpgradeAllResponse]) error // List the recursive dependencies of a library, as defined by the `depends` // field of the library.properties files. LibraryResolveDependencies(context.Context, *LibraryResolveDependenciesRequest) (*LibraryResolveDependenciesResponse, error) @@ -1116,33 +976,55 @@ type ArduinoCoreServiceServer interface { LibrarySearch(context.Context, *LibrarySearchRequest) (*LibrarySearchResponse, error) // List the installed libraries. LibraryList(context.Context, *LibraryListRequest) (*LibraryListResponse, error) - // Open a monitor connection to a board port - Monitor(ArduinoCoreService_MonitorServer) error - // Returns the parameters that can be set in the MonitorRequest calls + // Open a monitor connection to a board port. + Monitor(grpc.BidiStreamingServer[MonitorRequest, MonitorResponse]) error + // Returns the parameters that can be set in the MonitorRequest calls. EnumerateMonitorPortSettings(context.Context, *EnumerateMonitorPortSettingsRequest) (*EnumerateMonitorPortSettingsResponse, error) // Start a debug session and communicate with the debugger tool. - Debug(ArduinoCoreService_DebugServer) error + Debug(grpc.BidiStreamingServer[DebugRequest, DebugResponse]) error + // Determine if debugging is suported given a specific configuration. + IsDebugSupported(context.Context, *IsDebugSupportedRequest) (*IsDebugSupportedResponse, error) + // Query the debugger information given a specific configuration. GetDebugConfig(context.Context, *GetDebugConfigRequest) (*GetDebugConfigResponse, error) + // Check for updates to the Arduino CLI. + CheckForArduinoCLIUpdates(context.Context, *CheckForArduinoCLIUpdatesRequest) (*CheckForArduinoCLIUpdatesResponse, error) + // Clean the download cache directory (where archives are downloaded). + CleanDownloadCacheDirectory(context.Context, *CleanDownloadCacheDirectoryRequest) (*CleanDownloadCacheDirectoryResponse, error) + // Writes the settings currently stored in memory in a YAML file. + ConfigurationSave(context.Context, *ConfigurationSaveRequest) (*ConfigurationSaveResponse, error) + // Read the settings from a YAML file. + ConfigurationOpen(context.Context, *ConfigurationOpenRequest) (*ConfigurationOpenResponse, error) + // Get the current configuration. + ConfigurationGet(context.Context, *ConfigurationGetRequest) (*ConfigurationGetResponse, error) + // Enumerate all the keys/values pairs available in the configuration. + SettingsEnumerate(context.Context, *SettingsEnumerateRequest) (*SettingsEnumerateResponse, error) + // Get a single configuration value. + SettingsGetValue(context.Context, *SettingsGetValueRequest) (*SettingsGetValueResponse, error) + // Set a single configuration value. + SettingsSetValue(context.Context, *SettingsSetValueRequest) (*SettingsSetValueResponse, error) mustEmbedUnimplementedArduinoCoreServiceServer() } -// UnimplementedArduinoCoreServiceServer must be embedded to have forward compatible implementations. -type UnimplementedArduinoCoreServiceServer struct { -} +// UnimplementedArduinoCoreServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedArduinoCoreServiceServer struct{} func (UnimplementedArduinoCoreServiceServer) Create(context.Context, *CreateRequest) (*CreateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") } -func (UnimplementedArduinoCoreServiceServer) Init(*InitRequest, ArduinoCoreService_InitServer) error { +func (UnimplementedArduinoCoreServiceServer) Init(*InitRequest, grpc.ServerStreamingServer[InitResponse]) error { return status.Errorf(codes.Unimplemented, "method Init not implemented") } func (UnimplementedArduinoCoreServiceServer) Destroy(context.Context, *DestroyRequest) (*DestroyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Destroy not implemented") } -func (UnimplementedArduinoCoreServiceServer) UpdateIndex(*UpdateIndexRequest, ArduinoCoreService_UpdateIndexServer) error { +func (UnimplementedArduinoCoreServiceServer) UpdateIndex(*UpdateIndexRequest, grpc.ServerStreamingServer[UpdateIndexResponse]) error { return status.Errorf(codes.Unimplemented, "method UpdateIndex not implemented") } -func (UnimplementedArduinoCoreServiceServer) UpdateLibrariesIndex(*UpdateLibrariesIndexRequest, ArduinoCoreService_UpdateLibrariesIndexServer) error { +func (UnimplementedArduinoCoreServiceServer) UpdateLibrariesIndex(*UpdateLibrariesIndexRequest, grpc.ServerStreamingServer[UpdateLibrariesIndexResponse]) error { return status.Errorf(codes.Unimplemented, "method UpdateLibrariesIndex not implemented") } func (UnimplementedArduinoCoreServiceServer) Version(context.Context, *VersionRequest) (*VersionResponse, error) { @@ -1172,28 +1054,31 @@ func (UnimplementedArduinoCoreServiceServer) BoardListAll(context.Context, *Boar func (UnimplementedArduinoCoreServiceServer) BoardSearch(context.Context, *BoardSearchRequest) (*BoardSearchResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method BoardSearch not implemented") } -func (UnimplementedArduinoCoreServiceServer) BoardListWatch(*BoardListWatchRequest, ArduinoCoreService_BoardListWatchServer) error { +func (UnimplementedArduinoCoreServiceServer) BoardIdentify(context.Context, *BoardIdentifyRequest) (*BoardIdentifyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BoardIdentify not implemented") +} +func (UnimplementedArduinoCoreServiceServer) BoardListWatch(*BoardListWatchRequest, grpc.ServerStreamingServer[BoardListWatchResponse]) error { return status.Errorf(codes.Unimplemented, "method BoardListWatch not implemented") } -func (UnimplementedArduinoCoreServiceServer) Compile(*CompileRequest, ArduinoCoreService_CompileServer) error { +func (UnimplementedArduinoCoreServiceServer) Compile(*CompileRequest, grpc.ServerStreamingServer[CompileResponse]) error { return status.Errorf(codes.Unimplemented, "method Compile not implemented") } -func (UnimplementedArduinoCoreServiceServer) PlatformInstall(*PlatformInstallRequest, ArduinoCoreService_PlatformInstallServer) error { +func (UnimplementedArduinoCoreServiceServer) PlatformInstall(*PlatformInstallRequest, grpc.ServerStreamingServer[PlatformInstallResponse]) error { return status.Errorf(codes.Unimplemented, "method PlatformInstall not implemented") } -func (UnimplementedArduinoCoreServiceServer) PlatformDownload(*PlatformDownloadRequest, ArduinoCoreService_PlatformDownloadServer) error { +func (UnimplementedArduinoCoreServiceServer) PlatformDownload(*PlatformDownloadRequest, grpc.ServerStreamingServer[PlatformDownloadResponse]) error { return status.Errorf(codes.Unimplemented, "method PlatformDownload not implemented") } -func (UnimplementedArduinoCoreServiceServer) PlatformUninstall(*PlatformUninstallRequest, ArduinoCoreService_PlatformUninstallServer) error { +func (UnimplementedArduinoCoreServiceServer) PlatformUninstall(*PlatformUninstallRequest, grpc.ServerStreamingServer[PlatformUninstallResponse]) error { return status.Errorf(codes.Unimplemented, "method PlatformUninstall not implemented") } -func (UnimplementedArduinoCoreServiceServer) PlatformUpgrade(*PlatformUpgradeRequest, ArduinoCoreService_PlatformUpgradeServer) error { +func (UnimplementedArduinoCoreServiceServer) PlatformUpgrade(*PlatformUpgradeRequest, grpc.ServerStreamingServer[PlatformUpgradeResponse]) error { return status.Errorf(codes.Unimplemented, "method PlatformUpgrade not implemented") } -func (UnimplementedArduinoCoreServiceServer) Upload(*UploadRequest, ArduinoCoreService_UploadServer) error { +func (UnimplementedArduinoCoreServiceServer) Upload(*UploadRequest, grpc.ServerStreamingServer[UploadResponse]) error { return status.Errorf(codes.Unimplemented, "method Upload not implemented") } -func (UnimplementedArduinoCoreServiceServer) UploadUsingProgrammer(*UploadUsingProgrammerRequest, ArduinoCoreService_UploadUsingProgrammerServer) error { +func (UnimplementedArduinoCoreServiceServer) UploadUsingProgrammer(*UploadUsingProgrammerRequest, grpc.ServerStreamingServer[UploadUsingProgrammerResponse]) error { return status.Errorf(codes.Unimplemented, "method UploadUsingProgrammer not implemented") } func (UnimplementedArduinoCoreServiceServer) SupportedUserFields(context.Context, *SupportedUserFieldsRequest) (*SupportedUserFieldsResponse, error) { @@ -1202,34 +1087,31 @@ func (UnimplementedArduinoCoreServiceServer) SupportedUserFields(context.Context func (UnimplementedArduinoCoreServiceServer) ListProgrammersAvailableForUpload(context.Context, *ListProgrammersAvailableForUploadRequest) (*ListProgrammersAvailableForUploadResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListProgrammersAvailableForUpload not implemented") } -func (UnimplementedArduinoCoreServiceServer) BurnBootloader(*BurnBootloaderRequest, ArduinoCoreService_BurnBootloaderServer) error { +func (UnimplementedArduinoCoreServiceServer) BurnBootloader(*BurnBootloaderRequest, grpc.ServerStreamingServer[BurnBootloaderResponse]) error { return status.Errorf(codes.Unimplemented, "method BurnBootloader not implemented") } func (UnimplementedArduinoCoreServiceServer) PlatformSearch(context.Context, *PlatformSearchRequest) (*PlatformSearchResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PlatformSearch not implemented") } -func (UnimplementedArduinoCoreServiceServer) PlatformList(context.Context, *PlatformListRequest) (*PlatformListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PlatformList not implemented") -} -func (UnimplementedArduinoCoreServiceServer) LibraryDownload(*LibraryDownloadRequest, ArduinoCoreService_LibraryDownloadServer) error { +func (UnimplementedArduinoCoreServiceServer) LibraryDownload(*LibraryDownloadRequest, grpc.ServerStreamingServer[LibraryDownloadResponse]) error { return status.Errorf(codes.Unimplemented, "method LibraryDownload not implemented") } -func (UnimplementedArduinoCoreServiceServer) LibraryInstall(*LibraryInstallRequest, ArduinoCoreService_LibraryInstallServer) error { +func (UnimplementedArduinoCoreServiceServer) LibraryInstall(*LibraryInstallRequest, grpc.ServerStreamingServer[LibraryInstallResponse]) error { return status.Errorf(codes.Unimplemented, "method LibraryInstall not implemented") } -func (UnimplementedArduinoCoreServiceServer) LibraryUpgrade(*LibraryUpgradeRequest, ArduinoCoreService_LibraryUpgradeServer) error { +func (UnimplementedArduinoCoreServiceServer) LibraryUpgrade(*LibraryUpgradeRequest, grpc.ServerStreamingServer[LibraryUpgradeResponse]) error { return status.Errorf(codes.Unimplemented, "method LibraryUpgrade not implemented") } -func (UnimplementedArduinoCoreServiceServer) ZipLibraryInstall(*ZipLibraryInstallRequest, ArduinoCoreService_ZipLibraryInstallServer) error { +func (UnimplementedArduinoCoreServiceServer) ZipLibraryInstall(*ZipLibraryInstallRequest, grpc.ServerStreamingServer[ZipLibraryInstallResponse]) error { return status.Errorf(codes.Unimplemented, "method ZipLibraryInstall not implemented") } -func (UnimplementedArduinoCoreServiceServer) GitLibraryInstall(*GitLibraryInstallRequest, ArduinoCoreService_GitLibraryInstallServer) error { +func (UnimplementedArduinoCoreServiceServer) GitLibraryInstall(*GitLibraryInstallRequest, grpc.ServerStreamingServer[GitLibraryInstallResponse]) error { return status.Errorf(codes.Unimplemented, "method GitLibraryInstall not implemented") } -func (UnimplementedArduinoCoreServiceServer) LibraryUninstall(*LibraryUninstallRequest, ArduinoCoreService_LibraryUninstallServer) error { +func (UnimplementedArduinoCoreServiceServer) LibraryUninstall(*LibraryUninstallRequest, grpc.ServerStreamingServer[LibraryUninstallResponse]) error { return status.Errorf(codes.Unimplemented, "method LibraryUninstall not implemented") } -func (UnimplementedArduinoCoreServiceServer) LibraryUpgradeAll(*LibraryUpgradeAllRequest, ArduinoCoreService_LibraryUpgradeAllServer) error { +func (UnimplementedArduinoCoreServiceServer) LibraryUpgradeAll(*LibraryUpgradeAllRequest, grpc.ServerStreamingServer[LibraryUpgradeAllResponse]) error { return status.Errorf(codes.Unimplemented, "method LibraryUpgradeAll not implemented") } func (UnimplementedArduinoCoreServiceServer) LibraryResolveDependencies(context.Context, *LibraryResolveDependenciesRequest) (*LibraryResolveDependenciesResponse, error) { @@ -1241,19 +1123,47 @@ func (UnimplementedArduinoCoreServiceServer) LibrarySearch(context.Context, *Lib func (UnimplementedArduinoCoreServiceServer) LibraryList(context.Context, *LibraryListRequest) (*LibraryListResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method LibraryList not implemented") } -func (UnimplementedArduinoCoreServiceServer) Monitor(ArduinoCoreService_MonitorServer) error { +func (UnimplementedArduinoCoreServiceServer) Monitor(grpc.BidiStreamingServer[MonitorRequest, MonitorResponse]) error { return status.Errorf(codes.Unimplemented, "method Monitor not implemented") } func (UnimplementedArduinoCoreServiceServer) EnumerateMonitorPortSettings(context.Context, *EnumerateMonitorPortSettingsRequest) (*EnumerateMonitorPortSettingsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EnumerateMonitorPortSettings not implemented") } -func (UnimplementedArduinoCoreServiceServer) Debug(ArduinoCoreService_DebugServer) error { +func (UnimplementedArduinoCoreServiceServer) Debug(grpc.BidiStreamingServer[DebugRequest, DebugResponse]) error { return status.Errorf(codes.Unimplemented, "method Debug not implemented") } +func (UnimplementedArduinoCoreServiceServer) IsDebugSupported(context.Context, *IsDebugSupportedRequest) (*IsDebugSupportedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IsDebugSupported not implemented") +} func (UnimplementedArduinoCoreServiceServer) GetDebugConfig(context.Context, *GetDebugConfigRequest) (*GetDebugConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDebugConfig not implemented") } +func (UnimplementedArduinoCoreServiceServer) CheckForArduinoCLIUpdates(context.Context, *CheckForArduinoCLIUpdatesRequest) (*CheckForArduinoCLIUpdatesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckForArduinoCLIUpdates not implemented") +} +func (UnimplementedArduinoCoreServiceServer) CleanDownloadCacheDirectory(context.Context, *CleanDownloadCacheDirectoryRequest) (*CleanDownloadCacheDirectoryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CleanDownloadCacheDirectory not implemented") +} +func (UnimplementedArduinoCoreServiceServer) ConfigurationSave(context.Context, *ConfigurationSaveRequest) (*ConfigurationSaveResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConfigurationSave not implemented") +} +func (UnimplementedArduinoCoreServiceServer) ConfigurationOpen(context.Context, *ConfigurationOpenRequest) (*ConfigurationOpenResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConfigurationOpen not implemented") +} +func (UnimplementedArduinoCoreServiceServer) ConfigurationGet(context.Context, *ConfigurationGetRequest) (*ConfigurationGetResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConfigurationGet not implemented") +} +func (UnimplementedArduinoCoreServiceServer) SettingsEnumerate(context.Context, *SettingsEnumerateRequest) (*SettingsEnumerateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SettingsEnumerate not implemented") +} +func (UnimplementedArduinoCoreServiceServer) SettingsGetValue(context.Context, *SettingsGetValueRequest) (*SettingsGetValueResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SettingsGetValue not implemented") +} +func (UnimplementedArduinoCoreServiceServer) SettingsSetValue(context.Context, *SettingsSetValueRequest) (*SettingsSetValueResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SettingsSetValue not implemented") +} func (UnimplementedArduinoCoreServiceServer) mustEmbedUnimplementedArduinoCoreServiceServer() {} +func (UnimplementedArduinoCoreServiceServer) testEmbeddedByValue() {} // UnsafeArduinoCoreServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ArduinoCoreServiceServer will @@ -1263,6 +1173,13 @@ type UnsafeArduinoCoreServiceServer interface { } func RegisterArduinoCoreServiceServer(s grpc.ServiceRegistrar, srv ArduinoCoreServiceServer) { + // If the following call pancis, it indicates UnimplementedArduinoCoreServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&ArduinoCoreService_ServiceDesc, srv) } @@ -1289,21 +1206,11 @@ func _ArduinoCoreService_Init_Handler(srv interface{}, stream grpc.ServerStream) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).Init(m, &arduinoCoreServiceInitServer{stream}) -} - -type ArduinoCoreService_InitServer interface { - Send(*InitResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceInitServer struct { - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).Init(m, &grpc.GenericServerStream[InitRequest, InitResponse]{ServerStream: stream}) } -func (x *arduinoCoreServiceInitServer) Send(m *InitResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_InitServer = grpc.ServerStreamingServer[InitResponse] func _ArduinoCoreService_Destroy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DestroyRequest) @@ -1328,42 +1235,22 @@ func _ArduinoCoreService_UpdateIndex_Handler(srv interface{}, stream grpc.Server if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).UpdateIndex(m, &arduinoCoreServiceUpdateIndexServer{stream}) + return srv.(ArduinoCoreServiceServer).UpdateIndex(m, &grpc.GenericServerStream[UpdateIndexRequest, UpdateIndexResponse]{ServerStream: stream}) } -type ArduinoCoreService_UpdateIndexServer interface { - Send(*UpdateIndexResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceUpdateIndexServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceUpdateIndexServer) Send(m *UpdateIndexResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_UpdateIndexServer = grpc.ServerStreamingServer[UpdateIndexResponse] func _ArduinoCoreService_UpdateLibrariesIndex_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(UpdateLibrariesIndexRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).UpdateLibrariesIndex(m, &arduinoCoreServiceUpdateLibrariesIndexServer{stream}) + return srv.(ArduinoCoreServiceServer).UpdateLibrariesIndex(m, &grpc.GenericServerStream[UpdateLibrariesIndexRequest, UpdateLibrariesIndexResponse]{ServerStream: stream}) } -type ArduinoCoreService_UpdateLibrariesIndexServer interface { - Send(*UpdateLibrariesIndexResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceUpdateLibrariesIndexServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceUpdateLibrariesIndexServer) Send(m *UpdateLibrariesIndexResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_UpdateLibrariesIndexServer = grpc.ServerStreamingServer[UpdateLibrariesIndexResponse] func _ArduinoCoreService_Version_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(VersionRequest) @@ -1527,173 +1414,111 @@ func _ArduinoCoreService_BoardSearch_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _ArduinoCoreService_BoardIdentify_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BoardIdentifyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).BoardIdentify(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_BoardIdentify_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).BoardIdentify(ctx, req.(*BoardIdentifyRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ArduinoCoreService_BoardListWatch_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(BoardListWatchRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).BoardListWatch(m, &arduinoCoreServiceBoardListWatchServer{stream}) + return srv.(ArduinoCoreServiceServer).BoardListWatch(m, &grpc.GenericServerStream[BoardListWatchRequest, BoardListWatchResponse]{ServerStream: stream}) } -type ArduinoCoreService_BoardListWatchServer interface { - Send(*BoardListWatchResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceBoardListWatchServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceBoardListWatchServer) Send(m *BoardListWatchResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_BoardListWatchServer = grpc.ServerStreamingServer[BoardListWatchResponse] func _ArduinoCoreService_Compile_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(CompileRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).Compile(m, &arduinoCoreServiceCompileServer{stream}) -} - -type ArduinoCoreService_CompileServer interface { - Send(*CompileResponse) error - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).Compile(m, &grpc.GenericServerStream[CompileRequest, CompileResponse]{ServerStream: stream}) } -type arduinoCoreServiceCompileServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceCompileServer) Send(m *CompileResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_CompileServer = grpc.ServerStreamingServer[CompileResponse] func _ArduinoCoreService_PlatformInstall_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(PlatformInstallRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).PlatformInstall(m, &arduinoCoreServicePlatformInstallServer{stream}) -} - -type ArduinoCoreService_PlatformInstallServer interface { - Send(*PlatformInstallResponse) error - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).PlatformInstall(m, &grpc.GenericServerStream[PlatformInstallRequest, PlatformInstallResponse]{ServerStream: stream}) } -type arduinoCoreServicePlatformInstallServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServicePlatformInstallServer) Send(m *PlatformInstallResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_PlatformInstallServer = grpc.ServerStreamingServer[PlatformInstallResponse] func _ArduinoCoreService_PlatformDownload_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(PlatformDownloadRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).PlatformDownload(m, &arduinoCoreServicePlatformDownloadServer{stream}) + return srv.(ArduinoCoreServiceServer).PlatformDownload(m, &grpc.GenericServerStream[PlatformDownloadRequest, PlatformDownloadResponse]{ServerStream: stream}) } -type ArduinoCoreService_PlatformDownloadServer interface { - Send(*PlatformDownloadResponse) error - grpc.ServerStream -} - -type arduinoCoreServicePlatformDownloadServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServicePlatformDownloadServer) Send(m *PlatformDownloadResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_PlatformDownloadServer = grpc.ServerStreamingServer[PlatformDownloadResponse] func _ArduinoCoreService_PlatformUninstall_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(PlatformUninstallRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).PlatformUninstall(m, &arduinoCoreServicePlatformUninstallServer{stream}) -} - -type ArduinoCoreService_PlatformUninstallServer interface { - Send(*PlatformUninstallResponse) error - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).PlatformUninstall(m, &grpc.GenericServerStream[PlatformUninstallRequest, PlatformUninstallResponse]{ServerStream: stream}) } -type arduinoCoreServicePlatformUninstallServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServicePlatformUninstallServer) Send(m *PlatformUninstallResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_PlatformUninstallServer = grpc.ServerStreamingServer[PlatformUninstallResponse] func _ArduinoCoreService_PlatformUpgrade_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(PlatformUpgradeRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).PlatformUpgrade(m, &arduinoCoreServicePlatformUpgradeServer{stream}) -} - -type ArduinoCoreService_PlatformUpgradeServer interface { - Send(*PlatformUpgradeResponse) error - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).PlatformUpgrade(m, &grpc.GenericServerStream[PlatformUpgradeRequest, PlatformUpgradeResponse]{ServerStream: stream}) } -type arduinoCoreServicePlatformUpgradeServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServicePlatformUpgradeServer) Send(m *PlatformUpgradeResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_PlatformUpgradeServer = grpc.ServerStreamingServer[PlatformUpgradeResponse] func _ArduinoCoreService_Upload_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(UploadRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).Upload(m, &arduinoCoreServiceUploadServer{stream}) + return srv.(ArduinoCoreServiceServer).Upload(m, &grpc.GenericServerStream[UploadRequest, UploadResponse]{ServerStream: stream}) } -type ArduinoCoreService_UploadServer interface { - Send(*UploadResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceUploadServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceUploadServer) Send(m *UploadResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_UploadServer = grpc.ServerStreamingServer[UploadResponse] func _ArduinoCoreService_UploadUsingProgrammer_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(UploadUsingProgrammerRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).UploadUsingProgrammer(m, &arduinoCoreServiceUploadUsingProgrammerServer{stream}) -} - -type ArduinoCoreService_UploadUsingProgrammerServer interface { - Send(*UploadUsingProgrammerResponse) error - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).UploadUsingProgrammer(m, &grpc.GenericServerStream[UploadUsingProgrammerRequest, UploadUsingProgrammerResponse]{ServerStream: stream}) } -type arduinoCoreServiceUploadUsingProgrammerServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceUploadUsingProgrammerServer) Send(m *UploadUsingProgrammerResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_UploadUsingProgrammerServer = grpc.ServerStreamingServer[UploadUsingProgrammerResponse] func _ArduinoCoreService_SupportedUserFields_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SupportedUserFieldsRequest) @@ -1736,21 +1561,11 @@ func _ArduinoCoreService_BurnBootloader_Handler(srv interface{}, stream grpc.Ser if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).BurnBootloader(m, &arduinoCoreServiceBurnBootloaderServer{stream}) -} - -type ArduinoCoreService_BurnBootloaderServer interface { - Send(*BurnBootloaderResponse) error - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).BurnBootloader(m, &grpc.GenericServerStream[BurnBootloaderRequest, BurnBootloaderResponse]{ServerStream: stream}) } -type arduinoCoreServiceBurnBootloaderServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceBurnBootloaderServer) Send(m *BurnBootloaderResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_BurnBootloaderServer = grpc.ServerStreamingServer[BurnBootloaderResponse] func _ArduinoCoreService_PlatformSearch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(PlatformSearchRequest) @@ -1770,170 +1585,82 @@ func _ArduinoCoreService_PlatformSearch_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } -func _ArduinoCoreService_PlatformList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PlatformListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ArduinoCoreServiceServer).PlatformList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: ArduinoCoreService_PlatformList_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ArduinoCoreServiceServer).PlatformList(ctx, req.(*PlatformListRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _ArduinoCoreService_LibraryDownload_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(LibraryDownloadRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).LibraryDownload(m, &arduinoCoreServiceLibraryDownloadServer{stream}) -} - -type ArduinoCoreService_LibraryDownloadServer interface { - Send(*LibraryDownloadResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceLibraryDownloadServer struct { - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).LibraryDownload(m, &grpc.GenericServerStream[LibraryDownloadRequest, LibraryDownloadResponse]{ServerStream: stream}) } -func (x *arduinoCoreServiceLibraryDownloadServer) Send(m *LibraryDownloadResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryDownloadServer = grpc.ServerStreamingServer[LibraryDownloadResponse] func _ArduinoCoreService_LibraryInstall_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(LibraryInstallRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).LibraryInstall(m, &arduinoCoreServiceLibraryInstallServer{stream}) + return srv.(ArduinoCoreServiceServer).LibraryInstall(m, &grpc.GenericServerStream[LibraryInstallRequest, LibraryInstallResponse]{ServerStream: stream}) } -type ArduinoCoreService_LibraryInstallServer interface { - Send(*LibraryInstallResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceLibraryInstallServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceLibraryInstallServer) Send(m *LibraryInstallResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryInstallServer = grpc.ServerStreamingServer[LibraryInstallResponse] func _ArduinoCoreService_LibraryUpgrade_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(LibraryUpgradeRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).LibraryUpgrade(m, &arduinoCoreServiceLibraryUpgradeServer{stream}) -} - -type ArduinoCoreService_LibraryUpgradeServer interface { - Send(*LibraryUpgradeResponse) error - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).LibraryUpgrade(m, &grpc.GenericServerStream[LibraryUpgradeRequest, LibraryUpgradeResponse]{ServerStream: stream}) } -type arduinoCoreServiceLibraryUpgradeServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceLibraryUpgradeServer) Send(m *LibraryUpgradeResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryUpgradeServer = grpc.ServerStreamingServer[LibraryUpgradeResponse] func _ArduinoCoreService_ZipLibraryInstall_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(ZipLibraryInstallRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).ZipLibraryInstall(m, &arduinoCoreServiceZipLibraryInstallServer{stream}) -} - -type ArduinoCoreService_ZipLibraryInstallServer interface { - Send(*ZipLibraryInstallResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceZipLibraryInstallServer struct { - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).ZipLibraryInstall(m, &grpc.GenericServerStream[ZipLibraryInstallRequest, ZipLibraryInstallResponse]{ServerStream: stream}) } -func (x *arduinoCoreServiceZipLibraryInstallServer) Send(m *ZipLibraryInstallResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_ZipLibraryInstallServer = grpc.ServerStreamingServer[ZipLibraryInstallResponse] func _ArduinoCoreService_GitLibraryInstall_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(GitLibraryInstallRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).GitLibraryInstall(m, &arduinoCoreServiceGitLibraryInstallServer{stream}) + return srv.(ArduinoCoreServiceServer).GitLibraryInstall(m, &grpc.GenericServerStream[GitLibraryInstallRequest, GitLibraryInstallResponse]{ServerStream: stream}) } -type ArduinoCoreService_GitLibraryInstallServer interface { - Send(*GitLibraryInstallResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceGitLibraryInstallServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceGitLibraryInstallServer) Send(m *GitLibraryInstallResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_GitLibraryInstallServer = grpc.ServerStreamingServer[GitLibraryInstallResponse] func _ArduinoCoreService_LibraryUninstall_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(LibraryUninstallRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).LibraryUninstall(m, &arduinoCoreServiceLibraryUninstallServer{stream}) -} - -type ArduinoCoreService_LibraryUninstallServer interface { - Send(*LibraryUninstallResponse) error - grpc.ServerStream + return srv.(ArduinoCoreServiceServer).LibraryUninstall(m, &grpc.GenericServerStream[LibraryUninstallRequest, LibraryUninstallResponse]{ServerStream: stream}) } -type arduinoCoreServiceLibraryUninstallServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceLibraryUninstallServer) Send(m *LibraryUninstallResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryUninstallServer = grpc.ServerStreamingServer[LibraryUninstallResponse] func _ArduinoCoreService_LibraryUpgradeAll_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(LibraryUpgradeAllRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ArduinoCoreServiceServer).LibraryUpgradeAll(m, &arduinoCoreServiceLibraryUpgradeAllServer{stream}) + return srv.(ArduinoCoreServiceServer).LibraryUpgradeAll(m, &grpc.GenericServerStream[LibraryUpgradeAllRequest, LibraryUpgradeAllResponse]{ServerStream: stream}) } -type ArduinoCoreService_LibraryUpgradeAllServer interface { - Send(*LibraryUpgradeAllResponse) error - grpc.ServerStream -} - -type arduinoCoreServiceLibraryUpgradeAllServer struct { - grpc.ServerStream -} - -func (x *arduinoCoreServiceLibraryUpgradeAllServer) Send(m *LibraryUpgradeAllResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_LibraryUpgradeAllServer = grpc.ServerStreamingServer[LibraryUpgradeAllResponse] func _ArduinoCoreService_LibraryResolveDependencies_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(LibraryResolveDependenciesRequest) @@ -1990,89 +1717,213 @@ func _ArduinoCoreService_LibraryList_Handler(srv interface{}, ctx context.Contex } func _ArduinoCoreService_Monitor_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(ArduinoCoreServiceServer).Monitor(&arduinoCoreServiceMonitorServer{stream}) + return srv.(ArduinoCoreServiceServer).Monitor(&grpc.GenericServerStream[MonitorRequest, MonitorResponse]{ServerStream: stream}) } -type ArduinoCoreService_MonitorServer interface { - Send(*MonitorResponse) error - Recv() (*MonitorRequest, error) - grpc.ServerStream +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_MonitorServer = grpc.BidiStreamingServer[MonitorRequest, MonitorResponse] + +func _ArduinoCoreService_EnumerateMonitorPortSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EnumerateMonitorPortSettingsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).EnumerateMonitorPortSettings(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_EnumerateMonitorPortSettings_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).EnumerateMonitorPortSettings(ctx, req.(*EnumerateMonitorPortSettingsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArduinoCoreService_Debug_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ArduinoCoreServiceServer).Debug(&grpc.GenericServerStream[DebugRequest, DebugResponse]{ServerStream: stream}) } -type arduinoCoreServiceMonitorServer struct { - grpc.ServerStream +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type ArduinoCoreService_DebugServer = grpc.BidiStreamingServer[DebugRequest, DebugResponse] + +func _ArduinoCoreService_IsDebugSupported_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IsDebugSupportedRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).IsDebugSupported(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_IsDebugSupported_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).IsDebugSupported(ctx, req.(*IsDebugSupportedRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *arduinoCoreServiceMonitorServer) Send(m *MonitorResponse) error { - return x.ServerStream.SendMsg(m) +func _ArduinoCoreService_GetDebugConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDebugConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).GetDebugConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_GetDebugConfig_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).GetDebugConfig(ctx, req.(*GetDebugConfigRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *arduinoCoreServiceMonitorServer) Recv() (*MonitorRequest, error) { - m := new(MonitorRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { +func _ArduinoCoreService_CheckForArduinoCLIUpdates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckForArduinoCLIUpdatesRequest) + if err := dec(in); err != nil { return nil, err } - return m, nil + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).CheckForArduinoCLIUpdates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_CheckForArduinoCLIUpdates_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).CheckForArduinoCLIUpdates(ctx, req.(*CheckForArduinoCLIUpdatesRequest)) + } + return interceptor(ctx, in, info, handler) } -func _ArduinoCoreService_EnumerateMonitorPortSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(EnumerateMonitorPortSettingsRequest) +func _ArduinoCoreService_CleanDownloadCacheDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CleanDownloadCacheDirectoryRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ArduinoCoreServiceServer).EnumerateMonitorPortSettings(ctx, in) + return srv.(ArduinoCoreServiceServer).CleanDownloadCacheDirectory(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: ArduinoCoreService_EnumerateMonitorPortSettings_FullMethodName, + FullMethod: ArduinoCoreService_CleanDownloadCacheDirectory_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ArduinoCoreServiceServer).EnumerateMonitorPortSettings(ctx, req.(*EnumerateMonitorPortSettingsRequest)) + return srv.(ArduinoCoreServiceServer).CleanDownloadCacheDirectory(ctx, req.(*CleanDownloadCacheDirectoryRequest)) } return interceptor(ctx, in, info, handler) } -func _ArduinoCoreService_Debug_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(ArduinoCoreServiceServer).Debug(&arduinoCoreServiceDebugServer{stream}) +func _ArduinoCoreService_ConfigurationSave_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ConfigurationSaveRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).ConfigurationSave(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_ConfigurationSave_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).ConfigurationSave(ctx, req.(*ConfigurationSaveRequest)) + } + return interceptor(ctx, in, info, handler) } -type ArduinoCoreService_DebugServer interface { - Send(*DebugResponse) error - Recv() (*DebugRequest, error) - grpc.ServerStream +func _ArduinoCoreService_ConfigurationOpen_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ConfigurationOpenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).ConfigurationOpen(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_ConfigurationOpen_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).ConfigurationOpen(ctx, req.(*ConfigurationOpenRequest)) + } + return interceptor(ctx, in, info, handler) } -type arduinoCoreServiceDebugServer struct { - grpc.ServerStream +func _ArduinoCoreService_ConfigurationGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ConfigurationGetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).ConfigurationGet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_ConfigurationGet_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).ConfigurationGet(ctx, req.(*ConfigurationGetRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *arduinoCoreServiceDebugServer) Send(m *DebugResponse) error { - return x.ServerStream.SendMsg(m) +func _ArduinoCoreService_SettingsEnumerate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SettingsEnumerateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).SettingsEnumerate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_SettingsEnumerate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).SettingsEnumerate(ctx, req.(*SettingsEnumerateRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *arduinoCoreServiceDebugServer) Recv() (*DebugRequest, error) { - m := new(DebugRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { +func _ArduinoCoreService_SettingsGetValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SettingsGetValueRequest) + if err := dec(in); err != nil { return nil, err } - return m, nil + if interceptor == nil { + return srv.(ArduinoCoreServiceServer).SettingsGetValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ArduinoCoreService_SettingsGetValue_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArduinoCoreServiceServer).SettingsGetValue(ctx, req.(*SettingsGetValueRequest)) + } + return interceptor(ctx, in, info, handler) } -func _ArduinoCoreService_GetDebugConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDebugConfigRequest) +func _ArduinoCoreService_SettingsSetValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SettingsSetValueRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ArduinoCoreServiceServer).GetDebugConfig(ctx, in) + return srv.(ArduinoCoreServiceServer).SettingsSetValue(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: ArduinoCoreService_GetDebugConfig_FullMethodName, + FullMethod: ArduinoCoreService_SettingsSetValue_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ArduinoCoreServiceServer).GetDebugConfig(ctx, req.(*GetDebugConfigRequest)) + return srv.(ArduinoCoreServiceServer).SettingsSetValue(ctx, req.(*SettingsSetValueRequest)) } return interceptor(ctx, in, info, handler) } @@ -2128,6 +1979,10 @@ var ArduinoCoreService_ServiceDesc = grpc.ServiceDesc{ MethodName: "BoardSearch", Handler: _ArduinoCoreService_BoardSearch_Handler, }, + { + MethodName: "BoardIdentify", + Handler: _ArduinoCoreService_BoardIdentify_Handler, + }, { MethodName: "SupportedUserFields", Handler: _ArduinoCoreService_SupportedUserFields_Handler, @@ -2140,10 +1995,6 @@ var ArduinoCoreService_ServiceDesc = grpc.ServiceDesc{ MethodName: "PlatformSearch", Handler: _ArduinoCoreService_PlatformSearch_Handler, }, - { - MethodName: "PlatformList", - Handler: _ArduinoCoreService_PlatformList_Handler, - }, { MethodName: "LibraryResolveDependencies", Handler: _ArduinoCoreService_LibraryResolveDependencies_Handler, @@ -2160,10 +2011,46 @@ var ArduinoCoreService_ServiceDesc = grpc.ServiceDesc{ MethodName: "EnumerateMonitorPortSettings", Handler: _ArduinoCoreService_EnumerateMonitorPortSettings_Handler, }, + { + MethodName: "IsDebugSupported", + Handler: _ArduinoCoreService_IsDebugSupported_Handler, + }, { MethodName: "GetDebugConfig", Handler: _ArduinoCoreService_GetDebugConfig_Handler, }, + { + MethodName: "CheckForArduinoCLIUpdates", + Handler: _ArduinoCoreService_CheckForArduinoCLIUpdates_Handler, + }, + { + MethodName: "CleanDownloadCacheDirectory", + Handler: _ArduinoCoreService_CleanDownloadCacheDirectory_Handler, + }, + { + MethodName: "ConfigurationSave", + Handler: _ArduinoCoreService_ConfigurationSave_Handler, + }, + { + MethodName: "ConfigurationOpen", + Handler: _ArduinoCoreService_ConfigurationOpen_Handler, + }, + { + MethodName: "ConfigurationGet", + Handler: _ArduinoCoreService_ConfigurationGet_Handler, + }, + { + MethodName: "SettingsEnumerate", + Handler: _ArduinoCoreService_SettingsEnumerate_Handler, + }, + { + MethodName: "SettingsGetValue", + Handler: _ArduinoCoreService_SettingsGetValue_Handler, + }, + { + MethodName: "SettingsSetValue", + Handler: _ArduinoCoreService_SettingsSetValue_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/rpc/cc/arduino/cli/commands/v1/common.go b/rpc/cc/arduino/cli/commands/v1/common.go index 9ef27da3e58..61a6f7a3d89 100644 --- a/rpc/cc/arduino/cli/commands/v1/common.go +++ b/rpc/cc/arduino/cli/commands/v1/common.go @@ -1,20 +1,29 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. package commands +import ( + "sort" + + "github.com/arduino/go-properties-orderedmap" + discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2" + semver "go.bug.st/relaxed-semver" +) + // DownloadProgressCB is a callback to get updates on download progress type DownloadProgressCB func(curr *DownloadProgress) @@ -56,3 +65,73 @@ func (d DownloadProgressCB) End(success bool, message string) { // TaskProgressCB is a callback to receive progress messages type TaskProgressCB func(msg *TaskProgress) + +// InstanceCommand is an interface that represents a gRPC command with +// a gRPC Instance. +type InstanceCommand interface { + GetInstance() *Instance +} + +// GetLatestRelease returns the latest release in this PlatformSummary, +// or nil if not available. +func (s *PlatformSummary) GetLatestRelease() *PlatformRelease { + if s.GetLatestVersion() == "" { + return nil + } + return s.GetReleases()[s.GetLatestVersion()] +} + +// GetInstalledRelease returns the latest release in this PlatformSummary, +// or nil if not available. +func (s *PlatformSummary) GetInstalledRelease() *PlatformRelease { + if s.GetInstalledVersion() == "" { + return nil + } + return s.GetReleases()[s.GetInstalledVersion()] +} + +// GetSortedReleases returns the releases in order of version. +func (s *PlatformSummary) GetSortedReleases() []*PlatformRelease { + res := []*PlatformRelease{} + for _, release := range s.GetReleases() { + res = append(res, release) + } + sort.SliceStable(res, func(i, j int) bool { + return semver.ParseRelaxed(res[i].GetVersion()).LessThan(semver.ParseRelaxed(res[j].GetVersion())) + }) + return res +} + +// DiscoveryPortToRPC converts a *discovery.Port into an *rpc.Port +func DiscoveryPortToRPC(p *discovery.Port) *Port { + props := p.Properties + if props == nil { + props = properties.NewMap() + } + return &Port{ + Address: p.Address, + Label: p.AddressLabel, + Protocol: p.Protocol, + ProtocolLabel: p.ProtocolLabel, + HardwareId: p.HardwareID, + Properties: props.AsMap(), + } +} + +// DiscoveryPortFromRPCPort converts an *rpc.Port into a *discovery.Port +func DiscoveryPortFromRPCPort(o *Port) (p *discovery.Port) { + if o == nil { + return nil + } + res := &discovery.Port{ + Address: o.GetAddress(), + AddressLabel: o.GetLabel(), + Protocol: o.GetProtocol(), + ProtocolLabel: o.GetProtocolLabel(), + HardwareID: o.GetHardwareId(), + } + if o.GetProperties() != nil { + res.Properties = properties.NewFromHashmap(o.GetProperties()) + } + return res +} diff --git a/rpc/cc/arduino/cli/commands/v1/common.pb.go b/rpc/cc/arduino/cli/commands/v1/common.pb.go index 90453bd45ea..1d8d47f0af0 100644 --- a/rpc/cc/arduino/cli/commands/v1/common.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/common.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/common.proto package commands @@ -161,14 +162,17 @@ type isDownloadProgress_Message interface { } type DownloadProgress_Start struct { + // Sent when a download is started. Start *DownloadProgressStart `protobuf:"bytes,1,opt,name=start,proto3,oneof"` } type DownloadProgress_Update struct { + // Progress updates for a download. Update *DownloadProgressUpdate `protobuf:"bytes,2,opt,name=update,proto3,oneof"` } type DownloadProgress_End struct { + // Sent when a download is finished or failed. End *DownloadProgressEnd `protobuf:"bytes,3,opt,name=end,proto3,oneof"` } @@ -297,10 +301,10 @@ type DownloadProgressEnd struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // True if the download is successful + // True if the download is successful. Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` // Info or error message, depending on the value of 'success'. Some examples: - // "File xxx already downloaded" or "Connection timeout" + // "File xxx already downloaded" or "Connection timeout". Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` } @@ -361,7 +365,7 @@ type TaskProgress struct { Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` // Whether the task is complete. Completed bool `protobuf:"varint,3,opt,name=completed,proto3" json:"completed,omitempty"` - // Amount in percent of the task completion (optional) + // Amount in percent of the task completion (optional). Percent float32 `protobuf:"fixed32,4,opt,name=percent,proto3" json:"percent,omitempty"` } @@ -430,9 +434,12 @@ type Programmer struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Platform name. Platform string `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // Programmer ID. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + // Programmer name. + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` } func (x *Programmer) Reset() { @@ -488,53 +495,63 @@ func (x *Programmer) GetName() string { return "" } +// MissingProgrammerError is a status error detail that is returned when +// the operation can not be completed due to a missing programmer argument. +type MissingProgrammerError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MissingProgrammerError) Reset() { + *x = MissingProgrammerError{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MissingProgrammerError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MissingProgrammerError) ProtoMessage() {} + +func (x *MissingProgrammerError) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MissingProgrammerError.ProtoReflect.Descriptor instead. +func (*MissingProgrammerError) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{7} +} + +// Platform is a structure containing all the information about a single +// platform release. type Platform struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Platform ID (e.g., `arduino:avr`). - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Version of the platform. - Installed string `protobuf:"bytes,2,opt,name=installed,proto3" json:"installed,omitempty"` - // Newest available version of the platform. - Latest string `protobuf:"bytes,3,opt,name=latest,proto3" json:"latest,omitempty"` - // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // Maintainer of the platform's package. - Maintainer string `protobuf:"bytes,5,opt,name=maintainer,proto3" json:"maintainer,omitempty"` - // A URL provided by the author of the platform's package, intended to point - // to their website. - Website string `protobuf:"bytes,6,opt,name=website,proto3" json:"website,omitempty"` - // Email of the maintainer of the platform's package. - Email string `protobuf:"bytes,7,opt,name=email,proto3" json:"email,omitempty"` - // List of boards provided by the platform. If the platform is installed, - // this is the boards listed in the platform's boards.txt. If the platform is - // not installed, this is an arbitrary list of board names provided by the - // platform author for display and may not match boards.txt. - Boards []*Board `protobuf:"bytes,8,rep,name=boards,proto3" json:"boards,omitempty"` - // If true this Platform has been installed manually in the user' sketchbook - // hardware folder - ManuallyInstalled bool `protobuf:"varint,9,opt,name=manually_installed,json=manuallyInstalled,proto3" json:"manually_installed,omitempty"` - // If true this Platform has been deprecated - Deprecated bool `protobuf:"varint,10,opt,name=deprecated,proto3" json:"deprecated,omitempty"` - // Type of the platform. - Type []string `protobuf:"bytes,11,rep,name=type,proto3" json:"type,omitempty"` - // A URL provided by the author of the platform's package, intended to point - // to their online help service. - Help *HelpResources `protobuf:"bytes,12,opt,name=help,proto3" json:"help,omitempty"` - // If true the platform is indexed - Indexed bool `protobuf:"varint,13,opt,name=indexed,proto3" json:"indexed,omitempty"` - // This field is true when the platform is installed with the Arduino IDE 1.8. - // If the platform is also not indexed it may fail to work correctly in some - // circumstances, and it may need to be re-installed. - MissingMetadata bool `protobuf:"varint,14,opt,name=missing_metadata,json=missingMetadata,proto3" json:"missing_metadata,omitempty"` + // Generic information about a platform. + Metadata *PlatformMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Information about a specific release of a platform. + Release *PlatformRelease `protobuf:"bytes,2,opt,name=release,proto3" json:"release,omitempty"` } func (x *Platform) Reset() { *x = Platform{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -547,7 +564,7 @@ func (x *Platform) String() string { func (*Platform) ProtoMessage() {} func (x *Platform) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -560,103 +577,334 @@ func (x *Platform) ProtoReflect() protoreflect.Message { // Deprecated: Use Platform.ProtoReflect.Descriptor instead. func (*Platform) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{7} + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{8} } -func (x *Platform) GetId() string { +func (x *Platform) GetMetadata() *PlatformMetadata { if x != nil { - return x.Id + return x.Metadata } - return "" + return nil } -func (x *Platform) GetInstalled() string { +func (x *Platform) GetRelease() *PlatformRelease { if x != nil { - return x.Installed + return x.Release + } + return nil +} + +// PlatformSummary is a structure containing all the information about +// a platform and all its available releases. +type PlatformSummary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Generic information about a platform. + Metadata *PlatformMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Maps version to the corresponding PlatformRelease. + Releases map[string]*PlatformRelease `protobuf:"bytes,2,rep,name=releases,proto3" json:"releases,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The installed version of the platform, or empty string if none installed. + InstalledVersion string `protobuf:"bytes,3,opt,name=installed_version,json=installedVersion,proto3" json:"installed_version,omitempty"` + // The latest available version of the platform that can be installable, or + // empty if none available. + LatestVersion string `protobuf:"bytes,4,opt,name=latest_version,json=latestVersion,proto3" json:"latest_version,omitempty"` +} + +func (x *PlatformSummary) Reset() { + *x = PlatformSummary{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlatformSummary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformSummary) ProtoMessage() {} + +func (x *PlatformSummary) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformSummary.ProtoReflect.Descriptor instead. +func (*PlatformSummary) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{9} +} + +func (x *PlatformSummary) GetMetadata() *PlatformMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *PlatformSummary) GetReleases() map[string]*PlatformRelease { + if x != nil { + return x.Releases + } + return nil +} + +func (x *PlatformSummary) GetInstalledVersion() string { + if x != nil { + return x.InstalledVersion } return "" } -func (x *Platform) GetLatest() string { +func (x *PlatformSummary) GetLatestVersion() string { if x != nil { - return x.Latest + return x.LatestVersion } return "" } -func (x *Platform) GetName() string { +// PlatformMetadata contains generic information about a platform (not +// correlated to a specific release). +type PlatformMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Platform ID (e.g., `arduino:avr`). + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Maintainer of the platform's package. + Maintainer string `protobuf:"bytes,2,opt,name=maintainer,proto3" json:"maintainer,omitempty"` + // A URL provided by the author of the platform's package, intended to point + // to their website. + Website string `protobuf:"bytes,3,opt,name=website,proto3" json:"website,omitempty"` + // Email of the maintainer of the platform's package. + Email string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"` + // If true this Platform has been installed manually in the user' sketchbook + // hardware folder. + ManuallyInstalled bool `protobuf:"varint,5,opt,name=manually_installed,json=manuallyInstalled,proto3" json:"manually_installed,omitempty"` + // True if the latest release of this Platform has been deprecated. + Deprecated bool `protobuf:"varint,6,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + // If true the platform is indexed. + Indexed bool `protobuf:"varint,7,opt,name=indexed,proto3" json:"indexed,omitempty"` +} + +func (x *PlatformMetadata) Reset() { + *x = PlatformMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlatformMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformMetadata) ProtoMessage() {} + +func (x *PlatformMetadata) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformMetadata.ProtoReflect.Descriptor instead. +func (*PlatformMetadata) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{10} +} + +func (x *PlatformMetadata) GetId() string { if x != nil { - return x.Name + return x.Id } return "" } -func (x *Platform) GetMaintainer() string { +func (x *PlatformMetadata) GetMaintainer() string { if x != nil { return x.Maintainer } return "" } -func (x *Platform) GetWebsite() string { +func (x *PlatformMetadata) GetWebsite() string { if x != nil { return x.Website } return "" } -func (x *Platform) GetEmail() string { +func (x *PlatformMetadata) GetEmail() string { if x != nil { return x.Email } return "" } -func (x *Platform) GetBoards() []*Board { +func (x *PlatformMetadata) GetManuallyInstalled() bool { if x != nil { - return x.Boards + return x.ManuallyInstalled } - return nil + return false } -func (x *Platform) GetManuallyInstalled() bool { +func (x *PlatformMetadata) GetDeprecated() bool { if x != nil { - return x.ManuallyInstalled + return x.Deprecated } return false } -func (x *Platform) GetDeprecated() bool { +func (x *PlatformMetadata) GetIndexed() bool { if x != nil { - return x.Deprecated + return x.Indexed + } + return false +} + +// PlatformRelease contains information about a specific release of a platform. +type PlatformRelease struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Version of the platform release. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Type of the platform. + Types []string `protobuf:"bytes,3,rep,name=types,proto3" json:"types,omitempty"` + // True if the platform is installed. + Installed bool `protobuf:"varint,4,opt,name=installed,proto3" json:"installed,omitempty"` + // List of boards provided by the platform. If the platform is installed, + // this is the boards listed in the platform's boards.txt. If the platform is + // not installed, this is an arbitrary list of board names provided by the + // platform author for display and may not match boards.txt. + Boards []*Board `protobuf:"bytes,5,rep,name=boards,proto3" json:"boards,omitempty"` + // A URL provided by the author of the platform's package, intended to point + // to their online help service. + Help *HelpResources `protobuf:"bytes,6,opt,name=help,proto3" json:"help,omitempty"` + // This field is true if the platform is missing installation metadata (this + // happens if the platform has been installed with the legacy Arduino IDE + // <=1.8.x). If the platform miss metadata and it's not indexed through a + // package index, it may fail to work correctly in some circumstances, and it + // may need to be reinstalled. This should be evaluated only when the + // PlatformRelease is `Installed` otherwise is an undefined behaviour. + MissingMetadata bool `protobuf:"varint,7,opt,name=missing_metadata,json=missingMetadata,proto3" json:"missing_metadata,omitempty"` + // True this release is deprecated. + Deprecated bool `protobuf:"varint,8,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + // True if the platform dependencies are available for the current OS/ARCH. + // This also means that the platform is installable. + Compatible bool `protobuf:"varint,9,opt,name=compatible,proto3" json:"compatible,omitempty"` +} + +func (x *PlatformRelease) Reset() { + *x = PlatformRelease{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlatformRelease) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformRelease) ProtoMessage() {} + +func (x *PlatformRelease) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformRelease.ProtoReflect.Descriptor instead. +func (*PlatformRelease) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{11} +} + +func (x *PlatformRelease) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PlatformRelease) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *PlatformRelease) GetTypes() []string { + if x != nil { + return x.Types + } + return nil +} + +func (x *PlatformRelease) GetInstalled() bool { + if x != nil { + return x.Installed } return false } -func (x *Platform) GetType() []string { +func (x *PlatformRelease) GetBoards() []*Board { if x != nil { - return x.Type + return x.Boards } return nil } -func (x *Platform) GetHelp() *HelpResources { +func (x *PlatformRelease) GetHelp() *HelpResources { if x != nil { return x.Help } return nil } -func (x *Platform) GetIndexed() bool { +func (x *PlatformRelease) GetMissingMetadata() bool { if x != nil { - return x.Indexed + return x.MissingMetadata } return false } -func (x *Platform) GetMissingMetadata() bool { +func (x *PlatformRelease) GetDeprecated() bool { if x != nil { - return x.MissingMetadata + return x.Deprecated + } + return false +} + +func (x *PlatformRelease) GetCompatible() bool { + if x != nil { + return x.Compatible } return false } @@ -670,16 +918,16 @@ type InstalledPlatformReference struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Version of the platform. Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - // Installation directory of the platform + // Installation directory of the platform. InstallDir string `protobuf:"bytes,3,opt,name=install_dir,json=installDir,proto3" json:"install_dir,omitempty"` - // 3rd party platform URL + // 3rd party platform URL. PackageUrl string `protobuf:"bytes,4,opt,name=package_url,json=packageUrl,proto3" json:"package_url,omitempty"` } func (x *InstalledPlatformReference) Reset() { *x = InstalledPlatformReference{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -692,7 +940,7 @@ func (x *InstalledPlatformReference) String() string { func (*InstalledPlatformReference) ProtoMessage() {} func (x *InstalledPlatformReference) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -705,7 +953,7 @@ func (x *InstalledPlatformReference) ProtoReflect() protoreflect.Message { // Deprecated: Use InstalledPlatformReference.ProtoReflect.Descriptor instead. func (*InstalledPlatformReference) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{8} + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{12} } func (x *InstalledPlatformReference) GetId() string { @@ -751,7 +999,7 @@ type Board struct { func (x *Board) Reset() { *x = Board{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -764,7 +1012,7 @@ func (x *Board) String() string { func (*Board) ProtoMessage() {} func (x *Board) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -777,7 +1025,7 @@ func (x *Board) ProtoReflect() protoreflect.Message { // Deprecated: Use Board.ProtoReflect.Descriptor instead. func (*Board) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{9} + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{13} } func (x *Board) GetName() string { @@ -794,34 +1042,33 @@ func (x *Board) GetFqbn() string { return "" } -type Profile struct { +type HelpResources struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Name used to identify the profile within the sketch. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // FQBN specified in the profile. - Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // A URL provided by the author of the platform's package, intended to point + // to their online help service. + Online string `protobuf:"bytes,1,opt,name=online,proto3" json:"online,omitempty"` } -func (x *Profile) Reset() { - *x = Profile{} +func (x *HelpResources) Reset() { + *x = HelpResources{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Profile) String() string { +func (x *HelpResources) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Profile) ProtoMessage() {} +func (*HelpResources) ProtoMessage() {} -func (x *Profile) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10] +func (x *HelpResources) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -832,52 +1079,192 @@ func (x *Profile) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Profile.ProtoReflect.Descriptor instead. -func (*Profile) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{10} -} - -func (x *Profile) GetName() string { - if x != nil { - return x.Name - } - return "" +// Deprecated: Use HelpResources.ProtoReflect.Descriptor instead. +func (*HelpResources) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{14} } -func (x *Profile) GetFqbn() string { +func (x *HelpResources) GetOnline() string { if x != nil { - return x.Fqbn + return x.Online } return "" } -type HelpResources struct { +type Sketch struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // A URL provided by the author of the platform's package, intended to point - // to their online help service. - Online string `protobuf:"bytes,1,opt,name=online,proto3" json:"online,omitempty"` + // Absolute path to a main sketch files. + MainFile string `protobuf:"bytes,1,opt,name=main_file,json=mainFile,proto3" json:"main_file,omitempty"` + // Absolute path to folder that contains main_file. + LocationPath string `protobuf:"bytes,2,opt,name=location_path,json=locationPath,proto3" json:"location_path,omitempty"` + // List of absolute paths to other sketch files. + OtherSketchFiles []string `protobuf:"bytes,3,rep,name=other_sketch_files,json=otherSketchFiles,proto3" json:"other_sketch_files,omitempty"` + // List of absolute paths to additional sketch files. + AdditionalFiles []string `protobuf:"bytes,4,rep,name=additional_files,json=additionalFiles,proto3" json:"additional_files,omitempty"` + // List of absolute paths to supported files in the sketch root folder, main + // file excluded. + RootFolderFiles []string `protobuf:"bytes,5,rep,name=root_folder_files,json=rootFolderFiles,proto3" json:"root_folder_files,omitempty"` + // Default FQBN set in project file (sketch.yaml). + DefaultFqbn string `protobuf:"bytes,6,opt,name=default_fqbn,json=defaultFqbn,proto3" json:"default_fqbn,omitempty"` + // Default Port set in project file (sketch.yaml). + DefaultPort string `protobuf:"bytes,7,opt,name=default_port,json=defaultPort,proto3" json:"default_port,omitempty"` + // Default Protocol set in project file (sketch.yaml). + DefaultProtocol string `protobuf:"bytes,8,opt,name=default_protocol,json=defaultProtocol,proto3" json:"default_protocol,omitempty"` + // List of profiles present in the project file (sketch.yaml). + Profiles []*SketchProfile `protobuf:"bytes,9,rep,name=profiles,proto3" json:"profiles,omitempty"` + // Default profile set in the project file (sketch.yaml). + DefaultProfile *SketchProfile `protobuf:"bytes,10,opt,name=default_profile,json=defaultProfile,proto3" json:"default_profile,omitempty"` + // Default Programmer set in project file (sketch.yaml). + DefaultProgrammer string `protobuf:"bytes,11,opt,name=default_programmer,json=defaultProgrammer,proto3" json:"default_programmer,omitempty"` + // Default Port configuration set in project file (sketch.yaml). + DefaultPortConfig *MonitorPortConfiguration `protobuf:"bytes,12,opt,name=default_port_config,json=defaultPortConfig,proto3" json:"default_port_config,omitempty"` +} + +func (x *Sketch) Reset() { + *x = Sketch{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (x *HelpResources) Reset() { - *x = HelpResources{} +func (x *Sketch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sketch) ProtoMessage() {} + +func (x *Sketch) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sketch.ProtoReflect.Descriptor instead. +func (*Sketch) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{15} +} + +func (x *Sketch) GetMainFile() string { + if x != nil { + return x.MainFile + } + return "" +} + +func (x *Sketch) GetLocationPath() string { + if x != nil { + return x.LocationPath + } + return "" +} + +func (x *Sketch) GetOtherSketchFiles() []string { + if x != nil { + return x.OtherSketchFiles + } + return nil +} + +func (x *Sketch) GetAdditionalFiles() []string { + if x != nil { + return x.AdditionalFiles + } + return nil +} + +func (x *Sketch) GetRootFolderFiles() []string { + if x != nil { + return x.RootFolderFiles + } + return nil +} + +func (x *Sketch) GetDefaultFqbn() string { + if x != nil { + return x.DefaultFqbn + } + return "" +} + +func (x *Sketch) GetDefaultPort() string { + if x != nil { + return x.DefaultPort + } + return "" +} + +func (x *Sketch) GetDefaultProtocol() string { + if x != nil { + return x.DefaultProtocol + } + return "" +} + +func (x *Sketch) GetProfiles() []*SketchProfile { + if x != nil { + return x.Profiles + } + return nil +} + +func (x *Sketch) GetDefaultProfile() *SketchProfile { + if x != nil { + return x.DefaultProfile + } + return nil +} + +func (x *Sketch) GetDefaultProgrammer() string { + if x != nil { + return x.DefaultProgrammer + } + return "" +} + +func (x *Sketch) GetDefaultPortConfig() *MonitorPortConfiguration { + if x != nil { + return x.DefaultPortConfig + } + return nil +} + +type MonitorPortConfiguration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The port configuration parameters. + Settings []*MonitorPortSetting `protobuf:"bytes,1,rep,name=settings,proto3" json:"settings,omitempty"` +} + +func (x *MonitorPortConfiguration) Reset() { + *x = MonitorPortConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11] + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *HelpResources) String() string { +func (x *MonitorPortConfiguration) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HelpResources) ProtoMessage() {} +func (*MonitorPortConfiguration) ProtoMessage() {} -func (x *HelpResources) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11] +func (x *MonitorPortConfiguration) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -888,14 +1275,164 @@ func (x *HelpResources) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use HelpResources.ProtoReflect.Descriptor instead. -func (*HelpResources) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{11} +// Deprecated: Use MonitorPortConfiguration.ProtoReflect.Descriptor instead. +func (*MonitorPortConfiguration) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{16} } -func (x *HelpResources) GetOnline() string { +func (x *MonitorPortConfiguration) GetSettings() []*MonitorPortSetting { if x != nil { - return x.Online + return x.Settings + } + return nil +} + +type MonitorPortSetting struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The setting identifier. + SettingId string `protobuf:"bytes,1,opt,name=setting_id,json=settingId,proto3" json:"setting_id,omitempty"` + // The setting value. + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *MonitorPortSetting) Reset() { + *x = MonitorPortSetting{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MonitorPortSetting) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MonitorPortSetting) ProtoMessage() {} + +func (x *MonitorPortSetting) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MonitorPortSetting.ProtoReflect.Descriptor instead. +func (*MonitorPortSetting) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{17} +} + +func (x *MonitorPortSetting) GetSettingId() string { + if x != nil { + return x.SettingId + } + return "" +} + +func (x *MonitorPortSetting) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type SketchProfile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the profile. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // FQBN used by the profile. + Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // Programmer used by the profile. + Programmer string `protobuf:"bytes,3,opt,name=programmer,proto3" json:"programmer,omitempty"` + // Default Port in this profile. + Port string `protobuf:"bytes,4,opt,name=port,proto3" json:"port,omitempty"` + // Default Port configuration set in project file (sketch.yaml). + PortConfig *MonitorPortConfiguration `protobuf:"bytes,5,opt,name=port_config,json=portConfig,proto3" json:"port_config,omitempty"` + // Default Protocol in this profile. + Protocol string `protobuf:"bytes,6,opt,name=protocol,proto3" json:"protocol,omitempty"` +} + +func (x *SketchProfile) Reset() { + *x = SketchProfile{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SketchProfile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SketchProfile) ProtoMessage() {} + +func (x *SketchProfile) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_common_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SketchProfile.ProtoReflect.Descriptor instead. +func (*SketchProfile) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP(), []int{18} +} + +func (x *SketchProfile) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SketchProfile) GetFqbn() string { + if x != nil { + return x.Fqbn + } + return "" +} + +func (x *SketchProfile) GetProgrammer() string { + if x != nil { + return x.Programmer + } + return "" +} + +func (x *SketchProfile) GetPort() string { + if x != nil { + return x.Port + } + return "" +} + +func (x *SketchProfile) GetPortConfig() *MonitorPortConfiguration { + if x != nil { + return x.PortConfig + } + return nil +} + +func (x *SketchProfile) GetProtocol() string { + if x != nil { + return x.Protocol } return "" } @@ -951,59 +1488,161 @@ var file_cc_arduino_cli_commands_v1_common_proto_rawDesc = []byte{ 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xd6, 0x03, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, - 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, - 0x39, 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, - 0x72, 0x64, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x61, - 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, - 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, - 0x04, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x4d, 0x69, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x9b, 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x48, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x45, 0x0a, 0x07, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x22, 0xf0, 0x02, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x55, + 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x68, 0x0a, 0x0d, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x12, 0x18, 0x0a, 0x07, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x88, 0x01, 0x0a, 0x1a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x22, 0x2f, 0x0a, 0x05, - 0x42, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x31, 0x0a, - 0x07, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, - 0x22, 0x27, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, - 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xdb, 0x01, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, + 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, + 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, + 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x61, 0x6e, 0x75, + 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, + 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, + 0x64, 0x22, 0xd8, 0x02, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x06, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x06, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, + 0x6c, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x04, 0x68, 0x65, 0x6c, + 0x70, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x88, 0x01, 0x0a, + 0x1a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x22, 0x2f, 0x0a, 0x05, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x27, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x70, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, + 0x65, 0x22, 0xf0, 0x04, 0x0a, 0x06, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, + 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6d, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2c, + 0x0a, 0x12, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x5f, + 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0f, 0x72, 0x6f, 0x6f, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, + 0x71, 0x62, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x46, 0x71, 0x62, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, + 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x64, + 0x0a, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, + 0x50, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x22, 0x66, 0x0a, 0x18, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, + 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x4a, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x49, 0x0a, 0x12, + 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x0d, 0x53, 0x6b, 0x65, 0x74, + 0x63, 0x68, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, + 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x55, 0x0a, 0x0b, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, + 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0a, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, + 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1018,8 +1657,8 @@ func file_cc_arduino_cli_commands_v1_common_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_common_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_cc_arduino_cli_commands_v1_common_proto_goTypes = []interface{}{ +var file_cc_arduino_cli_commands_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_cc_arduino_cli_commands_v1_common_proto_goTypes = []any{ (*Instance)(nil), // 0: cc.arduino.cli.commands.v1.Instance (*DownloadProgress)(nil), // 1: cc.arduino.cli.commands.v1.DownloadProgress (*DownloadProgressStart)(nil), // 2: cc.arduino.cli.commands.v1.DownloadProgressStart @@ -1027,23 +1666,41 @@ var file_cc_arduino_cli_commands_v1_common_proto_goTypes = []interface{}{ (*DownloadProgressEnd)(nil), // 4: cc.arduino.cli.commands.v1.DownloadProgressEnd (*TaskProgress)(nil), // 5: cc.arduino.cli.commands.v1.TaskProgress (*Programmer)(nil), // 6: cc.arduino.cli.commands.v1.Programmer - (*Platform)(nil), // 7: cc.arduino.cli.commands.v1.Platform - (*InstalledPlatformReference)(nil), // 8: cc.arduino.cli.commands.v1.InstalledPlatformReference - (*Board)(nil), // 9: cc.arduino.cli.commands.v1.Board - (*Profile)(nil), // 10: cc.arduino.cli.commands.v1.Profile - (*HelpResources)(nil), // 11: cc.arduino.cli.commands.v1.HelpResources + (*MissingProgrammerError)(nil), // 7: cc.arduino.cli.commands.v1.MissingProgrammerError + (*Platform)(nil), // 8: cc.arduino.cli.commands.v1.Platform + (*PlatformSummary)(nil), // 9: cc.arduino.cli.commands.v1.PlatformSummary + (*PlatformMetadata)(nil), // 10: cc.arduino.cli.commands.v1.PlatformMetadata + (*PlatformRelease)(nil), // 11: cc.arduino.cli.commands.v1.PlatformRelease + (*InstalledPlatformReference)(nil), // 12: cc.arduino.cli.commands.v1.InstalledPlatformReference + (*Board)(nil), // 13: cc.arduino.cli.commands.v1.Board + (*HelpResources)(nil), // 14: cc.arduino.cli.commands.v1.HelpResources + (*Sketch)(nil), // 15: cc.arduino.cli.commands.v1.Sketch + (*MonitorPortConfiguration)(nil), // 16: cc.arduino.cli.commands.v1.MonitorPortConfiguration + (*MonitorPortSetting)(nil), // 17: cc.arduino.cli.commands.v1.MonitorPortSetting + (*SketchProfile)(nil), // 18: cc.arduino.cli.commands.v1.SketchProfile + nil, // 19: cc.arduino.cli.commands.v1.PlatformSummary.ReleasesEntry } var file_cc_arduino_cli_commands_v1_common_proto_depIdxs = []int32{ 2, // 0: cc.arduino.cli.commands.v1.DownloadProgress.start:type_name -> cc.arduino.cli.commands.v1.DownloadProgressStart 3, // 1: cc.arduino.cli.commands.v1.DownloadProgress.update:type_name -> cc.arduino.cli.commands.v1.DownloadProgressUpdate 4, // 2: cc.arduino.cli.commands.v1.DownloadProgress.end:type_name -> cc.arduino.cli.commands.v1.DownloadProgressEnd - 9, // 3: cc.arduino.cli.commands.v1.Platform.boards:type_name -> cc.arduino.cli.commands.v1.Board - 11, // 4: cc.arduino.cli.commands.v1.Platform.help:type_name -> cc.arduino.cli.commands.v1.HelpResources - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 10, // 3: cc.arduino.cli.commands.v1.Platform.metadata:type_name -> cc.arduino.cli.commands.v1.PlatformMetadata + 11, // 4: cc.arduino.cli.commands.v1.Platform.release:type_name -> cc.arduino.cli.commands.v1.PlatformRelease + 10, // 5: cc.arduino.cli.commands.v1.PlatformSummary.metadata:type_name -> cc.arduino.cli.commands.v1.PlatformMetadata + 19, // 6: cc.arduino.cli.commands.v1.PlatformSummary.releases:type_name -> cc.arduino.cli.commands.v1.PlatformSummary.ReleasesEntry + 13, // 7: cc.arduino.cli.commands.v1.PlatformRelease.boards:type_name -> cc.arduino.cli.commands.v1.Board + 14, // 8: cc.arduino.cli.commands.v1.PlatformRelease.help:type_name -> cc.arduino.cli.commands.v1.HelpResources + 18, // 9: cc.arduino.cli.commands.v1.Sketch.profiles:type_name -> cc.arduino.cli.commands.v1.SketchProfile + 18, // 10: cc.arduino.cli.commands.v1.Sketch.default_profile:type_name -> cc.arduino.cli.commands.v1.SketchProfile + 16, // 11: cc.arduino.cli.commands.v1.Sketch.default_port_config:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration + 17, // 12: cc.arduino.cli.commands.v1.MonitorPortConfiguration.settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSetting + 16, // 13: cc.arduino.cli.commands.v1.SketchProfile.port_config:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration + 11, // 14: cc.arduino.cli.commands.v1.PlatformSummary.ReleasesEntry.value:type_name -> cc.arduino.cli.commands.v1.PlatformRelease + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_common_proto_init() } @@ -1052,7 +1709,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Instance); i { case 0: return &v.state @@ -1064,7 +1721,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DownloadProgress); i { case 0: return &v.state @@ -1076,7 +1733,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*DownloadProgressStart); i { case 0: return &v.state @@ -1088,7 +1745,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DownloadProgressUpdate); i { case 0: return &v.state @@ -1100,7 +1757,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DownloadProgressEnd); i { case 0: return &v.state @@ -1112,7 +1769,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*TaskProgress); i { case 0: return &v.state @@ -1124,7 +1781,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*Programmer); i { case 0: return &v.state @@ -1136,7 +1793,19 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*MissingProgrammerError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*Platform); i { case 0: return &v.state @@ -1148,7 +1817,43 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9].Exporter = func(v any, i int) any { + switch v := v.(*PlatformSummary); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10].Exporter = func(v any, i int) any { + switch v := v.(*PlatformMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11].Exporter = func(v any, i int) any { + switch v := v.(*PlatformRelease); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*InstalledPlatformReference); i { case 0: return &v.state @@ -1160,7 +1865,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*Board); i { case 0: return &v.state @@ -1172,8 +1877,8 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Profile); i { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[14].Exporter = func(v any, i int) any { + switch v := v.(*HelpResources); i { case 0: return &v.state case 1: @@ -1184,8 +1889,44 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HelpResources); i { + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[15].Exporter = func(v any, i int) any { + switch v := v.(*Sketch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[16].Exporter = func(v any, i int) any { + switch v := v.(*MonitorPortConfiguration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[17].Exporter = func(v any, i int) any { + switch v := v.(*MonitorPortSetting); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[18].Exporter = func(v any, i int) any { + switch v := v.(*SketchProfile); i { case 0: return &v.state case 1: @@ -1197,7 +1938,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { } } } - file_cc_arduino_cli_commands_v1_common_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_cc_arduino_cli_commands_v1_common_proto_msgTypes[1].OneofWrappers = []any{ (*DownloadProgress_Start)(nil), (*DownloadProgress_Update)(nil), (*DownloadProgress_End)(nil), @@ -1208,7 +1949,7 @@ func file_cc_arduino_cli_commands_v1_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_common_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 20, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/common.proto b/rpc/cc/arduino/cli/commands/v1/common.proto index 3cb0425872f..bc8ed2e7263 100644 --- a/rpc/cc/arduino/cli/commands/v1/common.proto +++ b/rpc/cc/arduino/cli/commands/v1/common.proto @@ -1,17 +1,18 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; @@ -26,8 +27,11 @@ message Instance { message DownloadProgress { oneof message { + // Sent when a download is started. DownloadProgressStart start = 1; + // Progress updates for a download. DownloadProgressUpdate update = 2; + // Sent when a download is finished or failed. DownloadProgressEnd end = 3; } } @@ -47,10 +51,10 @@ message DownloadProgressUpdate { } message DownloadProgressEnd { - // True if the download is successful + // True if the download is successful. bool success = 1; // Info or error message, depending on the value of 'success'. Some examples: - // "File xxx already downloaded" or "Connection timeout" + // "File xxx already downloaded" or "Connection timeout". string message = 2; } @@ -61,53 +65,97 @@ message TaskProgress { string message = 2; // Whether the task is complete. bool completed = 3; - // Amount in percent of the task completion (optional) + // Amount in percent of the task completion (optional). float percent = 4; } message Programmer { + // Platform name. string platform = 1; + // Programmer ID. string id = 2; + // Programmer name. string name = 3; } +// MissingProgrammerError is a status error detail that is returned when +// the operation can not be completed due to a missing programmer argument. +message MissingProgrammerError {} + +// Platform is a structure containing all the information about a single +// platform release. message Platform { + // Generic information about a platform. + PlatformMetadata metadata = 1; + // Information about a specific release of a platform. + PlatformRelease release = 2; +} + +// PlatformSummary is a structure containing all the information about +// a platform and all its available releases. +message PlatformSummary { + // Generic information about a platform. + PlatformMetadata metadata = 1; + // Maps version to the corresponding PlatformRelease. + map<string, PlatformRelease> releases = 2; + // The installed version of the platform, or empty string if none installed. + string installed_version = 3; + // The latest available version of the platform that can be installable, or + // empty if none available. + string latest_version = 4; +} + +// PlatformMetadata contains generic information about a platform (not +// correlated to a specific release). +message PlatformMetadata { // Platform ID (e.g., `arduino:avr`). string id = 1; - // Version of the platform. - string installed = 2; - // Newest available version of the platform. - string latest = 3; - // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). - string name = 4; // Maintainer of the platform's package. - string maintainer = 5; + string maintainer = 2; // A URL provided by the author of the platform's package, intended to point // to their website. - string website = 6; + string website = 3; // Email of the maintainer of the platform's package. - string email = 7; + string email = 4; + // If true this Platform has been installed manually in the user' sketchbook + // hardware folder. + bool manually_installed = 5; + // True if the latest release of this Platform has been deprecated. + bool deprecated = 6; + // If true the platform is indexed. + bool indexed = 7; +} + +// PlatformRelease contains information about a specific release of a platform. +message PlatformRelease { + // Name used to identify the platform to humans (e.g., "Arduino AVR Boards"). + string name = 1; + // Version of the platform release. + string version = 2; + // Type of the platform. + repeated string types = 3; + // True if the platform is installed. + bool installed = 4; // List of boards provided by the platform. If the platform is installed, // this is the boards listed in the platform's boards.txt. If the platform is // not installed, this is an arbitrary list of board names provided by the // platform author for display and may not match boards.txt. - repeated Board boards = 8; - // If true this Platform has been installed manually in the user' sketchbook - // hardware folder - bool manually_installed = 9; - // If true this Platform has been deprecated - bool deprecated = 10; - // Type of the platform. - repeated string type = 11; + repeated Board boards = 5; // A URL provided by the author of the platform's package, intended to point // to their online help service. - HelpResources help = 12; - // If true the platform is indexed - bool indexed = 13; - // This field is true when the platform is installed with the Arduino IDE 1.8. - // If the platform is also not indexed it may fail to work correctly in some - // circumstances, and it may need to be re-installed. - bool missing_metadata = 14; + HelpResources help = 6; + // This field is true if the platform is missing installation metadata (this + // happens if the platform has been installed with the legacy Arduino IDE + // <=1.8.x). If the platform miss metadata and it's not indexed through a + // package index, it may fail to work correctly in some circumstances, and it + // may need to be reinstalled. This should be evaluated only when the + // PlatformRelease is `Installed` otherwise is an undefined behaviour. + bool missing_metadata = 7; + // True this release is deprecated. + bool deprecated = 8; + // True if the platform dependencies are available for the current OS/ARCH. + // This also means that the platform is installable. + bool compatible = 9; } message InstalledPlatformReference { @@ -115,9 +163,9 @@ message InstalledPlatformReference { string id = 1; // Version of the platform. string version = 2; - // Installation directory of the platform + // Installation directory of the platform. string install_dir = 3; - // 3rd party platform URL + // 3rd party platform URL. string package_url = 4; } @@ -129,15 +177,63 @@ message Board { string fqbn = 2; } -message Profile { - // Name used to identify the profile within the sketch. - string name = 1; - // FQBN specified in the profile. - string fqbn = 2; -} - message HelpResources { // A URL provided by the author of the platform's package, intended to point // to their online help service. string online = 1; } + +message Sketch { + // Absolute path to a main sketch files. + string main_file = 1; + // Absolute path to folder that contains main_file. + string location_path = 2; + // List of absolute paths to other sketch files. + repeated string other_sketch_files = 3; + // List of absolute paths to additional sketch files. + repeated string additional_files = 4; + // List of absolute paths to supported files in the sketch root folder, main + // file excluded. + repeated string root_folder_files = 5; + // Default FQBN set in project file (sketch.yaml). + string default_fqbn = 6; + // Default Port set in project file (sketch.yaml). + string default_port = 7; + // Default Protocol set in project file (sketch.yaml). + string default_protocol = 8; + // List of profiles present in the project file (sketch.yaml). + repeated SketchProfile profiles = 9; + // Default profile set in the project file (sketch.yaml). + SketchProfile default_profile = 10; + // Default Programmer set in project file (sketch.yaml). + string default_programmer = 11; + // Default Port configuration set in project file (sketch.yaml). + MonitorPortConfiguration default_port_config = 12; +} + +message MonitorPortConfiguration { + // The port configuration parameters. + repeated MonitorPortSetting settings = 1; +} + +message MonitorPortSetting { + // The setting identifier. + string setting_id = 1; + // The setting value. + string value = 2; +} + +message SketchProfile { + // Name of the profile. + string name = 1; + // FQBN used by the profile. + string fqbn = 2; + // Programmer used by the profile. + string programmer = 3; + // Default Port in this profile. + string port = 4; + // Default Port configuration set in project file (sketch.yaml). + MonitorPortConfiguration port_config = 5; + // Default Protocol in this profile. + string protocol = 6; +} diff --git a/rpc/cc/arduino/cli/commands/v1/compile.pb.go b/rpc/cc/arduino/cli/commands/v1/compile.pb.go index 7f3a8c6801c..d06b0973d09 100644 --- a/rpc/cc/arduino/cli/commands/v1/compile.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/compile.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/compile.proto package commands @@ -24,7 +25,6 @@ package commands import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -53,13 +53,16 @@ type CompileRequest struct { ShowProperties bool `protobuf:"varint,4,opt,name=show_properties,json=showProperties,proto3" json:"show_properties,omitempty"` // Print preprocessed code to stdout instead of compiling. Preprocess bool `protobuf:"varint,5,opt,name=preprocess,proto3" json:"preprocess,omitempty"` - // Builds of 'core.a' are saved into this path to be cached and reused. + // Builds of core and sketches are saved into this path to be cached and + // reused. + // + // Deprecated: Marked as deprecated in cc/arduino/cli/commands/v1/compile.proto. BuildCachePath string `protobuf:"bytes,6,opt,name=build_cache_path,json=buildCachePath,proto3" json:"build_cache_path,omitempty"` // Path to use to store the files used for the compilation. If omitted, // a directory will be created in the operating system's default temporary // path. BuildPath string `protobuf:"bytes,7,opt,name=build_path,json=buildPath,proto3" json:"build_path,omitempty"` - // List of custom build properties separated by commas. + // List of custom build properties. BuildProperties []string `protobuf:"bytes,8,rep,name=build_properties,json=buildProperties,proto3" json:"build_properties,omitempty"` // Used to tell gcc which warning level to use. The level names are: "none", // "default", "more" and "all". @@ -80,7 +83,7 @@ type CompileRequest struct { // exist. ExportDir string `protobuf:"bytes,18,opt,name=export_dir,json=exportDir,proto3" json:"export_dir,omitempty"` // Optional: cleanup the build folder and do not use any previously cached - // build + // build. Clean bool `protobuf:"varint,19,opt,name=clean,proto3" json:"clean,omitempty"` // When set to `true` only the compilation database will be produced and no // actual build will be performed. @@ -92,15 +95,15 @@ type CompileRequest struct { SourceOverride map[string]string `protobuf:"bytes,22,rep,name=source_override,json=sourceOverride,proto3" json:"source_override,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // When set to `true` the compiled binary will be copied to the export // directory. - ExportBinaries *wrapperspb.BoolValue `protobuf:"bytes,23,opt,name=export_binaries,json=exportBinaries,proto3" json:"export_binaries,omitempty"` + ExportBinaries *bool `protobuf:"varint,23,opt,name=export_binaries,json=exportBinaries,proto3,oneof" json:"export_binaries,omitempty"` // A list of paths to single libraries root directory. Library []string `protobuf:"bytes,24,rep,name=library,proto3" json:"library,omitempty"` // The path where to search for the custom signing key name and the encrypt - // key name + // key name. KeysKeychain string `protobuf:"bytes,25,opt,name=keys_keychain,json=keysKeychain,proto3" json:"keys_keychain,omitempty"` - // The name of the custom key to use for signing during the compile process + // The name of the custom key to use for signing during the compile process. SignKey string `protobuf:"bytes,26,opt,name=sign_key,json=signKey,proto3" json:"sign_key,omitempty"` - // The name of the custom key to use for encrypting during the compile process + // The name of the custom key to use for encrypting during the compile process. EncryptKey string `protobuf:"bytes,27,opt,name=encrypt_key,json=encryptKey,proto3" json:"encrypt_key,omitempty"` // If set to true the build will skip the library discovery process and will // use the same libraries of latest build. Enabling this flag may produce a @@ -111,6 +114,9 @@ type CompileRequest struct { // If set to true the returned build properties will be left unexpanded, with // the variables placeholders exactly as defined in the platform. DoNotExpandBuildProperties bool `protobuf:"varint,29,opt,name=do_not_expand_build_properties,json=doNotExpandBuildProperties,proto3" json:"do_not_expand_build_properties,omitempty"` + // Search for precompiled cores in the given paths and use them if found. + // This search is performed after the standard build_cache directory. + BuildCacheExtraPaths []string `protobuf:"bytes,30,rep,name=build_cache_extra_paths,json=buildCacheExtraPaths,proto3" json:"build_cache_extra_paths,omitempty"` } func (x *CompileRequest) Reset() { @@ -180,6 +186,7 @@ func (x *CompileRequest) GetPreprocess() bool { return false } +// Deprecated: Marked as deprecated in cc/arduino/cli/commands/v1/compile.proto. func (x *CompileRequest) GetBuildCachePath() string { if x != nil { return x.BuildCachePath @@ -271,11 +278,11 @@ func (x *CompileRequest) GetSourceOverride() map[string]string { return nil } -func (x *CompileRequest) GetExportBinaries() *wrapperspb.BoolValue { - if x != nil { - return x.ExportBinaries +func (x *CompileRequest) GetExportBinaries() bool { + if x != nil && x.ExportBinaries != nil { + return *x.ExportBinaries } - return nil + return false } func (x *CompileRequest) GetLibrary() []string { @@ -320,29 +327,25 @@ func (x *CompileRequest) GetDoNotExpandBuildProperties() bool { return false } +func (x *CompileRequest) GetBuildCacheExtraPaths() []string { + if x != nil { + return x.BuildCacheExtraPaths + } + return nil +} + type CompileResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The output of the compilation process (stream) - OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3" json:"out_stream,omitempty"` - // The error output of the compilation process (stream) - ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3" json:"err_stream,omitempty"` - // The compiler build path - BuildPath string `protobuf:"bytes,3,opt,name=build_path,json=buildPath,proto3" json:"build_path,omitempty"` - // The libraries used in the build - UsedLibraries []*Library `protobuf:"bytes,4,rep,name=used_libraries,json=usedLibraries,proto3" json:"used_libraries,omitempty"` - // The size of the executable split by sections - ExecutableSectionsSize []*ExecutableSectionSize `protobuf:"bytes,5,rep,name=executable_sections_size,json=executableSectionsSize,proto3" json:"executable_sections_size,omitempty"` - // The platform where the board is defined - BoardPlatform *InstalledPlatformReference `protobuf:"bytes,6,opt,name=board_platform,json=boardPlatform,proto3" json:"board_platform,omitempty"` - // The platform used for the build (if referenced from the board platform) - BuildPlatform *InstalledPlatformReference `protobuf:"bytes,7,opt,name=build_platform,json=buildPlatform,proto3" json:"build_platform,omitempty"` - // Completions reports of the compilation process (stream) - Progress *TaskProgress `protobuf:"bytes,8,opt,name=progress,proto3" json:"progress,omitempty"` - // Build properties used for compiling - BuildProperties []string `protobuf:"bytes,9,rep,name=build_properties,json=buildProperties,proto3" json:"build_properties,omitempty"` + // Types that are assignable to Message: + // + // *CompileResponse_OutStream + // *CompileResponse_ErrStream + // *CompileResponse_Progress + // *CompileResponse_Result + Message isCompileResponse_Message `protobuf_oneof:"message"` } func (x *CompileResponse) Reset() { @@ -377,65 +380,209 @@ func (*CompileResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{1} } +func (m *CompileResponse) GetMessage() isCompileResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *CompileResponse) GetOutStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*CompileResponse_OutStream); ok { return x.OutStream } return nil } func (x *CompileResponse) GetErrStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*CompileResponse_ErrStream); ok { return x.ErrStream } return nil } -func (x *CompileResponse) GetBuildPath() string { +func (x *CompileResponse) GetProgress() *TaskProgress { + if x, ok := x.GetMessage().(*CompileResponse_Progress); ok { + return x.Progress + } + return nil +} + +func (x *CompileResponse) GetResult() *BuilderResult { + if x, ok := x.GetMessage().(*CompileResponse_Result); ok { + return x.Result + } + return nil +} + +type isCompileResponse_Message interface { + isCompileResponse_Message() +} + +type CompileResponse_OutStream struct { + // The output of the compilation process (stream). + OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3,oneof"` +} + +type CompileResponse_ErrStream struct { + // The error output of the compilation process (stream). + ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3,oneof"` +} + +type CompileResponse_Progress struct { + // Completions reports of the compilation process (stream). + Progress *TaskProgress `protobuf:"bytes,3,opt,name=progress,proto3,oneof"` +} + +type CompileResponse_Result struct { + // The compilation result. + Result *BuilderResult `protobuf:"bytes,4,opt,name=result,proto3,oneof"` +} + +func (*CompileResponse_OutStream) isCompileResponse_Message() {} + +func (*CompileResponse_ErrStream) isCompileResponse_Message() {} + +func (*CompileResponse_Progress) isCompileResponse_Message() {} + +func (*CompileResponse_Result) isCompileResponse_Message() {} + +type InstanceNeedsReinitializationError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *InstanceNeedsReinitializationError) Reset() { + *x = InstanceNeedsReinitializationError{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InstanceNeedsReinitializationError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InstanceNeedsReinitializationError) ProtoMessage() {} + +func (x *InstanceNeedsReinitializationError) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InstanceNeedsReinitializationError.ProtoReflect.Descriptor instead. +func (*InstanceNeedsReinitializationError) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{2} +} + +type BuilderResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The compiler build path. + BuildPath string `protobuf:"bytes,1,opt,name=build_path,json=buildPath,proto3" json:"build_path,omitempty"` + // The libraries used in the build. + UsedLibraries []*Library `protobuf:"bytes,2,rep,name=used_libraries,json=usedLibraries,proto3" json:"used_libraries,omitempty"` + // The size of the executable split by sections. + ExecutableSectionsSize []*ExecutableSectionSize `protobuf:"bytes,3,rep,name=executable_sections_size,json=executableSectionsSize,proto3" json:"executable_sections_size,omitempty"` + // The platform where the board is defined. + BoardPlatform *InstalledPlatformReference `protobuf:"bytes,4,opt,name=board_platform,json=boardPlatform,proto3" json:"board_platform,omitempty"` + // The platform used for the build (if referenced from the board platform). + BuildPlatform *InstalledPlatformReference `protobuf:"bytes,5,opt,name=build_platform,json=buildPlatform,proto3" json:"build_platform,omitempty"` + // Build properties used for compiling. + BuildProperties []string `protobuf:"bytes,7,rep,name=build_properties,json=buildProperties,proto3" json:"build_properties,omitempty"` + // Compiler errors and warnings. + Diagnostics []*CompileDiagnostic `protobuf:"bytes,8,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` +} + +func (x *BuilderResult) Reset() { + *x = BuilderResult{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BuilderResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BuilderResult) ProtoMessage() {} + +func (x *BuilderResult) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BuilderResult.ProtoReflect.Descriptor instead. +func (*BuilderResult) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{3} +} + +func (x *BuilderResult) GetBuildPath() string { if x != nil { return x.BuildPath } return "" } -func (x *CompileResponse) GetUsedLibraries() []*Library { +func (x *BuilderResult) GetUsedLibraries() []*Library { if x != nil { return x.UsedLibraries } return nil } -func (x *CompileResponse) GetExecutableSectionsSize() []*ExecutableSectionSize { +func (x *BuilderResult) GetExecutableSectionsSize() []*ExecutableSectionSize { if x != nil { return x.ExecutableSectionsSize } return nil } -func (x *CompileResponse) GetBoardPlatform() *InstalledPlatformReference { +func (x *BuilderResult) GetBoardPlatform() *InstalledPlatformReference { if x != nil { return x.BoardPlatform } return nil } -func (x *CompileResponse) GetBuildPlatform() *InstalledPlatformReference { +func (x *BuilderResult) GetBuildPlatform() *InstalledPlatformReference { if x != nil { return x.BuildPlatform } return nil } -func (x *CompileResponse) GetProgress() *TaskProgress { +func (x *BuilderResult) GetBuildProperties() []string { if x != nil { - return x.Progress + return x.BuildProperties } return nil } -func (x *CompileResponse) GetBuildProperties() []string { +func (x *BuilderResult) GetDiagnostics() []*CompileDiagnostic { if x != nil { - return x.BuildProperties + return x.Diagnostics } return nil } @@ -445,15 +592,18 @@ type ExecutableSectionSize struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` - MaxSize int64 `protobuf:"varint,3,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` + // The name of the section. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The used size of the section in bytes. + Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` + // The maximum size of the section in bytes. + MaxSize int64 `protobuf:"varint,3,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` } func (x *ExecutableSectionSize) Reset() { *x = ExecutableSectionSize{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2] + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -466,7 +616,7 @@ func (x *ExecutableSectionSize) String() string { func (*ExecutableSectionSize) ProtoMessage() {} func (x *ExecutableSectionSize) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2] + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -479,7 +629,7 @@ func (x *ExecutableSectionSize) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecutableSectionSize.ProtoReflect.Descriptor instead. func (*ExecutableSectionSize) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{2} + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{4} } func (x *ExecutableSectionSize) GetName() string { @@ -503,6 +653,260 @@ func (x *ExecutableSectionSize) GetMaxSize() int64 { return 0 } +type CompileDiagnostic struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Severity of the diagnostic. + Severity string `protobuf:"bytes,1,opt,name=severity,proto3" json:"severity,omitempty"` + // The explanation of the diagnostic (it may be multiple preformatted lines). + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + // The file containing the diagnostic. + File string `protobuf:"bytes,3,opt,name=file,proto3" json:"file,omitempty"` + // The line of the diagnostic if available (starts from 1). + Line int64 `protobuf:"varint,4,opt,name=line,proto3" json:"line,omitempty"` + // The column of the diagnostic if available (starts from 1). + Column int64 `protobuf:"varint,5,opt,name=column,proto3" json:"column,omitempty"` + // The context where this diagnostic is found (it may be multiple files that + // represents a chain of includes, or a text describing where the diagnostic + // is found). + Context []*CompileDiagnosticContext `protobuf:"bytes,6,rep,name=context,proto3" json:"context,omitempty"` + // Annotations or suggestions to the diagnostic made by the compiler. + Notes []*CompileDiagnosticNote `protobuf:"bytes,7,rep,name=notes,proto3" json:"notes,omitempty"` +} + +func (x *CompileDiagnostic) Reset() { + *x = CompileDiagnostic{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompileDiagnostic) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompileDiagnostic) ProtoMessage() {} + +func (x *CompileDiagnostic) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompileDiagnostic.ProtoReflect.Descriptor instead. +func (*CompileDiagnostic) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{5} +} + +func (x *CompileDiagnostic) GetSeverity() string { + if x != nil { + return x.Severity + } + return "" +} + +func (x *CompileDiagnostic) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CompileDiagnostic) GetFile() string { + if x != nil { + return x.File + } + return "" +} + +func (x *CompileDiagnostic) GetLine() int64 { + if x != nil { + return x.Line + } + return 0 +} + +func (x *CompileDiagnostic) GetColumn() int64 { + if x != nil { + return x.Column + } + return 0 +} + +func (x *CompileDiagnostic) GetContext() []*CompileDiagnosticContext { + if x != nil { + return x.Context + } + return nil +} + +func (x *CompileDiagnostic) GetNotes() []*CompileDiagnosticNote { + if x != nil { + return x.Notes + } + return nil +} + +type CompileDiagnosticContext struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The message describing the context reference. + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + // The file of the context reference. + File string `protobuf:"bytes,2,opt,name=file,proto3" json:"file,omitempty"` + // The line of the context reference. + Line int64 `protobuf:"varint,3,opt,name=line,proto3" json:"line,omitempty"` + // The column of the context reference. + Column int64 `protobuf:"varint,4,opt,name=column,proto3" json:"column,omitempty"` +} + +func (x *CompileDiagnosticContext) Reset() { + *x = CompileDiagnosticContext{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompileDiagnosticContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompileDiagnosticContext) ProtoMessage() {} + +func (x *CompileDiagnosticContext) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompileDiagnosticContext.ProtoReflect.Descriptor instead. +func (*CompileDiagnosticContext) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{6} +} + +func (x *CompileDiagnosticContext) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CompileDiagnosticContext) GetFile() string { + if x != nil { + return x.File + } + return "" +} + +func (x *CompileDiagnosticContext) GetLine() int64 { + if x != nil { + return x.Line + } + return 0 +} + +func (x *CompileDiagnosticContext) GetColumn() int64 { + if x != nil { + return x.Column + } + return 0 +} + +type CompileDiagnosticNote struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The message describing the compiler note. + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + // The file of the compiler note. + File string `protobuf:"bytes,2,opt,name=file,proto3" json:"file,omitempty"` + // The line of the compiler note. + Line int64 `protobuf:"varint,3,opt,name=line,proto3" json:"line,omitempty"` + // The column of the compiler note. + Column int64 `protobuf:"varint,4,opt,name=column,proto3" json:"column,omitempty"` +} + +func (x *CompileDiagnosticNote) Reset() { + *x = CompileDiagnosticNote{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CompileDiagnosticNote) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompileDiagnosticNote) ProtoMessage() {} + +func (x *CompileDiagnosticNote) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompileDiagnosticNote.ProtoReflect.Descriptor instead. +func (*CompileDiagnosticNote) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP(), []int{7} +} + +func (x *CompileDiagnosticNote) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CompileDiagnosticNote) GetFile() string { + if x != nil { + return x.File + } + return "" +} + +func (x *CompileDiagnosticNote) GetLine() int64 { + if x != nil { + return x.Line + } + return 0 +} + +func (x *CompileDiagnosticNote) GetColumn() int64 { + if x != nil { + return x.Column + } + return 0 +} + var File_cc_arduino_cli_commands_v1_compile_proto protoreflect.FileDescriptor var file_cc_arduino_cli_commands_v1_compile_proto_rawDesc = []byte{ @@ -510,14 +914,12 @@ var file_cc_arduino_cli_commands_v1_compile_proto_rawDesc = []byte{ 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x62, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd8, 0x08, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x90, 0x09, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, @@ -530,112 +932,162 @@ var file_cc_arduino_cli_commands_v1_compile_proto_rawDesc = []byte{ 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x72, - 0x65, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, + 0x65, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, - 0x6f, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x69, 0x65, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x71, 0x75, 0x69, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x12, 0x1c, 0x0a, 0x09, - 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, - 0x46, 0x6f, 0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x65, 0x61, 0x6e, - 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x12, 0x47, 0x0a, - 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, - 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x67, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x3e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, - 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x69, 0x6e, 0x61, - 0x72, 0x69, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x18, - 0x18, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x23, - 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, - 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x4b, 0x65, 0x79, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x1b, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x12, - 0x38, 0x0a, 0x18, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, - 0x73, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x1c, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x16, 0x73, 0x6b, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, 0x42, 0x0a, 0x1e, 0x64, 0x6f, 0x5f, - 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1a, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x41, 0x0a, - 0x13, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xd6, 0x04, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x4a, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x69, 0x65, 0x74, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x71, 0x75, 0x69, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2c, + 0x0a, 0x12, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x64, + 0x65, 0x62, 0x75, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x65, 0x46, 0x6f, 0x72, 0x44, 0x65, 0x62, 0x75, 0x67, 0x12, 0x1d, 0x0a, 0x0a, + 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6c, 0x65, 0x61, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6c, 0x65, 0x61, + 0x6e, 0x12, 0x47, 0x0a, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x67, 0x0a, 0x0f, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x16, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x69, + 0x6e, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, + 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x69, 0x65, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x18, 0x18, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6b, + 0x65, 0x79, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x19, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x1a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x18, + 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, + 0x73, 0x6b, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, 0x42, 0x0a, 0x1e, 0x64, 0x6f, 0x5f, 0x6e, 0x6f, 0x74, + 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, + 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x78, 0x74, 0x72, 0x61, 0x50, 0x61, 0x74, 0x68, + 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, + 0x62, 0x69, 0x6e, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0xeb, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0a, + 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x48, 0x00, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, 0x0a, + 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x48, 0x00, 0x52, 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x46, + 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, + 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x24, 0x0a, 0x22, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x4e, 0x65, 0x65, 0x64, 0x73, 0x52, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa1, 0x04, 0x0a, + 0x0d, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x4a, 0x0a, + 0x0e, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x64, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x18, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x16, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0d, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x5d, 0x0a, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, + 0x4f, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, + 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x22, 0x5a, 0x0a, 0x15, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xa2, 0x02, 0x0a, + 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, + 0x69, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x4e, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x0d, - 0x75, 0x73, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x6b, 0x0a, - 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, - 0x7a, 0x65, 0x52, 0x16, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0d, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x5d, 0x0a, 0x0e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x44, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x29, - 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x5a, 0x0a, 0x15, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, - 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, - 0x78, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, + 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x47, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, + 0x73, 0x22, 0x74, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, + 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x71, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x4e, 0x6f, 0x74, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, + 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, + 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -650,32 +1102,39 @@ func file_cc_arduino_cli_commands_v1_compile_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_compile_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_compile_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_cc_arduino_cli_commands_v1_compile_proto_goTypes = []interface{}{ - (*CompileRequest)(nil), // 0: cc.arduino.cli.commands.v1.CompileRequest - (*CompileResponse)(nil), // 1: cc.arduino.cli.commands.v1.CompileResponse - (*ExecutableSectionSize)(nil), // 2: cc.arduino.cli.commands.v1.ExecutableSectionSize - nil, // 3: cc.arduino.cli.commands.v1.CompileRequest.SourceOverrideEntry - (*Instance)(nil), // 4: cc.arduino.cli.commands.v1.Instance - (*wrapperspb.BoolValue)(nil), // 5: google.protobuf.BoolValue - (*Library)(nil), // 6: cc.arduino.cli.commands.v1.Library - (*InstalledPlatformReference)(nil), // 7: cc.arduino.cli.commands.v1.InstalledPlatformReference - (*TaskProgress)(nil), // 8: cc.arduino.cli.commands.v1.TaskProgress +var file_cc_arduino_cli_commands_v1_compile_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_cc_arduino_cli_commands_v1_compile_proto_goTypes = []any{ + (*CompileRequest)(nil), // 0: cc.arduino.cli.commands.v1.CompileRequest + (*CompileResponse)(nil), // 1: cc.arduino.cli.commands.v1.CompileResponse + (*InstanceNeedsReinitializationError)(nil), // 2: cc.arduino.cli.commands.v1.InstanceNeedsReinitializationError + (*BuilderResult)(nil), // 3: cc.arduino.cli.commands.v1.BuilderResult + (*ExecutableSectionSize)(nil), // 4: cc.arduino.cli.commands.v1.ExecutableSectionSize + (*CompileDiagnostic)(nil), // 5: cc.arduino.cli.commands.v1.CompileDiagnostic + (*CompileDiagnosticContext)(nil), // 6: cc.arduino.cli.commands.v1.CompileDiagnosticContext + (*CompileDiagnosticNote)(nil), // 7: cc.arduino.cli.commands.v1.CompileDiagnosticNote + nil, // 8: cc.arduino.cli.commands.v1.CompileRequest.SourceOverrideEntry + (*Instance)(nil), // 9: cc.arduino.cli.commands.v1.Instance + (*TaskProgress)(nil), // 10: cc.arduino.cli.commands.v1.TaskProgress + (*Library)(nil), // 11: cc.arduino.cli.commands.v1.Library + (*InstalledPlatformReference)(nil), // 12: cc.arduino.cli.commands.v1.InstalledPlatformReference } var file_cc_arduino_cli_commands_v1_compile_proto_depIdxs = []int32{ - 4, // 0: cc.arduino.cli.commands.v1.CompileRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 3, // 1: cc.arduino.cli.commands.v1.CompileRequest.source_override:type_name -> cc.arduino.cli.commands.v1.CompileRequest.SourceOverrideEntry - 5, // 2: cc.arduino.cli.commands.v1.CompileRequest.export_binaries:type_name -> google.protobuf.BoolValue - 6, // 3: cc.arduino.cli.commands.v1.CompileResponse.used_libraries:type_name -> cc.arduino.cli.commands.v1.Library - 2, // 4: cc.arduino.cli.commands.v1.CompileResponse.executable_sections_size:type_name -> cc.arduino.cli.commands.v1.ExecutableSectionSize - 7, // 5: cc.arduino.cli.commands.v1.CompileResponse.board_platform:type_name -> cc.arduino.cli.commands.v1.InstalledPlatformReference - 7, // 6: cc.arduino.cli.commands.v1.CompileResponse.build_platform:type_name -> cc.arduino.cli.commands.v1.InstalledPlatformReference - 8, // 7: cc.arduino.cli.commands.v1.CompileResponse.progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 9, // 0: cc.arduino.cli.commands.v1.CompileRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 8, // 1: cc.arduino.cli.commands.v1.CompileRequest.source_override:type_name -> cc.arduino.cli.commands.v1.CompileRequest.SourceOverrideEntry + 10, // 2: cc.arduino.cli.commands.v1.CompileResponse.progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 3, // 3: cc.arduino.cli.commands.v1.CompileResponse.result:type_name -> cc.arduino.cli.commands.v1.BuilderResult + 11, // 4: cc.arduino.cli.commands.v1.BuilderResult.used_libraries:type_name -> cc.arduino.cli.commands.v1.Library + 4, // 5: cc.arduino.cli.commands.v1.BuilderResult.executable_sections_size:type_name -> cc.arduino.cli.commands.v1.ExecutableSectionSize + 12, // 6: cc.arduino.cli.commands.v1.BuilderResult.board_platform:type_name -> cc.arduino.cli.commands.v1.InstalledPlatformReference + 12, // 7: cc.arduino.cli.commands.v1.BuilderResult.build_platform:type_name -> cc.arduino.cli.commands.v1.InstalledPlatformReference + 5, // 8: cc.arduino.cli.commands.v1.BuilderResult.diagnostics:type_name -> cc.arduino.cli.commands.v1.CompileDiagnostic + 6, // 9: cc.arduino.cli.commands.v1.CompileDiagnostic.context:type_name -> cc.arduino.cli.commands.v1.CompileDiagnosticContext + 7, // 10: cc.arduino.cli.commands.v1.CompileDiagnostic.notes:type_name -> cc.arduino.cli.commands.v1.CompileDiagnosticNote + 11, // [11:11] is the sub-list for method output_type + 11, // [11:11] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_compile_proto_init() } @@ -686,7 +1145,7 @@ func file_cc_arduino_cli_commands_v1_compile_proto_init() { file_cc_arduino_cli_commands_v1_common_proto_init() file_cc_arduino_cli_commands_v1_lib_proto_init() if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CompileRequest); i { case 0: return &v.state @@ -698,7 +1157,7 @@ func file_cc_arduino_cli_commands_v1_compile_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*CompileResponse); i { case 0: return &v.state @@ -710,7 +1169,31 @@ func file_cc_arduino_cli_commands_v1_compile_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*InstanceNeedsReinitializationError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*BuilderResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ExecutableSectionSize); i { case 0: return &v.state @@ -722,6 +1205,49 @@ func file_cc_arduino_cli_commands_v1_compile_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*CompileDiagnostic); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[6].Exporter = func(v any, i int) any { + switch v := v.(*CompileDiagnosticContext); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*CompileDiagnosticNote); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[0].OneofWrappers = []any{} + file_cc_arduino_cli_commands_v1_compile_proto_msgTypes[1].OneofWrappers = []any{ + (*CompileResponse_OutStream)(nil), + (*CompileResponse_ErrStream)(nil), + (*CompileResponse_Progress)(nil), + (*CompileResponse_Result)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -729,7 +1255,7 @@ func file_cc_arduino_cli_commands_v1_compile_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_compile_proto_rawDesc, NumEnums: 0, - NumMessages: 4, + NumMessages: 9, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/compile.proto b/rpc/cc/arduino/cli/commands/v1/compile.proto index ff160ba1c01..da1d0f465fb 100644 --- a/rpc/cc/arduino/cli/commands/v1/compile.proto +++ b/rpc/cc/arduino/cli/commands/v1/compile.proto @@ -1,28 +1,28 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; package cc.arduino.cli.commands.v1; -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; - -import "google/protobuf/wrappers.proto"; import "cc/arduino/cli/commands/v1/common.proto"; import "cc/arduino/cli/commands/v1/lib.proto"; +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; + message CompileRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; @@ -36,13 +36,14 @@ message CompileRequest { bool show_properties = 4; // Print preprocessed code to stdout instead of compiling. bool preprocess = 5; - // Builds of 'core.a' are saved into this path to be cached and reused. - string build_cache_path = 6; + // Builds of core and sketches are saved into this path to be cached and + // reused. + string build_cache_path = 6 [deprecated = true]; // Path to use to store the files used for the compilation. If omitted, // a directory will be created in the operating system's default temporary // path. string build_path = 7; - // List of custom build properties separated by commas. + // List of custom build properties. repeated string build_properties = 8; // Used to tell gcc which warning level to use. The level names are: "none", // "default", "more" and "all". @@ -63,7 +64,7 @@ message CompileRequest { // exist. string export_dir = 18; // Optional: cleanup the build folder and do not use any previously cached - // build + // build. bool clean = 19; // When set to `true` only the compilation database will be produced and no // actual build will be performed. @@ -75,15 +76,15 @@ message CompileRequest { map<string, string> source_override = 22; // When set to `true` the compiled binary will be copied to the export // directory. - google.protobuf.BoolValue export_binaries = 23; + optional bool export_binaries = 23; // A list of paths to single libraries root directory. repeated string library = 24; // The path where to search for the custom signing key name and the encrypt - // key name + // key name. string keys_keychain = 25; - // The name of the custom key to use for signing during the compile process + // The name of the custom key to use for signing during the compile process. string sign_key = 26; - // The name of the custom key to use for encrypting during the compile process + // The name of the custom key to use for encrypting during the compile process. string encrypt_key = 27; // If set to true the build will skip the library discovery process and will // use the same libraries of latest build. Enabling this flag may produce a @@ -94,31 +95,89 @@ message CompileRequest { // If set to true the returned build properties will be left unexpanded, with // the variables placeholders exactly as defined in the platform. bool do_not_expand_build_properties = 29; + // Search for precompiled cores in the given paths and use them if found. + // This search is performed after the standard build_cache directory. + repeated string build_cache_extra_paths = 30; } message CompileResponse { - // The output of the compilation process (stream) - bytes out_stream = 1; - // The error output of the compilation process (stream) - bytes err_stream = 2; - // The compiler build path - string build_path = 3; - // The libraries used in the build - repeated Library used_libraries = 4; - // The size of the executable split by sections - repeated ExecutableSectionSize executable_sections_size = 5; - // The platform where the board is defined - InstalledPlatformReference board_platform = 6; - // The platform used for the build (if referenced from the board platform) - InstalledPlatformReference build_platform = 7; - // Completions reports of the compilation process (stream) - TaskProgress progress = 8; - // Build properties used for compiling - repeated string build_properties = 9; + oneof message { + // The output of the compilation process (stream). + bytes out_stream = 1; + // The error output of the compilation process (stream). + bytes err_stream = 2; + // Completions reports of the compilation process (stream). + TaskProgress progress = 3; + // The compilation result. + BuilderResult result = 4; + } +} + +message InstanceNeedsReinitializationError {} + +message BuilderResult { + // The compiler build path. + string build_path = 1; + // The libraries used in the build. + repeated Library used_libraries = 2; + // The size of the executable split by sections. + repeated ExecutableSectionSize executable_sections_size = 3; + // The platform where the board is defined. + InstalledPlatformReference board_platform = 4; + // The platform used for the build (if referenced from the board platform). + InstalledPlatformReference build_platform = 5; + // Build properties used for compiling. + repeated string build_properties = 7; + // Compiler errors and warnings. + repeated CompileDiagnostic diagnostics = 8; } message ExecutableSectionSize { + // The name of the section. string name = 1; + // The used size of the section in bytes. int64 size = 2; + // The maximum size of the section in bytes. int64 max_size = 3; } + +message CompileDiagnostic { + // Severity of the diagnostic. + string severity = 1; + // The explanation of the diagnostic (it may be multiple preformatted lines). + string message = 2; + // The file containing the diagnostic. + string file = 3; + // The line of the diagnostic if available (starts from 1). + int64 line = 4; + // The column of the diagnostic if available (starts from 1). + int64 column = 5; + // The context where this diagnostic is found (it may be multiple files that + // represents a chain of includes, or a text describing where the diagnostic + // is found). + repeated CompileDiagnosticContext context = 6; + // Annotations or suggestions to the diagnostic made by the compiler. + repeated CompileDiagnosticNote notes = 7; +} + +message CompileDiagnosticContext { + // The message describing the context reference. + string message = 1; + // The file of the context reference. + string file = 2; + // The line of the context reference. + int64 line = 3; + // The column of the context reference. + int64 column = 4; +} + +message CompileDiagnosticNote { + // The message describing the compiler note. + string message = 1; + // The file of the compiler note. + string file = 2; + // The line of the compiler note. + int64 line = 3; + // The column of the compiler note. + int64 column = 4; +} diff --git a/rpc/cc/arduino/cli/commands/v1/core.pb.go b/rpc/cc/arduino/cli/commands/v1/core.pb.go index c12b21374d0..fdb965841cc 100644 --- a/rpc/cc/arduino/cli/commands/v1/core.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/core.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/core.proto package commands @@ -49,13 +50,13 @@ type PlatformInstallRequest struct { // Platform version to install. Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` // Set to true to not run (eventual) post install scripts for trusted - // platforms + // platforms. SkipPostInstall bool `protobuf:"varint,5,opt,name=skip_post_install,json=skipPostInstall,proto3" json:"skip_post_install,omitempty"` // Set to true to skip installation if a different version of the platform // is already installed. NoOverwrite bool `protobuf:"varint,6,opt,name=no_overwrite,json=noOverwrite,proto3" json:"no_overwrite,omitempty"` // Set to true to not run (eventual) pre uninstall scripts for trusted - // platforms when performing platform upgrades + // platforms when performing platform upgrades. SkipPreUninstall bool `protobuf:"varint,7,opt,name=skip_pre_uninstall,json=skipPreUninstall,proto3" json:"skip_pre_uninstall,omitempty"` } @@ -145,10 +146,12 @@ type PlatformInstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of the platform and tool files. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *PlatformInstallResponse_Progress + // *PlatformInstallResponse_TaskProgress + // *PlatformInstallResponse_Result_ + Message isPlatformInstallResponse_Message `protobuf_oneof:"message"` } func (x *PlatformInstallResponse) Reset() { @@ -183,20 +186,59 @@ func (*PlatformInstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{1} } +func (m *PlatformInstallResponse) GetMessage() isPlatformInstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *PlatformInstallResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformInstallResponse_Progress); ok { return x.Progress } return nil } func (x *PlatformInstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformInstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *PlatformInstallResponse) GetResult() *PlatformInstallResponse_Result { + if x, ok := x.GetMessage().(*PlatformInstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isPlatformInstallResponse_Message interface { + isPlatformInstallResponse_Message() +} + +type PlatformInstallResponse_Progress struct { + // Progress of the downloads of the platform and tool files. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type PlatformInstallResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type PlatformInstallResponse_Result_ struct { + // The installation result. + Result *PlatformInstallResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*PlatformInstallResponse_Progress) isPlatformInstallResponse_Message() {} + +func (*PlatformInstallResponse_TaskProgress) isPlatformInstallResponse_Message() {} + +func (*PlatformInstallResponse_Result_) isPlatformInstallResponse_Message() {} + type PlatformLoadingError struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -241,8 +283,9 @@ type PlatformDownloadRequest struct { unknownFields protoimpl.UnknownFields // Arduino Core Service instance from the `Init` response. - Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - PlatformPackage string `protobuf:"bytes,2,opt,name=platform_package,json=platformPackage,proto3" json:"platform_package,omitempty"` + Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + // Vendor name of the platform (e.g., `arduino`). + PlatformPackage string `protobuf:"bytes,2,opt,name=platform_package,json=platformPackage,proto3" json:"platform_package,omitempty"` // Architecture name of the platform (e.g., `avr`). Architecture string `protobuf:"bytes,3,opt,name=architecture,proto3" json:"architecture,omitempty"` // Platform version to download. @@ -314,8 +357,11 @@ type PlatformDownloadResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of platform and tool files. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` + // Types that are assignable to Message: + // + // *PlatformDownloadResponse_Progress + // *PlatformDownloadResponse_Result_ + Message isPlatformDownloadResponse_Message `protobuf_oneof:"message"` } func (x *PlatformDownloadResponse) Reset() { @@ -350,13 +396,45 @@ func (*PlatformDownloadResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{4} } +func (m *PlatformDownloadResponse) GetMessage() isPlatformDownloadResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *PlatformDownloadResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformDownloadResponse_Progress); ok { return x.Progress } return nil } +func (x *PlatformDownloadResponse) GetResult() *PlatformDownloadResponse_Result { + if x, ok := x.GetMessage().(*PlatformDownloadResponse_Result_); ok { + return x.Result + } + return nil +} + +type isPlatformDownloadResponse_Message interface { + isPlatformDownloadResponse_Message() +} + +type PlatformDownloadResponse_Progress struct { + // Progress of the downloads of platform and tool files. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type PlatformDownloadResponse_Result_ struct { + // The download result. + Result *PlatformDownloadResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*PlatformDownloadResponse_Progress) isPlatformDownloadResponse_Message() {} + +func (*PlatformDownloadResponse_Result_) isPlatformDownloadResponse_Message() {} + type PlatformUninstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -369,7 +447,7 @@ type PlatformUninstallRequest struct { // Architecture name of the platform (e.g., `avr`). Architecture string `protobuf:"bytes,3,opt,name=architecture,proto3" json:"architecture,omitempty"` // Set to true to not run (eventual) pre uninstall scripts for trusted - // platforms + // platforms. SkipPreUninstall bool `protobuf:"varint,4,opt,name=skip_pre_uninstall,json=skipPreUninstall,proto3" json:"skip_pre_uninstall,omitempty"` } @@ -438,8 +516,11 @@ type PlatformUninstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Description of the current stage of the uninstall. - TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *PlatformUninstallResponse_TaskProgress + // *PlatformUninstallResponse_Result_ + Message isPlatformUninstallResponse_Message `protobuf_oneof:"message"` } func (x *PlatformUninstallResponse) Reset() { @@ -474,13 +555,45 @@ func (*PlatformUninstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{6} } +func (m *PlatformUninstallResponse) GetMessage() isPlatformUninstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *PlatformUninstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformUninstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *PlatformUninstallResponse) GetResult() *PlatformUninstallResponse_Result { + if x, ok := x.GetMessage().(*PlatformUninstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isPlatformUninstallResponse_Message interface { + isPlatformUninstallResponse_Message() +} + +type PlatformUninstallResponse_TaskProgress struct { + // Description of the current stage of the uninstall. + TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type PlatformUninstallResponse_Result_ struct { + // The uninstall result. + Result *PlatformUninstallResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*PlatformUninstallResponse_TaskProgress) isPlatformUninstallResponse_Message() {} + +func (*PlatformUninstallResponse_Result_) isPlatformUninstallResponse_Message() {} + // AlreadyAtLatestVersionError is returned when an upgrade is not possible // because already at latest version. type AlreadyAtLatestVersionError struct { @@ -533,10 +646,10 @@ type PlatformUpgradeRequest struct { // Architecture name of the platform (e.g., `avr`). Architecture string `protobuf:"bytes,3,opt,name=architecture,proto3" json:"architecture,omitempty"` // Set to true to not run (eventual) post install scripts for trusted - // platforms + // platforms. SkipPostInstall bool `protobuf:"varint,4,opt,name=skip_post_install,json=skipPostInstall,proto3" json:"skip_post_install,omitempty"` // Set to true to not run (eventual) pre uninstall scripts for trusted - // platforms when performing platform upgrades + // platforms when performing platform upgrades. SkipPreUninstall bool `protobuf:"varint,5,opt,name=skip_pre_uninstall,json=skipPreUninstall,proto3" json:"skip_pre_uninstall,omitempty"` } @@ -612,12 +725,12 @@ type PlatformUpgradeResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of the platform and tool files. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the upgrade. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` - // The upgraded platform. - Platform *Platform `protobuf:"bytes,3,opt,name=platform,proto3" json:"platform,omitempty"` + // Types that are assignable to Message: + // + // *PlatformUpgradeResponse_Progress + // *PlatformUpgradeResponse_TaskProgress + // *PlatformUpgradeResponse_Result_ + Message isPlatformUpgradeResponse_Message `protobuf_oneof:"message"` } func (x *PlatformUpgradeResponse) Reset() { @@ -652,27 +765,59 @@ func (*PlatformUpgradeResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{9} } +func (m *PlatformUpgradeResponse) GetMessage() isPlatformUpgradeResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *PlatformUpgradeResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformUpgradeResponse_Progress); ok { return x.Progress } return nil } func (x *PlatformUpgradeResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*PlatformUpgradeResponse_TaskProgress); ok { return x.TaskProgress } return nil } -func (x *PlatformUpgradeResponse) GetPlatform() *Platform { - if x != nil { - return x.Platform +func (x *PlatformUpgradeResponse) GetResult() *PlatformUpgradeResponse_Result { + if x, ok := x.GetMessage().(*PlatformUpgradeResponse_Result_); ok { + return x.Result } return nil } +type isPlatformUpgradeResponse_Message interface { + isPlatformUpgradeResponse_Message() +} + +type PlatformUpgradeResponse_Progress struct { + // Progress of the downloads of the platform and tool files. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type PlatformUpgradeResponse_TaskProgress struct { + // Description of the current stage of the upgrade. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type PlatformUpgradeResponse_Result_ struct { + // The upgrade result. + Result *PlatformUpgradeResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*PlatformUpgradeResponse_Progress) isPlatformUpgradeResponse_Message() {} + +func (*PlatformUpgradeResponse_TaskProgress) isPlatformUpgradeResponse_Message() {} + +func (*PlatformUpgradeResponse_Result_) isPlatformUpgradeResponse_Message() {} + type PlatformSearchRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -682,9 +827,9 @@ type PlatformSearchRequest struct { Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` // Keywords for the search. SearchArgs string `protobuf:"bytes,2,opt,name=search_args,json=searchArgs,proto3" json:"search_args,omitempty"` - // Whether to show all available versions. `false` causes only the newest - // versions of the cores to be listed in the search results. - AllVersions bool `protobuf:"varint,3,opt,name=all_versions,json=allVersions,proto3" json:"all_versions,omitempty"` + // Whether to show manually installed platforms. `false` causes to skip + // manually installed platforms. + ManuallyInstalled bool `protobuf:"varint,3,opt,name=manually_installed,json=manuallyInstalled,proto3" json:"manually_installed,omitempty"` } func (x *PlatformSearchRequest) Reset() { @@ -733,9 +878,9 @@ func (x *PlatformSearchRequest) GetSearchArgs() string { return "" } -func (x *PlatformSearchRequest) GetAllVersions() bool { +func (x *PlatformSearchRequest) GetManuallyInstalled() bool { if x != nil { - return x.AllVersions + return x.ManuallyInstalled } return false } @@ -746,7 +891,7 @@ type PlatformSearchResponse struct { unknownFields protoimpl.UnknownFields // Results of the search. - SearchOutput []*Platform `protobuf:"bytes,1,rep,name=search_output,json=searchOutput,proto3" json:"search_output,omitempty"` + SearchOutput []*PlatformSummary `protobuf:"bytes,1,rep,name=search_output,json=searchOutput,proto3" json:"search_output,omitempty"` } func (x *PlatformSearchResponse) Reset() { @@ -781,31 +926,21 @@ func (*PlatformSearchResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{11} } -func (x *PlatformSearchResponse) GetSearchOutput() []*Platform { +func (x *PlatformSearchResponse) GetSearchOutput() []*PlatformSummary { if x != nil { return x.SearchOutput } return nil } -type PlatformListRequest struct { +type PlatformInstallResponse_Result struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // Arduino Core Service instance from the `Init` response. - Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Set to true to only list platforms which have a newer version available - // than the one currently installed. - UpdatableOnly bool `protobuf:"varint,2,opt,name=updatable_only,json=updatableOnly,proto3" json:"updatable_only,omitempty"` - // Set to true to list platforms installed manually in the user' sketchbook - // hardware folder, installed with the PlatformManager through the CLI or - // IDE and that are available to install - All bool `protobuf:"varint,3,opt,name=all,proto3" json:"all,omitempty"` } -func (x *PlatformListRequest) Reset() { - *x = PlatformListRequest{} +func (x *PlatformInstallResponse_Result) Reset() { + *x = PlatformInstallResponse_Result{} if protoimpl.UnsafeEnabled { mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -813,13 +948,13 @@ func (x *PlatformListRequest) Reset() { } } -func (x *PlatformListRequest) String() string { +func (x *PlatformInstallResponse_Result) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PlatformListRequest) ProtoMessage() {} +func (*PlatformInstallResponse_Result) ProtoMessage() {} -func (x *PlatformListRequest) ProtoReflect() protoreflect.Message { +func (x *PlatformInstallResponse_Result) ProtoReflect() protoreflect.Message { mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -831,58 +966,113 @@ func (x *PlatformListRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PlatformListRequest.ProtoReflect.Descriptor instead. -func (*PlatformListRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{12} +// Deprecated: Use PlatformInstallResponse_Result.ProtoReflect.Descriptor instead. +func (*PlatformInstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{1, 0} } -func (x *PlatformListRequest) GetInstance() *Instance { - if x != nil { - return x.Instance +type PlatformDownloadResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PlatformDownloadResponse_Result) Reset() { + *x = PlatformDownloadResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *PlatformListRequest) GetUpdatableOnly() bool { - if x != nil { - return x.UpdatableOnly +func (x *PlatformDownloadResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformDownloadResponse_Result) ProtoMessage() {} + +func (x *PlatformDownloadResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return false + return mi.MessageOf(x) } -func (x *PlatformListRequest) GetAll() bool { - if x != nil { - return x.All +// Deprecated: Use PlatformDownloadResponse_Result.ProtoReflect.Descriptor instead. +func (*PlatformDownloadResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{4, 0} +} + +type PlatformUninstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PlatformUninstallResponse_Result) Reset() { + *x = PlatformUninstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return false } -type PlatformListResponse struct { +func (x *PlatformUninstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformUninstallResponse_Result) ProtoMessage() {} + +func (x *PlatformUninstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformUninstallResponse_Result.ProtoReflect.Descriptor instead. +func (*PlatformUninstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{6, 0} +} + +type PlatformUpgradeResponse_Result struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The installed platforms. - InstalledPlatforms []*Platform `protobuf:"bytes,1,rep,name=installed_platforms,json=installedPlatforms,proto3" json:"installed_platforms,omitempty"` + // The upgraded platform. + Platform *Platform `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` } -func (x *PlatformListResponse) Reset() { - *x = PlatformListResponse{} +func (x *PlatformUpgradeResponse_Result) Reset() { + *x = PlatformUpgradeResponse_Result{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13] + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *PlatformListResponse) String() string { +func (x *PlatformUpgradeResponse_Result) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PlatformListResponse) ProtoMessage() {} +func (*PlatformUpgradeResponse_Result) ProtoMessage() {} -func (x *PlatformListResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13] +func (x *PlatformUpgradeResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_core_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -893,14 +1083,14 @@ func (x *PlatformListResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PlatformListResponse.ProtoReflect.Descriptor instead. -func (*PlatformListResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{13} +// Deprecated: Use PlatformUpgradeResponse_Result.ProtoReflect.Descriptor instead. +func (*PlatformUpgradeResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP(), []int{9, 0} } -func (x *PlatformListResponse) GetInstalledPlatforms() []*Platform { +func (x *PlatformUpgradeResponse_Result) GetPlatform() *Platform { if x != nil { - return x.InstalledPlatforms + return x.Platform } return nil } @@ -935,130 +1125,143 @@ var file_cc_arduino_cli_commands_v1_core_proto_rawDesc = []byte{ 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x22, - 0xb2, 0x01, 0x0a, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, + 0xa1, 0x02, 0x0a, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x4c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xc4, 0x01, 0x0a, - 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x64, 0x0a, 0x18, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, + 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x54, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, + 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xc4, 0x01, 0x0a, 0x17, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, + 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0xd2, 0x01, 0x0a, 0x18, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0xd9, 0x01, 0x0a, 0x18, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, + 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x18, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, 0x72, + 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, - 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x5f, - 0x70, 0x72, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x22, 0x6a, 0x0a, 0x19, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x41, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x41, 0x74, 0x4c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x83, 0x02, 0x0a, 0x16, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, - 0x10, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, - 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x11, - 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x6f, 0x73, - 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, - 0x5f, 0x70, 0x72, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x22, 0xf4, 0x01, 0x0a, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x56, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x1d, 0x0a, 0x1b, 0x41, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x41, 0x74, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x83, + 0x02, 0x0a, 0x16, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, + 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, + 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, + 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x6b, + 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x6f, 0x73, 0x74, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, + 0x72, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x72, 0x65, 0x55, 0x6e, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x22, 0xe3, 0x02, 0x0a, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, - 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, + 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x54, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x9d, 0x01, - 0x0a, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6c, - 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x63, 0x0a, - 0x16, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x22, 0x90, 0x01, 0x0a, 0x13, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4f, - 0x6e, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x6d, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, - 0x13, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x52, 0x12, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x1a, 0x4a, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x40, 0x0a, + 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, + 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x15, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x6c, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0x6a, 0x0a, 0x16, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x50, 0x0a, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1073,48 +1276,53 @@ func file_cc_arduino_cli_commands_v1_core_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_core_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_core_proto_msgTypes = make([]protoimpl.MessageInfo, 14) -var file_cc_arduino_cli_commands_v1_core_proto_goTypes = []interface{}{ - (*PlatformInstallRequest)(nil), // 0: cc.arduino.cli.commands.v1.PlatformInstallRequest - (*PlatformInstallResponse)(nil), // 1: cc.arduino.cli.commands.v1.PlatformInstallResponse - (*PlatformLoadingError)(nil), // 2: cc.arduino.cli.commands.v1.PlatformLoadingError - (*PlatformDownloadRequest)(nil), // 3: cc.arduino.cli.commands.v1.PlatformDownloadRequest - (*PlatformDownloadResponse)(nil), // 4: cc.arduino.cli.commands.v1.PlatformDownloadResponse - (*PlatformUninstallRequest)(nil), // 5: cc.arduino.cli.commands.v1.PlatformUninstallRequest - (*PlatformUninstallResponse)(nil), // 6: cc.arduino.cli.commands.v1.PlatformUninstallResponse - (*AlreadyAtLatestVersionError)(nil), // 7: cc.arduino.cli.commands.v1.AlreadyAtLatestVersionError - (*PlatformUpgradeRequest)(nil), // 8: cc.arduino.cli.commands.v1.PlatformUpgradeRequest - (*PlatformUpgradeResponse)(nil), // 9: cc.arduino.cli.commands.v1.PlatformUpgradeResponse - (*PlatformSearchRequest)(nil), // 10: cc.arduino.cli.commands.v1.PlatformSearchRequest - (*PlatformSearchResponse)(nil), // 11: cc.arduino.cli.commands.v1.PlatformSearchResponse - (*PlatformListRequest)(nil), // 12: cc.arduino.cli.commands.v1.PlatformListRequest - (*PlatformListResponse)(nil), // 13: cc.arduino.cli.commands.v1.PlatformListResponse - (*Instance)(nil), // 14: cc.arduino.cli.commands.v1.Instance - (*DownloadProgress)(nil), // 15: cc.arduino.cli.commands.v1.DownloadProgress - (*TaskProgress)(nil), // 16: cc.arduino.cli.commands.v1.TaskProgress - (*Platform)(nil), // 17: cc.arduino.cli.commands.v1.Platform +var file_cc_arduino_cli_commands_v1_core_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_cc_arduino_cli_commands_v1_core_proto_goTypes = []any{ + (*PlatformInstallRequest)(nil), // 0: cc.arduino.cli.commands.v1.PlatformInstallRequest + (*PlatformInstallResponse)(nil), // 1: cc.arduino.cli.commands.v1.PlatformInstallResponse + (*PlatformLoadingError)(nil), // 2: cc.arduino.cli.commands.v1.PlatformLoadingError + (*PlatformDownloadRequest)(nil), // 3: cc.arduino.cli.commands.v1.PlatformDownloadRequest + (*PlatformDownloadResponse)(nil), // 4: cc.arduino.cli.commands.v1.PlatformDownloadResponse + (*PlatformUninstallRequest)(nil), // 5: cc.arduino.cli.commands.v1.PlatformUninstallRequest + (*PlatformUninstallResponse)(nil), // 6: cc.arduino.cli.commands.v1.PlatformUninstallResponse + (*AlreadyAtLatestVersionError)(nil), // 7: cc.arduino.cli.commands.v1.AlreadyAtLatestVersionError + (*PlatformUpgradeRequest)(nil), // 8: cc.arduino.cli.commands.v1.PlatformUpgradeRequest + (*PlatformUpgradeResponse)(nil), // 9: cc.arduino.cli.commands.v1.PlatformUpgradeResponse + (*PlatformSearchRequest)(nil), // 10: cc.arduino.cli.commands.v1.PlatformSearchRequest + (*PlatformSearchResponse)(nil), // 11: cc.arduino.cli.commands.v1.PlatformSearchResponse + (*PlatformInstallResponse_Result)(nil), // 12: cc.arduino.cli.commands.v1.PlatformInstallResponse.Result + (*PlatformDownloadResponse_Result)(nil), // 13: cc.arduino.cli.commands.v1.PlatformDownloadResponse.Result + (*PlatformUninstallResponse_Result)(nil), // 14: cc.arduino.cli.commands.v1.PlatformUninstallResponse.Result + (*PlatformUpgradeResponse_Result)(nil), // 15: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.Result + (*Instance)(nil), // 16: cc.arduino.cli.commands.v1.Instance + (*DownloadProgress)(nil), // 17: cc.arduino.cli.commands.v1.DownloadProgress + (*TaskProgress)(nil), // 18: cc.arduino.cli.commands.v1.TaskProgress + (*PlatformSummary)(nil), // 19: cc.arduino.cli.commands.v1.PlatformSummary + (*Platform)(nil), // 20: cc.arduino.cli.commands.v1.Platform } var file_cc_arduino_cli_commands_v1_core_proto_depIdxs = []int32{ - 14, // 0: cc.arduino.cli.commands.v1.PlatformInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 15, // 1: cc.arduino.cli.commands.v1.PlatformInstallResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 16, // 2: cc.arduino.cli.commands.v1.PlatformInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 14, // 3: cc.arduino.cli.commands.v1.PlatformDownloadRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 15, // 4: cc.arduino.cli.commands.v1.PlatformDownloadResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 14, // 5: cc.arduino.cli.commands.v1.PlatformUninstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 16, // 6: cc.arduino.cli.commands.v1.PlatformUninstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 14, // 7: cc.arduino.cli.commands.v1.PlatformUpgradeRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 15, // 8: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 16, // 9: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 17, // 10: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.platform:type_name -> cc.arduino.cli.commands.v1.Platform - 14, // 11: cc.arduino.cli.commands.v1.PlatformSearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 17, // 12: cc.arduino.cli.commands.v1.PlatformSearchResponse.search_output:type_name -> cc.arduino.cli.commands.v1.Platform - 14, // 13: cc.arduino.cli.commands.v1.PlatformListRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 17, // 14: cc.arduino.cli.commands.v1.PlatformListResponse.installed_platforms:type_name -> cc.arduino.cli.commands.v1.Platform - 15, // [15:15] is the sub-list for method output_type - 15, // [15:15] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 16, // 0: cc.arduino.cli.commands.v1.PlatformInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 17, // 1: cc.arduino.cli.commands.v1.PlatformInstallResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 18, // 2: cc.arduino.cli.commands.v1.PlatformInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 12, // 3: cc.arduino.cli.commands.v1.PlatformInstallResponse.result:type_name -> cc.arduino.cli.commands.v1.PlatformInstallResponse.Result + 16, // 4: cc.arduino.cli.commands.v1.PlatformDownloadRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 17, // 5: cc.arduino.cli.commands.v1.PlatformDownloadResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 13, // 6: cc.arduino.cli.commands.v1.PlatformDownloadResponse.result:type_name -> cc.arduino.cli.commands.v1.PlatformDownloadResponse.Result + 16, // 7: cc.arduino.cli.commands.v1.PlatformUninstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 18, // 8: cc.arduino.cli.commands.v1.PlatformUninstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 14, // 9: cc.arduino.cli.commands.v1.PlatformUninstallResponse.result:type_name -> cc.arduino.cli.commands.v1.PlatformUninstallResponse.Result + 16, // 10: cc.arduino.cli.commands.v1.PlatformUpgradeRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 17, // 11: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 18, // 12: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 15, // 13: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.result:type_name -> cc.arduino.cli.commands.v1.PlatformUpgradeResponse.Result + 16, // 14: cc.arduino.cli.commands.v1.PlatformSearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 19, // 15: cc.arduino.cli.commands.v1.PlatformSearchResponse.search_output:type_name -> cc.arduino.cli.commands.v1.PlatformSummary + 20, // 16: cc.arduino.cli.commands.v1.PlatformUpgradeResponse.Result.platform:type_name -> cc.arduino.cli.commands.v1.Platform + 17, // [17:17] is the sub-list for method output_type + 17, // [17:17] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_core_proto_init() } @@ -1124,7 +1332,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { } file_cc_arduino_cli_commands_v1_common_proto_init() if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*PlatformInstallRequest); i { case 0: return &v.state @@ -1136,7 +1344,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*PlatformInstallResponse); i { case 0: return &v.state @@ -1148,7 +1356,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*PlatformLoadingError); i { case 0: return &v.state @@ -1160,7 +1368,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*PlatformDownloadRequest); i { case 0: return &v.state @@ -1172,7 +1380,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*PlatformDownloadResponse); i { case 0: return &v.state @@ -1184,7 +1392,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*PlatformUninstallRequest); i { case 0: return &v.state @@ -1196,7 +1404,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*PlatformUninstallResponse); i { case 0: return &v.state @@ -1208,7 +1416,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*AlreadyAtLatestVersionError); i { case 0: return &v.state @@ -1220,7 +1428,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*PlatformUpgradeRequest); i { case 0: return &v.state @@ -1232,7 +1440,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*PlatformUpgradeResponse); i { case 0: return &v.state @@ -1244,7 +1452,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*PlatformSearchRequest); i { case 0: return &v.state @@ -1256,7 +1464,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*PlatformSearchResponse); i { case 0: return &v.state @@ -1268,8 +1476,8 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlatformListRequest); i { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[12].Exporter = func(v any, i int) any { + switch v := v.(*PlatformInstallResponse_Result); i { case 0: return &v.state case 1: @@ -1280,8 +1488,8 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlatformListResponse); i { + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[13].Exporter = func(v any, i int) any { + switch v := v.(*PlatformDownloadResponse_Result); i { case 0: return &v.state case 1: @@ -1292,6 +1500,48 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[14].Exporter = func(v any, i int) any { + switch v := v.(*PlatformUninstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[15].Exporter = func(v any, i int) any { + switch v := v.(*PlatformUpgradeResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[1].OneofWrappers = []any{ + (*PlatformInstallResponse_Progress)(nil), + (*PlatformInstallResponse_TaskProgress)(nil), + (*PlatformInstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[4].OneofWrappers = []any{ + (*PlatformDownloadResponse_Progress)(nil), + (*PlatformDownloadResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[6].OneofWrappers = []any{ + (*PlatformUninstallResponse_TaskProgress)(nil), + (*PlatformUninstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_core_proto_msgTypes[9].OneofWrappers = []any{ + (*PlatformUpgradeResponse_Progress)(nil), + (*PlatformUpgradeResponse_TaskProgress)(nil), + (*PlatformUpgradeResponse_Result_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -1299,7 +1549,7 @@ func file_cc_arduino_cli_commands_v1_core_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_core_proto_rawDesc, NumEnums: 0, - NumMessages: 14, + NumMessages: 16, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/core.proto b/rpc/cc/arduino/cli/commands/v1/core.proto index 70ec4d46886..345c4c88d18 100644 --- a/rpc/cc/arduino/cli/commands/v1/core.proto +++ b/rpc/cc/arduino/cli/commands/v1/core.proto @@ -1,26 +1,27 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; package cc.arduino.cli.commands.v1; -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; - import "cc/arduino/cli/commands/v1/common.proto"; +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; + message PlatformInstallRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; @@ -31,21 +32,28 @@ message PlatformInstallRequest { // Platform version to install. string version = 4; // Set to true to not run (eventual) post install scripts for trusted - // platforms + // platforms. bool skip_post_install = 5; // Set to true to skip installation if a different version of the platform // is already installed. bool no_overwrite = 6; // Set to true to not run (eventual) pre uninstall scripts for trusted - // platforms when performing platform upgrades + // platforms when performing platform upgrades. bool skip_pre_uninstall = 7; } message PlatformInstallResponse { - // Progress of the downloads of the platform and tool files. - DownloadProgress progress = 1; - // Description of the current stage of the installation. - TaskProgress task_progress = 2; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the downloads of the platform and tool files. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; + // The installation result. + Result result = 3; + } } message PlatformLoadingError {} @@ -53,6 +61,7 @@ message PlatformLoadingError {} message PlatformDownloadRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; + // Vendor name of the platform (e.g., `arduino`). string platform_package = 2; // Architecture name of the platform (e.g., `avr`). string architecture = 3; @@ -61,8 +70,15 @@ message PlatformDownloadRequest { } message PlatformDownloadResponse { - // Progress of the downloads of platform and tool files. - DownloadProgress progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the downloads of platform and tool files. + DownloadProgress progress = 1; + // The download result. + Result result = 2; + } } message PlatformUninstallRequest { @@ -73,13 +89,20 @@ message PlatformUninstallRequest { // Architecture name of the platform (e.g., `avr`). string architecture = 3; // Set to true to not run (eventual) pre uninstall scripts for trusted - // platforms + // platforms. bool skip_pre_uninstall = 4; } message PlatformUninstallResponse { - // Description of the current stage of the uninstall. - TaskProgress task_progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Description of the current stage of the uninstall. + TaskProgress task_progress = 1; + // The uninstall result. + Result result = 2; + } } // AlreadyAtLatestVersionError is returned when an upgrade is not possible @@ -94,20 +117,26 @@ message PlatformUpgradeRequest { // Architecture name of the platform (e.g., `avr`). string architecture = 3; // Set to true to not run (eventual) post install scripts for trusted - // platforms + // platforms. bool skip_post_install = 4; // Set to true to not run (eventual) pre uninstall scripts for trusted - // platforms when performing platform upgrades + // platforms when performing platform upgrades. bool skip_pre_uninstall = 5; } message PlatformUpgradeResponse { - // Progress of the downloads of the platform and tool files. - DownloadProgress progress = 1; - // Description of the current stage of the upgrade. - TaskProgress task_progress = 2; - // The upgraded platform. - Platform platform = 3; + message Result { + // The upgraded platform. + Platform platform = 1; + } + oneof message { + // Progress of the downloads of the platform and tool files. + DownloadProgress progress = 1; + // Description of the current stage of the upgrade. + TaskProgress task_progress = 2; + // The upgrade result. + Result result = 3; + } } message PlatformSearchRequest { @@ -115,29 +144,12 @@ message PlatformSearchRequest { Instance instance = 1; // Keywords for the search. string search_args = 2; - // Whether to show all available versions. `false` causes only the newest - // versions of the cores to be listed in the search results. - bool all_versions = 3; + // Whether to show manually installed platforms. `false` causes to skip + // manually installed platforms. + bool manually_installed = 3; } message PlatformSearchResponse { // Results of the search. - repeated Platform search_output = 1; -} - -message PlatformListRequest { - // Arduino Core Service instance from the `Init` response. - Instance instance = 1; - // Set to true to only list platforms which have a newer version available - // than the one currently installed. - bool updatable_only = 2; - // Set to true to list platforms installed manually in the user' sketchbook - // hardware folder, installed with the PlatformManager through the CLI or - // IDE and that are available to install - bool all = 3; -} - -message PlatformListResponse { - // The installed platforms. - repeated Platform installed_platforms = 1; + repeated PlatformSummary search_output = 1; } diff --git a/rpc/cc/arduino/cli/commands/v1/debug.pb.go b/rpc/cc/arduino/cli/commands/v1/debug.pb.go index 4dc46f0b13a..3e313926d94 100644 --- a/rpc/cc/arduino/cli/commands/v1/debug.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/debug.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/debug.proto package commands @@ -52,7 +53,7 @@ type DebugRequest struct { DebugRequest *GetDebugConfigRequest `protobuf:"bytes,1,opt,name=debug_request,json=debugRequest,proto3" json:"debug_request,omitempty"` // The data to be sent to the target being monitored. Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - // Set this to true to send and Interrupt signal to the debugger process + // Set this to true to send and Interrupt signal to the debugger process. SendInterrupt bool `protobuf:"varint,3,opt,name=send_interrupt,json=sendInterrupt,proto3" json:"send_interrupt,omitempty"` } @@ -109,6 +110,245 @@ func (x *DebugRequest) GetSendInterrupt() bool { return false } +// The streaming response may contain chunks of data from the debugger or an +// error. +type DebugResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Message: + // + // *DebugResponse_Data + // *DebugResponse_Result_ + Message isDebugResponse_Message `protobuf_oneof:"message"` +} + +func (x *DebugResponse) Reset() { + *x = DebugResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DebugResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DebugResponse) ProtoMessage() {} + +func (x *DebugResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DebugResponse.ProtoReflect.Descriptor instead. +func (*DebugResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{1} +} + +func (m *DebugResponse) GetMessage() isDebugResponse_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *DebugResponse) GetData() []byte { + if x, ok := x.GetMessage().(*DebugResponse_Data); ok { + return x.Data + } + return nil +} + +func (x *DebugResponse) GetResult() *DebugResponse_Result { + if x, ok := x.GetMessage().(*DebugResponse_Result_); ok { + return x.Result + } + return nil +} + +type isDebugResponse_Message interface { + isDebugResponse_Message() +} + +type DebugResponse_Data struct { + // Incoming data from the debugger tool. + Data []byte `protobuf:"bytes,1,opt,name=data,proto3,oneof"` +} + +type DebugResponse_Result_ struct { + // Debugging result. + Result *DebugResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*DebugResponse_Data) isDebugResponse_Message() {} + +func (*DebugResponse_Result_) isDebugResponse_Message() {} + +type IsDebugSupportedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Arduino Core Service instance from the `Init` response. + Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + // Fully qualified board name of the board in use (e.g., + // `arduino:samd:mkr1000`). + Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // Port of the debugger (optional). + Port *Port `protobuf:"bytes,3,opt,name=port,proto3" json:"port,omitempty"` + // Which GDB command interpreter to use. + Interpreter string `protobuf:"bytes,4,opt,name=interpreter,proto3" json:"interpreter,omitempty"` + // The programmer to use for debugging. + Programmer string `protobuf:"bytes,5,opt,name=programmer,proto3" json:"programmer,omitempty"` + // List of custom debug properties. + DebugProperties []string `protobuf:"bytes,6,rep,name=debug_properties,json=debugProperties,proto3" json:"debug_properties,omitempty"` +} + +func (x *IsDebugSupportedRequest) Reset() { + *x = IsDebugSupportedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsDebugSupportedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsDebugSupportedRequest) ProtoMessage() {} + +func (x *IsDebugSupportedRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IsDebugSupportedRequest.ProtoReflect.Descriptor instead. +func (*IsDebugSupportedRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{2} +} + +func (x *IsDebugSupportedRequest) GetInstance() *Instance { + if x != nil { + return x.Instance + } + return nil +} + +func (x *IsDebugSupportedRequest) GetFqbn() string { + if x != nil { + return x.Fqbn + } + return "" +} + +func (x *IsDebugSupportedRequest) GetPort() *Port { + if x != nil { + return x.Port + } + return nil +} + +func (x *IsDebugSupportedRequest) GetInterpreter() string { + if x != nil { + return x.Interpreter + } + return "" +} + +func (x *IsDebugSupportedRequest) GetProgrammer() string { + if x != nil { + return x.Programmer + } + return "" +} + +func (x *IsDebugSupportedRequest) GetDebugProperties() []string { + if x != nil { + return x.DebugProperties + } + return nil +} + +type IsDebugSupportedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // True if debugging is supported. + DebuggingSupported bool `protobuf:"varint,1,opt,name=debugging_supported,json=debuggingSupported,proto3" json:"debugging_supported,omitempty"` + // This is the same FQBN given in the IsDebugSupportedRequest but cleaned + // up of the board options that do not affect the debugger configuration. + // It may be used by clients/IDE to group slightly different boards option + // selections under the same debug configuration. + DebugFqbn string `protobuf:"bytes,2,opt,name=debug_fqbn,json=debugFqbn,proto3" json:"debug_fqbn,omitempty"` +} + +func (x *IsDebugSupportedResponse) Reset() { + *x = IsDebugSupportedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IsDebugSupportedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IsDebugSupportedResponse) ProtoMessage() {} + +func (x *IsDebugSupportedResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IsDebugSupportedResponse.ProtoReflect.Descriptor instead. +func (*IsDebugSupportedResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{3} +} + +func (x *IsDebugSupportedResponse) GetDebuggingSupported() bool { + if x != nil { + return x.DebuggingSupported + } + return false +} + +func (x *IsDebugSupportedResponse) GetDebugFqbn() string { + if x != nil { + return x.DebugFqbn + } + return "" +} + type GetDebugConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -133,12 +373,14 @@ type GetDebugConfigRequest struct { ImportDir string `protobuf:"bytes,8,opt,name=import_dir,json=importDir,proto3" json:"import_dir,omitempty"` // The programmer to use for debugging. Programmer string `protobuf:"bytes,9,opt,name=programmer,proto3" json:"programmer,omitempty"` + // List of custom debug properties. + DebugProperties []string `protobuf:"bytes,10,rep,name=debug_properties,json=debugProperties,proto3" json:"debug_properties,omitempty"` } func (x *GetDebugConfigRequest) Reset() { *x = GetDebugConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -151,7 +393,7 @@ func (x *GetDebugConfigRequest) String() string { func (*GetDebugConfigRequest) ProtoMessage() {} func (x *GetDebugConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -164,7 +406,7 @@ func (x *GetDebugConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDebugConfigRequest.ProtoReflect.Descriptor instead. func (*GetDebugConfigRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{1} + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{4} } func (x *GetDebugConfigRequest) GetInstance() *Instance { @@ -216,96 +458,50 @@ func (x *GetDebugConfigRequest) GetProgrammer() string { return "" } -type DebugResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Incoming data from the debugger tool. - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - // Incoming error output from the debugger tool. - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *DebugResponse) Reset() { - *x = DebugResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DebugResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DebugResponse) ProtoMessage() {} - -func (x *DebugResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DebugResponse.ProtoReflect.Descriptor instead. -func (*DebugResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{2} -} - -func (x *DebugResponse) GetData() []byte { +func (x *GetDebugConfigRequest) GetDebugProperties() []string { if x != nil { - return x.Data + return x.DebugProperties } return nil } -func (x *DebugResponse) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type GetDebugConfigResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The executable binary to debug + // The executable binary to debug. Executable string `protobuf:"bytes,1,opt,name=executable,proto3" json:"executable,omitempty"` - // The toolchain type used for the build (for example "gcc") + // The toolchain type used for the build (for example "gcc"). Toolchain string `protobuf:"bytes,2,opt,name=toolchain,proto3" json:"toolchain,omitempty"` - // The toolchain directory + // The toolchain directory. ToolchainPath string `protobuf:"bytes,3,opt,name=toolchain_path,json=toolchainPath,proto3" json:"toolchain_path,omitempty"` - // The toolchain architecture prefix (for example "arm-none-eabi-") + // The toolchain architecture prefix (for example "arm-none-eabi"). ToolchainPrefix string `protobuf:"bytes,4,opt,name=toolchain_prefix,json=toolchainPrefix,proto3" json:"toolchain_prefix,omitempty"` // The GDB server type used to connect to the programmer/board (for example - // "openocd") + // "openocd"). Server string `protobuf:"bytes,5,opt,name=server,proto3" json:"server,omitempty"` - // The GDB server directory + // The GDB server directory. ServerPath string `protobuf:"bytes,6,opt,name=server_path,json=serverPath,proto3" json:"server_path,omitempty"` - // Extra configuration parameters wrt toolchain + // Extra configuration parameters wrt toolchain. ToolchainConfiguration *anypb.Any `protobuf:"bytes,7,opt,name=toolchain_configuration,json=toolchainConfiguration,proto3" json:"toolchain_configuration,omitempty"` - // Extra configuration parameters wrt GDB server + // Extra configuration parameters wrt GDB server. ServerConfiguration *anypb.Any `protobuf:"bytes,8,opt,name=server_configuration,json=serverConfiguration,proto3" json:"server_configuration,omitempty"` - // cortex-debug custom JSON configuration, it is provided as is from - // the platform developers. - CortexDebugCustomJson string `protobuf:"bytes,9,opt,name=cortex_debug_custom_json,json=cortexDebugCustomJson,proto3" json:"cortex_debug_custom_json,omitempty"` - // the SVD file to use + // Custom debugger configurations (not handled directly by Arduino CLI but + // provided for 3rd party plugins/debuggers). The map keys identifies which + // 3rd party plugin/debugger is referred, the map string values contains a + // JSON configuration for it. + CustomConfigs map[string]string `protobuf:"bytes,9,rep,name=custom_configs,json=customConfigs,proto3" json:"custom_configs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // the SVD file to use. SvdFile string `protobuf:"bytes,10,opt,name=svd_file,json=svdFile,proto3" json:"svd_file,omitempty"` + // The programmer specified in the request. + Programmer string `protobuf:"bytes,11,opt,name=programmer,proto3" json:"programmer,omitempty"` } func (x *GetDebugConfigResponse) Reset() { *x = GetDebugConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -318,7 +514,7 @@ func (x *GetDebugConfigResponse) String() string { func (*GetDebugConfigResponse) ProtoMessage() {} func (x *GetDebugConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -331,7 +527,7 @@ func (x *GetDebugConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDebugConfigResponse.ProtoReflect.Descriptor instead. func (*GetDebugConfigResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{3} + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{5} } func (x *GetDebugConfigResponse) GetExecutable() string { @@ -390,11 +586,11 @@ func (x *GetDebugConfigResponse) GetServerConfiguration() *anypb.Any { return nil } -func (x *GetDebugConfigResponse) GetCortexDebugCustomJson() string { +func (x *GetDebugConfigResponse) GetCustomConfigs() map[string]string { if x != nil { - return x.CortexDebugCustomJson + return x.CustomConfigs } - return "" + return nil } func (x *GetDebugConfigResponse) GetSvdFile() string { @@ -404,7 +600,14 @@ func (x *GetDebugConfigResponse) GetSvdFile() string { return "" } -// Configurations specific for the 'gcc' toolchain +func (x *GetDebugConfigResponse) GetProgrammer() string { + if x != nil { + return x.Programmer + } + return "" +} + +// Configurations specific for the 'gcc' toolchain. type DebugGCCToolchainConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -414,7 +617,7 @@ type DebugGCCToolchainConfiguration struct { func (x *DebugGCCToolchainConfiguration) Reset() { *x = DebugGCCToolchainConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -427,7 +630,7 @@ func (x *DebugGCCToolchainConfiguration) String() string { func (*DebugGCCToolchainConfiguration) ProtoMessage() {} func (x *DebugGCCToolchainConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -440,27 +643,27 @@ func (x *DebugGCCToolchainConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugGCCToolchainConfiguration.ProtoReflect.Descriptor instead. func (*DebugGCCToolchainConfiguration) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{4} + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{6} } -// Configuration specific for the 'openocd` server +// Configuration specific for the 'openocd` server. type DebugOpenOCDServerConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // path to openocd + // Path to openocd. Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - // path to openocd scripts + // Path to openocd scripts. ScriptsDir string `protobuf:"bytes,2,opt,name=scripts_dir,json=scriptsDir,proto3" json:"scripts_dir,omitempty"` - // list of scripts to execute by openocd + // List of scripts to execute by openocd. Scripts []string `protobuf:"bytes,3,rep,name=scripts,proto3" json:"scripts,omitempty"` } func (x *DebugOpenOCDServerConfiguration) Reset() { *x = DebugOpenOCDServerConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -473,7 +676,7 @@ func (x *DebugOpenOCDServerConfiguration) String() string { func (*DebugOpenOCDServerConfiguration) ProtoMessage() {} func (x *DebugOpenOCDServerConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5] + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -486,7 +689,7 @@ func (x *DebugOpenOCDServerConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugOpenOCDServerConfiguration.ProtoReflect.Descriptor instead. func (*DebugOpenOCDServerConfiguration) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{5} + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{7} } func (x *DebugOpenOCDServerConfiguration) GetPath() string { @@ -510,6 +713,54 @@ func (x *DebugOpenOCDServerConfiguration) GetScripts() []string { return nil } +type DebugResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Incoming error output from the debugger tool. + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *DebugResponse_Result) Reset() { + *x = DebugResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DebugResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DebugResponse_Result) ProtoMessage() {} + +func (x *DebugResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DebugResponse_Result.ProtoReflect.Descriptor instead. +func (*DebugResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *DebugResponse_Result) GetError() string { + if x != nil { + return x.Error + } + return "" +} + var File_cc_arduino_cli_commands_v1_debug_proto protoreflect.FileDescriptor var file_cc_arduino_cli_commands_v1_debug_proto_rawDesc = []byte{ @@ -534,7 +785,41 @@ var file_cc_arduino_cli_commands_v1_debug_proto_rawDesc = []byte{ 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, - 0x75, 0x70, 0x74, 0x22, 0xa5, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, + 0x75, 0x70, 0x74, 0x22, 0x9c, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4a, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x1e, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x92, 0x02, 0x0a, 0x17, 0x49, 0x73, 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, + 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x66, 0x71, 0x62, 0x6e, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x10, + 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x6a, 0x0a, 0x18, 0x49, 0x73, 0x44, 0x65, 0x62, + 0x75, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, + 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x12, 0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, + 0x72, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x71, + 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x62, 0x75, 0x67, 0x46, + 0x71, 0x62, 0x6e, 0x22, 0xd0, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, @@ -552,11 +837,10 @@ var file_cc_arduino_cli_commands_v1_debug_proto_rawDesc = []byte{ 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x22, 0x39, 0x0a, 0x0d, 0x44, - 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xcd, 0x03, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x10, 0x64, + 0x65, 0x62, 0x75, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xe4, 0x04, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, @@ -580,26 +864,36 @@ var file_cc_arduino_cli_commands_v1_debug_proto_rawDesc = []byte{ 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x18, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x64, 0x65, 0x62, - 0x75, 0x67, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x44, 0x65, 0x62, 0x75, - 0x67, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, - 0x76, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, - 0x76, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x47, - 0x43, 0x43, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x1f, 0x44, 0x65, 0x62, 0x75, - 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4f, 0x43, 0x44, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x44, 0x69, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, - 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6e, 0x12, 0x6c, 0x0a, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x73, 0x76, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x73, 0x76, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x1a, 0x40, 0x0a, 0x12, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x20, 0x0a, + 0x1e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x47, 0x43, 0x43, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x70, 0x0a, 0x1f, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4f, 0x43, 0x44, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x73, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x73, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, + 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, + 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -614,29 +908,37 @@ func file_cc_arduino_cli_commands_v1_debug_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_debug_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_debug_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_cc_arduino_cli_commands_v1_debug_proto_goTypes = []interface{}{ +var file_cc_arduino_cli_commands_v1_debug_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_cc_arduino_cli_commands_v1_debug_proto_goTypes = []any{ (*DebugRequest)(nil), // 0: cc.arduino.cli.commands.v1.DebugRequest - (*GetDebugConfigRequest)(nil), // 1: cc.arduino.cli.commands.v1.GetDebugConfigRequest - (*DebugResponse)(nil), // 2: cc.arduino.cli.commands.v1.DebugResponse - (*GetDebugConfigResponse)(nil), // 3: cc.arduino.cli.commands.v1.GetDebugConfigResponse - (*DebugGCCToolchainConfiguration)(nil), // 4: cc.arduino.cli.commands.v1.DebugGCCToolchainConfiguration - (*DebugOpenOCDServerConfiguration)(nil), // 5: cc.arduino.cli.commands.v1.DebugOpenOCDServerConfiguration - (*Instance)(nil), // 6: cc.arduino.cli.commands.v1.Instance - (*Port)(nil), // 7: cc.arduino.cli.commands.v1.Port - (*anypb.Any)(nil), // 8: google.protobuf.Any + (*DebugResponse)(nil), // 1: cc.arduino.cli.commands.v1.DebugResponse + (*IsDebugSupportedRequest)(nil), // 2: cc.arduino.cli.commands.v1.IsDebugSupportedRequest + (*IsDebugSupportedResponse)(nil), // 3: cc.arduino.cli.commands.v1.IsDebugSupportedResponse + (*GetDebugConfigRequest)(nil), // 4: cc.arduino.cli.commands.v1.GetDebugConfigRequest + (*GetDebugConfigResponse)(nil), // 5: cc.arduino.cli.commands.v1.GetDebugConfigResponse + (*DebugGCCToolchainConfiguration)(nil), // 6: cc.arduino.cli.commands.v1.DebugGCCToolchainConfiguration + (*DebugOpenOCDServerConfiguration)(nil), // 7: cc.arduino.cli.commands.v1.DebugOpenOCDServerConfiguration + (*DebugResponse_Result)(nil), // 8: cc.arduino.cli.commands.v1.DebugResponse.Result + nil, // 9: cc.arduino.cli.commands.v1.GetDebugConfigResponse.CustomConfigsEntry + (*Instance)(nil), // 10: cc.arduino.cli.commands.v1.Instance + (*Port)(nil), // 11: cc.arduino.cli.commands.v1.Port + (*anypb.Any)(nil), // 12: google.protobuf.Any } var file_cc_arduino_cli_commands_v1_debug_proto_depIdxs = []int32{ - 1, // 0: cc.arduino.cli.commands.v1.DebugRequest.debug_request:type_name -> cc.arduino.cli.commands.v1.GetDebugConfigRequest - 6, // 1: cc.arduino.cli.commands.v1.GetDebugConfigRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 7, // 2: cc.arduino.cli.commands.v1.GetDebugConfigRequest.port:type_name -> cc.arduino.cli.commands.v1.Port - 8, // 3: cc.arduino.cli.commands.v1.GetDebugConfigResponse.toolchain_configuration:type_name -> google.protobuf.Any - 8, // 4: cc.arduino.cli.commands.v1.GetDebugConfigResponse.server_configuration:type_name -> google.protobuf.Any - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 4, // 0: cc.arduino.cli.commands.v1.DebugRequest.debug_request:type_name -> cc.arduino.cli.commands.v1.GetDebugConfigRequest + 8, // 1: cc.arduino.cli.commands.v1.DebugResponse.result:type_name -> cc.arduino.cli.commands.v1.DebugResponse.Result + 10, // 2: cc.arduino.cli.commands.v1.IsDebugSupportedRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 11, // 3: cc.arduino.cli.commands.v1.IsDebugSupportedRequest.port:type_name -> cc.arduino.cli.commands.v1.Port + 10, // 4: cc.arduino.cli.commands.v1.GetDebugConfigRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 11, // 5: cc.arduino.cli.commands.v1.GetDebugConfigRequest.port:type_name -> cc.arduino.cli.commands.v1.Port + 12, // 6: cc.arduino.cli.commands.v1.GetDebugConfigResponse.toolchain_configuration:type_name -> google.protobuf.Any + 12, // 7: cc.arduino.cli.commands.v1.GetDebugConfigResponse.server_configuration:type_name -> google.protobuf.Any + 9, // 8: cc.arduino.cli.commands.v1.GetDebugConfigResponse.custom_configs:type_name -> cc.arduino.cli.commands.v1.GetDebugConfigResponse.CustomConfigsEntry + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_debug_proto_init() } @@ -647,7 +949,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { file_cc_arduino_cli_commands_v1_common_proto_init() file_cc_arduino_cli_commands_v1_port_proto_init() if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DebugRequest); i { case 0: return &v.state @@ -659,8 +961,8 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDebugConfigRequest); i { + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*DebugResponse); i { case 0: return &v.state case 1: @@ -671,8 +973,32 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DebugResponse); i { + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*IsDebugSupportedRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*IsDebugSupportedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*GetDebugConfigRequest); i { case 0: return &v.state case 1: @@ -683,7 +1009,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*GetDebugConfigResponse); i { case 0: return &v.state @@ -695,7 +1021,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DebugGCCToolchainConfiguration); i { case 0: return &v.state @@ -707,7 +1033,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DebugOpenOCDServerConfiguration); i { case 0: return &v.state @@ -719,6 +1045,22 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[8].Exporter = func(v any, i int) any { + switch v := v.(*DebugResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_debug_proto_msgTypes[1].OneofWrappers = []any{ + (*DebugResponse_Data)(nil), + (*DebugResponse_Result_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -726,7 +1068,7 @@ func file_cc_arduino_cli_commands_v1_debug_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_debug_proto_rawDesc, NumEnums: 0, - NumMessages: 6, + NumMessages: 10, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/debug.proto b/rpc/cc/arduino/cli/commands/v1/debug.proto index b183abb0410..c2a89e01d6b 100644 --- a/rpc/cc/arduino/cli/commands/v1/debug.proto +++ b/rpc/cc/arduino/cli/commands/v1/debug.proto @@ -1,28 +1,29 @@ // This file is part of arduino-cli. // -// Copyright 2023 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; package cc.arduino.cli.commands.v1; -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; - import "cc/arduino/cli/commands/v1/common.proto"; import "cc/arduino/cli/commands/v1/port.proto"; import "google/protobuf/any.proto"; +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; + // The top-level message sent by the client for the `Debug` method. // Multiple `DebugRequest` messages can be sent but the first message // must contain a `GetDebugConfigRequest` message to initialize the debug @@ -39,10 +40,51 @@ message DebugRequest { // The data to be sent to the target being monitored. bytes data = 2; - // Set this to true to send and Interrupt signal to the debugger process + // Set this to true to send and Interrupt signal to the debugger process. bool send_interrupt = 3; } +// The streaming response may contain chunks of data from the debugger or an +// error. +message DebugResponse { + message Result { + // Incoming error output from the debugger tool. + string error = 1; + } + oneof message { + // Incoming data from the debugger tool. + bytes data = 1; + // Debugging result. + Result result = 2; + } +} + +message IsDebugSupportedRequest { + // Arduino Core Service instance from the `Init` response. + Instance instance = 1; + // Fully qualified board name of the board in use (e.g., + // `arduino:samd:mkr1000`). + string fqbn = 2; + // Port of the debugger (optional). + Port port = 3; + // Which GDB command interpreter to use. + string interpreter = 4; + // The programmer to use for debugging. + string programmer = 5; + // List of custom debug properties. + repeated string debug_properties = 6; +} + +message IsDebugSupportedResponse { + // True if debugging is supported. + bool debugging_supported = 1; + // This is the same FQBN given in the IsDebugSupportedRequest but cleaned + // up of the board options that do not affect the debugger configuration. + // It may be used by clients/IDE to group slightly different boards option + // selections under the same debug configuration. + string debug_fqbn = 2; +} + message GetDebugConfigRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; @@ -63,50 +105,48 @@ message GetDebugConfigRequest { string import_dir = 8; // The programmer to use for debugging. string programmer = 9; -} - -// -message DebugResponse { - // Incoming data from the debugger tool. - bytes data = 1; - // Incoming error output from the debugger tool. - string error = 2; + // List of custom debug properties. + repeated string debug_properties = 10; } message GetDebugConfigResponse { - // The executable binary to debug + // The executable binary to debug. string executable = 1; - // The toolchain type used for the build (for example "gcc") + // The toolchain type used for the build (for example "gcc"). string toolchain = 2; - // The toolchain directory + // The toolchain directory. string toolchain_path = 3; - // The toolchain architecture prefix (for example "arm-none-eabi-") + // The toolchain architecture prefix (for example "arm-none-eabi"). string toolchain_prefix = 4; // The GDB server type used to connect to the programmer/board (for example - // "openocd") + // "openocd"). string server = 5; - // The GDB server directory + // The GDB server directory. string server_path = 6; - // Extra configuration parameters wrt toolchain + // Extra configuration parameters wrt toolchain. google.protobuf.Any toolchain_configuration = 7; - // Extra configuration parameters wrt GDB server + // Extra configuration parameters wrt GDB server. google.protobuf.Any server_configuration = 8; - // cortex-debug custom JSON configuration, it is provided as is from - // the platform developers. - string cortex_debug_custom_json = 9; - // the SVD file to use + // Custom debugger configurations (not handled directly by Arduino CLI but + // provided for 3rd party plugins/debuggers). The map keys identifies which + // 3rd party plugin/debugger is referred, the map string values contains a + // JSON configuration for it. + map<string, string> custom_configs = 9; + // the SVD file to use. string svd_file = 10; + // The programmer specified in the request. + string programmer = 11; } -// Configurations specific for the 'gcc' toolchain +// Configurations specific for the 'gcc' toolchain. message DebugGCCToolchainConfiguration {} -// Configuration specific for the 'openocd` server +// Configuration specific for the 'openocd` server. message DebugOpenOCDServerConfiguration { - // path to openocd + // Path to openocd. string path = 1; - // path to openocd scripts + // Path to openocd scripts. string scripts_dir = 2; - // list of scripts to execute by openocd + // List of scripts to execute by openocd. repeated string scripts = 3; } diff --git a/rpc/cc/arduino/cli/commands/v1/lib.pb.go b/rpc/cc/arduino/cli/commands/v1/lib.pb.go index 252d31df51e..0910be91d8a 100644 --- a/rpc/cc/arduino/cli/commands/v1/lib.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/lib.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/lib.proto package commands @@ -35,6 +36,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Represent a library installation location. type LibraryInstallLocation int32 const ( @@ -84,6 +86,7 @@ func (LibraryInstallLocation) EnumDescriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{0} } +// Represent the result of the library search. type LibrarySearchStatus int32 const ( @@ -132,6 +135,7 @@ func (LibrarySearchStatus) EnumDescriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{1} } +// Represent the library layout. type LibraryLayout int32 const ( @@ -180,6 +184,7 @@ func (LibraryLayout) EnumDescriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{2} } +// Represent the location of the library. type LibraryLocation int32 const ( @@ -313,8 +318,11 @@ type LibraryDownloadResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the library download. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryDownloadResponse_Progress + // *LibraryDownloadResponse_Result_ + Message isLibraryDownloadResponse_Message `protobuf_oneof:"message"` } func (x *LibraryDownloadResponse) Reset() { @@ -349,13 +357,45 @@ func (*LibraryDownloadResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{1} } +func (m *LibraryDownloadResponse) GetMessage() isLibraryDownloadResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryDownloadResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryDownloadResponse_Progress); ok { return x.Progress } return nil } +func (x *LibraryDownloadResponse) GetResult() *LibraryDownloadResponse_Result { + if x, ok := x.GetMessage().(*LibraryDownloadResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryDownloadResponse_Message interface { + isLibraryDownloadResponse_Message() +} + +type LibraryDownloadResponse_Progress struct { + // Progress of the library download. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type LibraryDownloadResponse_Result_ struct { + // Download result. + Result *LibraryDownloadResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*LibraryDownloadResponse_Progress) isLibraryDownloadResponse_Message() {} + +func (*LibraryDownloadResponse_Result_) isLibraryDownloadResponse_Message() {} + type LibraryInstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -373,7 +413,7 @@ type LibraryInstallRequest struct { // Set to true to skip installation if a different version of the library or // one of its dependencies is already installed, defaults to false. NoOverwrite bool `protobuf:"varint,5,opt,name=no_overwrite,json=noOverwrite,proto3" json:"no_overwrite,omitempty"` - // Install the library and dependencies in the specified location + // Install the library and dependencies in the specified location. InstallLocation LibraryInstallLocation `protobuf:"varint,6,opt,name=install_location,json=installLocation,proto3,enum=cc.arduino.cli.commands.v1.LibraryInstallLocation" json:"install_location,omitempty"` } @@ -456,10 +496,12 @@ type LibraryInstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the library download. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryInstallResponse_Progress + // *LibraryInstallResponse_TaskProgress + // *LibraryInstallResponse_Result_ + Message isLibraryInstallResponse_Message `protobuf_oneof:"message"` } func (x *LibraryInstallResponse) Reset() { @@ -494,20 +536,59 @@ func (*LibraryInstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{3} } +func (m *LibraryInstallResponse) GetMessage() isLibraryInstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryInstallResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryInstallResponse_Progress); ok { return x.Progress } return nil } func (x *LibraryInstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryInstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *LibraryInstallResponse) GetResult() *LibraryInstallResponse_Result { + if x, ok := x.GetMessage().(*LibraryInstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryInstallResponse_Message interface { + isLibraryInstallResponse_Message() +} + +type LibraryInstallResponse_Progress struct { + // Progress of the library download. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type LibraryInstallResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type LibraryInstallResponse_Result_ struct { + // Download result. + Result *LibraryInstallResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*LibraryInstallResponse_Progress) isLibraryInstallResponse_Message() {} + +func (*LibraryInstallResponse_TaskProgress) isLibraryInstallResponse_Message() {} + +func (*LibraryInstallResponse_Result_) isLibraryInstallResponse_Message() {} + type LibraryUpgradeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -580,10 +661,12 @@ type LibraryUpgradeResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the library download. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryUpgradeResponse_Progress + // *LibraryUpgradeResponse_TaskProgress + // *LibraryUpgradeResponse_Result_ + Message isLibraryUpgradeResponse_Message `protobuf_oneof:"message"` } func (x *LibraryUpgradeResponse) Reset() { @@ -618,20 +701,59 @@ func (*LibraryUpgradeResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{5} } +func (m *LibraryUpgradeResponse) GetMessage() isLibraryUpgradeResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryUpgradeResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUpgradeResponse_Progress); ok { return x.Progress } return nil } func (x *LibraryUpgradeResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUpgradeResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *LibraryUpgradeResponse) GetResult() *LibraryUpgradeResponse_Result { + if x, ok := x.GetMessage().(*LibraryUpgradeResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryUpgradeResponse_Message interface { + isLibraryUpgradeResponse_Message() +} + +type LibraryUpgradeResponse_Progress struct { + // Progress of the library download. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type LibraryUpgradeResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type LibraryUpgradeResponse_Result_ struct { + // Download result. + Result *LibraryUpgradeResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*LibraryUpgradeResponse_Progress) isLibraryUpgradeResponse_Message() {} + +func (*LibraryUpgradeResponse_TaskProgress) isLibraryUpgradeResponse_Message() {} + +func (*LibraryUpgradeResponse_Result_) isLibraryUpgradeResponse_Message() {} + type LibraryUninstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -703,8 +825,11 @@ type LibraryUninstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Description of the current stage of the uninstallation. - TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryUninstallResponse_TaskProgress + // *LibraryUninstallResponse_Result_ + Message isLibraryUninstallResponse_Message `protobuf_oneof:"message"` } func (x *LibraryUninstallResponse) Reset() { @@ -739,13 +864,45 @@ func (*LibraryUninstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{7} } +func (m *LibraryUninstallResponse) GetMessage() isLibraryUninstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryUninstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUninstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *LibraryUninstallResponse) GetResult() *LibraryUninstallResponse_Result { + if x, ok := x.GetMessage().(*LibraryUninstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryUninstallResponse_Message interface { + isLibraryUninstallResponse_Message() +} + +type LibraryUninstallResponse_TaskProgress struct { + // Description of the current stage of the uninstallation. + TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type LibraryUninstallResponse_Result_ struct { + // Uninstall result. + Result *LibraryUninstallResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*LibraryUninstallResponse_TaskProgress) isLibraryUninstallResponse_Message() {} + +func (*LibraryUninstallResponse_Result_) isLibraryUninstallResponse_Message() {} + type LibraryUpgradeAllRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -799,10 +956,12 @@ type LibraryUpgradeAllResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progress of the downloads of files needed for the upgrades. - Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3" json:"progress,omitempty"` - // Description of the current stage of the upgrade. - TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *LibraryUpgradeAllResponse_Progress + // *LibraryUpgradeAllResponse_TaskProgress + // *LibraryUpgradeAllResponse_Result_ + Message isLibraryUpgradeAllResponse_Message `protobuf_oneof:"message"` } func (x *LibraryUpgradeAllResponse) Reset() { @@ -837,20 +996,59 @@ func (*LibraryUpgradeAllResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{9} } +func (m *LibraryUpgradeAllResponse) GetMessage() isLibraryUpgradeAllResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *LibraryUpgradeAllResponse) GetProgress() *DownloadProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUpgradeAllResponse_Progress); ok { return x.Progress } return nil } func (x *LibraryUpgradeAllResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*LibraryUpgradeAllResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *LibraryUpgradeAllResponse) GetResult() *LibraryUpgradeAllResponse_Result { + if x, ok := x.GetMessage().(*LibraryUpgradeAllResponse_Result_); ok { + return x.Result + } + return nil +} + +type isLibraryUpgradeAllResponse_Message interface { + isLibraryUpgradeAllResponse_Message() +} + +type LibraryUpgradeAllResponse_Progress struct { + // Progress of the downloads of files needed for the upgrades. + Progress *DownloadProgress `protobuf:"bytes,1,opt,name=progress,proto3,oneof"` +} + +type LibraryUpgradeAllResponse_TaskProgress struct { + // Description of the current stage of the upgrade. + TaskProgress *TaskProgress `protobuf:"bytes,2,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type LibraryUpgradeAllResponse_Result_ struct { + // Upgrade result. + Result *LibraryUpgradeAllResponse_Result `protobuf:"bytes,3,opt,name=result,proto3,oneof"` +} + +func (*LibraryUpgradeAllResponse_Progress) isLibraryUpgradeAllResponse_Message() {} + +func (*LibraryUpgradeAllResponse_TaskProgress) isLibraryUpgradeAllResponse_Message() {} + +func (*LibraryUpgradeAllResponse_Result_) isLibraryUpgradeAllResponse_Message() {} + type LibraryResolveDependenciesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -863,6 +1061,9 @@ type LibraryResolveDependenciesRequest struct { // The version of the library to check dependencies of. If no version is // specified, dependencies of the newest version will be listed. Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + // If true the computed solution will try to keep exising libraries + // at their current version. + DoNotUpdateInstalledLibraries bool `protobuf:"varint,4,opt,name=do_not_update_installed_libraries,json=doNotUpdateInstalledLibraries,proto3" json:"do_not_update_installed_libraries,omitempty"` } func (x *LibraryResolveDependenciesRequest) Reset() { @@ -918,6 +1119,13 @@ func (x *LibraryResolveDependenciesRequest) GetVersion() string { return "" } +func (x *LibraryResolveDependenciesRequest) GetDoNotUpdateInstalledLibraries() bool { + if x != nil { + return x.DoNotUpdateInstalledLibraries + } + return false +} + type LibraryResolveDependenciesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1039,15 +1247,11 @@ type LibrarySearchRequest struct { // Arduino Core Service instance from the `Init` response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Deprecated. Use search_args instead. - // - // Deprecated: Marked as deprecated in cc/arduino/cli/commands/v1/lib.proto. - Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` // Set to true to not populate the releases field in the response (may save a // lot of bandwidth/CPU). - OmitReleasesDetails bool `protobuf:"varint,3,opt,name=omit_releases_details,json=omitReleasesDetails,proto3" json:"omit_releases_details,omitempty"` + OmitReleasesDetails bool `protobuf:"varint,2,opt,name=omit_releases_details,json=omitReleasesDetails,proto3" json:"omit_releases_details,omitempty"` // Keywords for the search. - SearchArgs string `protobuf:"bytes,4,opt,name=search_args,json=searchArgs,proto3" json:"search_args,omitempty"` + SearchArgs string `protobuf:"bytes,3,opt,name=search_args,json=searchArgs,proto3" json:"search_args,omitempty"` } func (x *LibrarySearchRequest) Reset() { @@ -1089,14 +1293,6 @@ func (x *LibrarySearchRequest) GetInstance() *Instance { return nil } -// Deprecated: Marked as deprecated in cc/arduino/cli/commands/v1/lib.proto. -func (x *LibrarySearchRequest) GetQuery() string { - if x != nil { - return x.Query - } - return "" -} - func (x *LibrarySearchRequest) GetOmitReleasesDetails() bool { if x != nil { return x.OmitReleasesDetails @@ -1558,7 +1754,7 @@ type LibraryListRequest struct { // Whether to list only libraries for which there is a newer version than // the installed version available in the libraries index. Updatable bool `protobuf:"varint,3,opt,name=updatable,proto3" json:"updatable,omitempty"` - // If set filters out the libraries not matching name + // If set filters out the libraries not matching name. Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` // By setting this field all duplicate libraries are filtered out leaving // only the libraries that will be used to compile for the specified board @@ -1793,12 +1989,12 @@ type Library struct { Location LibraryLocation `protobuf:"varint,24,opt,name=location,proto3,enum=cc.arduino.cli.commands.v1.LibraryLocation" json:"location,omitempty"` // The library format type. Layout LibraryLayout `protobuf:"varint,25,opt,name=layout,proto3,enum=cc.arduino.cli.commands.v1.LibraryLayout" json:"layout,omitempty"` - // The example sketches provided by the library + // The example sketches provided by the library. Examples []string `protobuf:"bytes,26,rep,name=examples,proto3" json:"examples,omitempty"` // Value of the `includes` field in library.properties or, if missing, the // list of include files available on the library source root directory. ProvidesIncludes []string `protobuf:"bytes,27,rep,name=provides_includes,json=providesIncludes,proto3" json:"provides_includes,omitempty"` - // Map of FQBNs that specifies if library is compatible with this library + // Map of FQBNs that specifies if library is compatible with this library. CompatibleWith map[string]bool `protobuf:"bytes,28,rep,name=compatible_with,json=compatibleWith,proto3" json:"compatible_with,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // This value is set to true if the library is in development and should not // be treated as read-only. This status is determined by the presence of a @@ -2027,7 +2223,7 @@ type ZipLibraryInstallRequest struct { // Arduino Core Service instance from the `Init` response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Path to the archived library + // Path to the archived library. Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` // Set to true to overwrite an already installed library with the same name. // Defaults to false. @@ -2092,8 +2288,11 @@ type ZipLibraryInstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *ZipLibraryInstallResponse_TaskProgress + // *ZipLibraryInstallResponse_Result_ + Message isZipLibraryInstallResponse_Message `protobuf_oneof:"message"` } func (x *ZipLibraryInstallResponse) Reset() { @@ -2128,13 +2327,45 @@ func (*ZipLibraryInstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{24} } +func (m *ZipLibraryInstallResponse) GetMessage() isZipLibraryInstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *ZipLibraryInstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*ZipLibraryInstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } +func (x *ZipLibraryInstallResponse) GetResult() *ZipLibraryInstallResponse_Result { + if x, ok := x.GetMessage().(*ZipLibraryInstallResponse_Result_); ok { + return x.Result + } + return nil +} + +type isZipLibraryInstallResponse_Message interface { + isZipLibraryInstallResponse_Message() +} + +type ZipLibraryInstallResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} + +type ZipLibraryInstallResponse_Result_ struct { + // Installation result. + Result *ZipLibraryInstallResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` +} + +func (*ZipLibraryInstallResponse_TaskProgress) isZipLibraryInstallResponse_Message() {} + +func (*ZipLibraryInstallResponse_Result_) isZipLibraryInstallResponse_Message() {} + type GitLibraryInstallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2142,7 +2373,7 @@ type GitLibraryInstallRequest struct { // Arduino Core Service instance from the `Init` response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // URL to the repository containing the library + // URL to the repository containing the library. Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` // Set to true to overwrite an already installed library with the same name. // Defaults to false. @@ -2207,8 +2438,11 @@ type GitLibraryInstallResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Description of the current stage of the installation. - TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3" json:"task_progress,omitempty"` + // Types that are assignable to Message: + // + // *GitLibraryInstallResponse_TaskProgress + // *GitLibraryInstallResponse_Result_ + Message isGitLibraryInstallResponse_Message `protobuf_oneof:"message"` } func (x *GitLibraryInstallResponse) Reset() { @@ -2243,420 +2477,770 @@ func (*GitLibraryInstallResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{26} } +func (m *GitLibraryInstallResponse) GetMessage() isGitLibraryInstallResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *GitLibraryInstallResponse) GetTaskProgress() *TaskProgress { - if x != nil { + if x, ok := x.GetMessage().(*GitLibraryInstallResponse_TaskProgress); ok { return x.TaskProgress } return nil } -var File_cc_arduino_cli_commands_v1_lib_proto protoreflect.FileDescriptor +func (x *GitLibraryInstallResponse) GetResult() *GitLibraryInstallResponse_Result { + if x, ok := x.GetMessage().(*GitLibraryInstallResponse_Result_); ok { + return x.Result + } + return nil +} -var file_cc_arduino_cli_commands_v1_lib_proto_rawDesc = []byte{ - 0x0a, 0x24, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, - 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x62, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, - 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x88, 0x01, 0x0a, 0x16, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x63, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, - 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0xa2, 0x02, 0x0a, 0x15, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x73, 0x12, 0x21, - 0x0a, 0x0c, 0x6e, 0x6f, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0xb1, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, - 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x73, 0x22, 0xb1, 0x01, - 0x0a, 0x16, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x22, 0x89, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x69, 0x0a, - 0x18, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, - 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x5c, 0x0a, 0x18, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, - 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x93, 0x01, - 0x0a, 0x21, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x22, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x2b, 0x0a, - 0x11, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0xc7, 0x01, 0x0a, 0x14, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x32, 0x0a, 0x15, 0x6f, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, - 0x6f, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, - 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x41, 0x72, 0x67, 0x73, 0x22, 0xab, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, - 0x0a, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x09, - 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0xd8, 0x02, 0x0a, 0x0f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x73, 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x06, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x67, 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf4, 0x03, - 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x18, 0x0a, 0x07, - 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, - 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, - 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4a, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, - 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x73, 0x12, 0x51, 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, - 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x22, 0x56, 0x0a, 0x11, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, - 0x12, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, - 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, - 0x10, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, - 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, - 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0xae, 0x01, - 0x0a, 0x12, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, - 0x62, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x74, - 0x0a, 0x13, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x13, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x52, 0x12, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x69, 0x65, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x3d, 0x0a, 0x07, 0x6c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, - 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0xf8, - 0x08, 0x0a, 0x07, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, - 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, - 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x69, - 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x44, 0x69, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x69, - 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, - 0x69, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x69, - 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x44, 0x69, 0x72, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x64, 0x6f, 0x74, 0x5f, 0x61, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, - 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x6f, 0x74, 0x41, 0x4c, - 0x69, 0x6e, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x64, 0x5f, 0x66, - 0x6c, 0x61, 0x67, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x64, 0x46, 0x6c, - 0x61, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x06, 0x6c, - 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x5f, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x60, - 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x44, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, - 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x5a, 0x69, - 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, - 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, 0x6a, 0x0a, 0x19, 0x5a, 0x69, - 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x18, 0x47, 0x69, 0x74, 0x4c, 0x69, - 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, 0x6a, 0x0a, 0x19, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x2a, 0x61, 0x0a, 0x16, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x1d, 0x4c, - 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x4c, - 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x00, 0x12, 0x24, - 0x0a, 0x20, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, - 0x4c, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, - 0x49, 0x4e, 0x10, 0x01, 0x2a, 0x5a, 0x0a, 0x13, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x1c, 0x4c, - 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, - 0x1d, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, - 0x2a, 0x46, 0x0a, 0x0d, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x61, 0x79, 0x6f, 0x75, - 0x74, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x41, 0x59, - 0x4f, 0x55, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x54, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x49, - 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x5f, 0x52, 0x45, 0x43, - 0x55, 0x52, 0x53, 0x49, 0x56, 0x45, 0x10, 0x01, 0x2a, 0xc3, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x62, - 0x72, 0x61, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, - 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, - 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, - 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, - 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, - 0x52, 0x4d, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x30, 0x0a, 0x2c, - 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x52, 0x45, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x43, 0x45, 0x44, 0x5f, 0x50, 0x4c, 0x41, 0x54, - 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x03, 0x12, 0x1e, - 0x0a, 0x1a, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x10, 0x04, 0x42, 0x48, - 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, - 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +type isGitLibraryInstallResponse_Message interface { + isGitLibraryInstallResponse_Message() } -var ( - file_cc_arduino_cli_commands_v1_lib_proto_rawDescOnce sync.Once - file_cc_arduino_cli_commands_v1_lib_proto_rawDescData = file_cc_arduino_cli_commands_v1_lib_proto_rawDesc -) +type GitLibraryInstallResponse_TaskProgress struct { + // Description of the current stage of the installation. + TaskProgress *TaskProgress `protobuf:"bytes,1,opt,name=task_progress,json=taskProgress,proto3,oneof"` +} -func file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP() []byte { - file_cc_arduino_cli_commands_v1_lib_proto_rawDescOnce.Do(func() { - file_cc_arduino_cli_commands_v1_lib_proto_rawDescData = protoimpl.X.CompressGZIP(file_cc_arduino_cli_commands_v1_lib_proto_rawDescData) - }) - return file_cc_arduino_cli_commands_v1_lib_proto_rawDescData +type GitLibraryInstallResponse_Result_ struct { + // Installation result. + Result *GitLibraryInstallResponse_Result `protobuf:"bytes,2,opt,name=result,proto3,oneof"` } -var file_cc_arduino_cli_commands_v1_lib_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_cc_arduino_cli_commands_v1_lib_proto_msgTypes = make([]protoimpl.MessageInfo, 30) -var file_cc_arduino_cli_commands_v1_lib_proto_goTypes = []interface{}{ +func (*GitLibraryInstallResponse_TaskProgress) isGitLibraryInstallResponse_Message() {} + +func (*GitLibraryInstallResponse_Result_) isGitLibraryInstallResponse_Message() {} + +type LibraryDownloadResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryDownloadResponse_Result) Reset() { + *x = LibraryDownloadResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryDownloadResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryDownloadResponse_Result) ProtoMessage() {} + +func (x *LibraryDownloadResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryDownloadResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryDownloadResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{1, 0} +} + +type LibraryInstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryInstallResponse_Result) Reset() { + *x = LibraryInstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryInstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryInstallResponse_Result) ProtoMessage() {} + +func (x *LibraryInstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryInstallResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryInstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{3, 0} +} + +type LibraryUpgradeResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryUpgradeResponse_Result) Reset() { + *x = LibraryUpgradeResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryUpgradeResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryUpgradeResponse_Result) ProtoMessage() {} + +func (x *LibraryUpgradeResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryUpgradeResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryUpgradeResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{5, 0} +} + +type LibraryUninstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryUninstallResponse_Result) Reset() { + *x = LibraryUninstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryUninstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryUninstallResponse_Result) ProtoMessage() {} + +func (x *LibraryUninstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryUninstallResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryUninstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{7, 0} +} + +type LibraryUpgradeAllResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LibraryUpgradeAllResponse_Result) Reset() { + *x = LibraryUpgradeAllResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LibraryUpgradeAllResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LibraryUpgradeAllResponse_Result) ProtoMessage() {} + +func (x *LibraryUpgradeAllResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LibraryUpgradeAllResponse_Result.ProtoReflect.Descriptor instead. +func (*LibraryUpgradeAllResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{9, 0} +} + +type ZipLibraryInstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ZipLibraryInstallResponse_Result) Reset() { + *x = ZipLibraryInstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZipLibraryInstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZipLibraryInstallResponse_Result) ProtoMessage() {} + +func (x *ZipLibraryInstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ZipLibraryInstallResponse_Result.ProtoReflect.Descriptor instead. +func (*ZipLibraryInstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{24, 0} +} + +type GitLibraryInstallResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GitLibraryInstallResponse_Result) Reset() { + *x = GitLibraryInstallResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GitLibraryInstallResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GitLibraryInstallResponse_Result) ProtoMessage() {} + +func (x *GitLibraryInstallResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GitLibraryInstallResponse_Result.ProtoReflect.Descriptor instead. +func (*GitLibraryInstallResponse_Result) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP(), []int{26, 0} +} + +var File_cc_arduino_cli_commands_v1_lib_proto protoreflect.FileDescriptor + +var file_cc_arduino_cli_commands_v1_lib_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x69, 0x62, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x1a, 0x27, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, + 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x88, 0x01, 0x0a, 0x16, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd0, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x54, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa2, 0x02, 0x0a, 0x15, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x73, 0x12, 0x21, 0x0a, 0x0c, + 0x6e, 0x6f, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x5d, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9f, + 0x02, 0x0a, 0x16, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x53, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x86, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, + 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x73, 0x22, 0x9f, 0x02, 0x0a, 0x16, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x53, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x17, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x5c, 0x0a, 0x18, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, + 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, + 0xa5, 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, + 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, + 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, + 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x56, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, + 0x21, 0x64, 0x6f, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x64, 0x6f, 0x4e, 0x6f, 0x74, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0x7d, 0x0a, 0x22, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, + 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, + 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0xad, + 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x6d, 0x69, + 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6f, 0x6d, 0x69, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1f, 0x0a, + 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x72, 0x67, 0x73, 0x22, 0xab, + 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x09, 0x6c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, + 0x69, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd8, 0x02, 0x0a, + 0x0f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x06, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, + 0x2d, 0x0a, 0x12, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x67, + 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf4, 0x03, 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, + 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, + 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0d, + 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x63, + 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x2b, + 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x73, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x0c, 0x64, + 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, + 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x56, + 0x0a, 0x11, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, + 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x29, 0x0a, + 0x10, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0xae, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, + 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, + 0x6c, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x74, 0x0a, 0x13, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5d, 0x0a, 0x13, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x62, + 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0x97, + 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x12, 0x3d, 0x0a, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, + 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0xf8, 0x08, 0x0a, 0x07, 0x4c, 0x69, 0x62, + 0x72, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, + 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, + 0x73, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x72, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x69, 0x72, 0x12, 0x1f, 0x0a, 0x0b, + 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x69, 0x72, 0x12, 0x2d, 0x0a, + 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0d, + 0x64, 0x6f, 0x74, 0x5f, 0x61, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x6f, 0x74, 0x41, 0x4c, 0x69, 0x6e, 0x6b, 0x61, 0x67, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x64, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x73, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x53, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x17, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x06, + 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, + 0x79, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, + 0x18, 0x1b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, + 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x60, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x18, 0x1c, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, + 0x5f, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x1d, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, + 0x74, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x41, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x5a, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x5a, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x56, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x5a, 0x69, 0x70, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x8c, 0x01, 0x0a, 0x18, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, + 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, + 0xd9, 0x01, 0x0a, 0x19, 0x47, 0x69, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, + 0x0d, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, + 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x56, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x69, 0x74, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0x61, 0x0a, 0x16, 0x4c, + 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x1d, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, + 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x4c, 0x49, 0x42, 0x52, + 0x41, 0x52, 0x59, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x4c, 0x4f, 0x43, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x01, 0x2a, 0x5a, + 0x0a, 0x13, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x1c, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, + 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, + 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x4c, 0x49, 0x42, 0x52, 0x41, + 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x2a, 0x46, 0x0a, 0x0d, 0x4c, 0x69, + 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x17, 0x0a, 0x13, 0x4c, + 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x5f, 0x46, 0x4c, + 0x41, 0x54, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, + 0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x55, 0x52, 0x53, 0x49, 0x56, 0x45, + 0x10, 0x01, 0x2a, 0xc3, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, + 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x54, + 0x49, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, + 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, + 0x25, 0x0a, 0x21, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x42, 0x55, 0x49, + 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x30, 0x0a, 0x2c, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, + 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x46, 0x45, 0x52, + 0x45, 0x4e, 0x43, 0x45, 0x44, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x42, + 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x4c, 0x49, 0x42, 0x52, + 0x41, 0x52, 0x59, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4d, + 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, + 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_cc_arduino_cli_commands_v1_lib_proto_rawDescOnce sync.Once + file_cc_arduino_cli_commands_v1_lib_proto_rawDescData = file_cc_arduino_cli_commands_v1_lib_proto_rawDesc +) + +func file_cc_arduino_cli_commands_v1_lib_proto_rawDescGZIP() []byte { + file_cc_arduino_cli_commands_v1_lib_proto_rawDescOnce.Do(func() { + file_cc_arduino_cli_commands_v1_lib_proto_rawDescData = protoimpl.X.CompressGZIP(file_cc_arduino_cli_commands_v1_lib_proto_rawDescData) + }) + return file_cc_arduino_cli_commands_v1_lib_proto_rawDescData +} + +var file_cc_arduino_cli_commands_v1_lib_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_cc_arduino_cli_commands_v1_lib_proto_msgTypes = make([]protoimpl.MessageInfo, 37) +var file_cc_arduino_cli_commands_v1_lib_proto_goTypes = []any{ (LibraryInstallLocation)(0), // 0: cc.arduino.cli.commands.v1.LibraryInstallLocation (LibrarySearchStatus)(0), // 1: cc.arduino.cli.commands.v1.LibrarySearchStatus (LibraryLayout)(0), // 2: cc.arduino.cli.commands.v1.LibraryLayout @@ -2688,55 +3272,69 @@ var file_cc_arduino_cli_commands_v1_lib_proto_goTypes = []interface{}{ (*ZipLibraryInstallResponse)(nil), // 28: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse (*GitLibraryInstallRequest)(nil), // 29: cc.arduino.cli.commands.v1.GitLibraryInstallRequest (*GitLibraryInstallResponse)(nil), // 30: cc.arduino.cli.commands.v1.GitLibraryInstallResponse - nil, // 31: cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry - nil, // 32: cc.arduino.cli.commands.v1.Library.PropertiesEntry - nil, // 33: cc.arduino.cli.commands.v1.Library.CompatibleWithEntry - (*Instance)(nil), // 34: cc.arduino.cli.commands.v1.Instance - (*DownloadProgress)(nil), // 35: cc.arduino.cli.commands.v1.DownloadProgress - (*TaskProgress)(nil), // 36: cc.arduino.cli.commands.v1.TaskProgress + (*LibraryDownloadResponse_Result)(nil), // 31: cc.arduino.cli.commands.v1.LibraryDownloadResponse.Result + (*LibraryInstallResponse_Result)(nil), // 32: cc.arduino.cli.commands.v1.LibraryInstallResponse.Result + (*LibraryUpgradeResponse_Result)(nil), // 33: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.Result + (*LibraryUninstallResponse_Result)(nil), // 34: cc.arduino.cli.commands.v1.LibraryUninstallResponse.Result + (*LibraryUpgradeAllResponse_Result)(nil), // 35: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.Result + nil, // 36: cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry + nil, // 37: cc.arduino.cli.commands.v1.Library.PropertiesEntry + nil, // 38: cc.arduino.cli.commands.v1.Library.CompatibleWithEntry + (*ZipLibraryInstallResponse_Result)(nil), // 39: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.Result + (*GitLibraryInstallResponse_Result)(nil), // 40: cc.arduino.cli.commands.v1.GitLibraryInstallResponse.Result + (*Instance)(nil), // 41: cc.arduino.cli.commands.v1.Instance + (*DownloadProgress)(nil), // 42: cc.arduino.cli.commands.v1.DownloadProgress + (*TaskProgress)(nil), // 43: cc.arduino.cli.commands.v1.TaskProgress } var file_cc_arduino_cli_commands_v1_lib_proto_depIdxs = []int32{ - 34, // 0: cc.arduino.cli.commands.v1.LibraryDownloadRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 35, // 1: cc.arduino.cli.commands.v1.LibraryDownloadResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 34, // 2: cc.arduino.cli.commands.v1.LibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 0, // 3: cc.arduino.cli.commands.v1.LibraryInstallRequest.install_location:type_name -> cc.arduino.cli.commands.v1.LibraryInstallLocation - 35, // 4: cc.arduino.cli.commands.v1.LibraryInstallResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 36, // 5: cc.arduino.cli.commands.v1.LibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 6: cc.arduino.cli.commands.v1.LibraryUpgradeRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 35, // 7: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 36, // 8: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 9: cc.arduino.cli.commands.v1.LibraryUninstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 36, // 10: cc.arduino.cli.commands.v1.LibraryUninstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 11: cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 35, // 12: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress - 36, // 13: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 14: cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 16, // 15: cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse.dependencies:type_name -> cc.arduino.cli.commands.v1.LibraryDependencyStatus - 34, // 16: cc.arduino.cli.commands.v1.LibrarySearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 19, // 17: cc.arduino.cli.commands.v1.LibrarySearchResponse.libraries:type_name -> cc.arduino.cli.commands.v1.SearchedLibrary - 1, // 18: cc.arduino.cli.commands.v1.LibrarySearchResponse.status:type_name -> cc.arduino.cli.commands.v1.LibrarySearchStatus - 31, // 19: cc.arduino.cli.commands.v1.SearchedLibrary.releases:type_name -> cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry - 20, // 20: cc.arduino.cli.commands.v1.SearchedLibrary.latest:type_name -> cc.arduino.cli.commands.v1.LibraryRelease - 22, // 21: cc.arduino.cli.commands.v1.LibraryRelease.resources:type_name -> cc.arduino.cli.commands.v1.DownloadResource - 21, // 22: cc.arduino.cli.commands.v1.LibraryRelease.dependencies:type_name -> cc.arduino.cli.commands.v1.LibraryDependency - 34, // 23: cc.arduino.cli.commands.v1.LibraryListRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 25, // 24: cc.arduino.cli.commands.v1.LibraryListResponse.installed_libraries:type_name -> cc.arduino.cli.commands.v1.InstalledLibrary - 26, // 25: cc.arduino.cli.commands.v1.InstalledLibrary.library:type_name -> cc.arduino.cli.commands.v1.Library - 20, // 26: cc.arduino.cli.commands.v1.InstalledLibrary.release:type_name -> cc.arduino.cli.commands.v1.LibraryRelease - 32, // 27: cc.arduino.cli.commands.v1.Library.properties:type_name -> cc.arduino.cli.commands.v1.Library.PropertiesEntry - 3, // 28: cc.arduino.cli.commands.v1.Library.location:type_name -> cc.arduino.cli.commands.v1.LibraryLocation - 2, // 29: cc.arduino.cli.commands.v1.Library.layout:type_name -> cc.arduino.cli.commands.v1.LibraryLayout - 33, // 30: cc.arduino.cli.commands.v1.Library.compatible_with:type_name -> cc.arduino.cli.commands.v1.Library.CompatibleWithEntry - 34, // 31: cc.arduino.cli.commands.v1.ZipLibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 36, // 32: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 34, // 33: cc.arduino.cli.commands.v1.GitLibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 36, // 34: cc.arduino.cli.commands.v1.GitLibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress - 20, // 35: cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry.value:type_name -> cc.arduino.cli.commands.v1.LibraryRelease - 36, // [36:36] is the sub-list for method output_type - 36, // [36:36] is the sub-list for method input_type - 36, // [36:36] is the sub-list for extension type_name - 36, // [36:36] is the sub-list for extension extendee - 0, // [0:36] is the sub-list for field type_name + 41, // 0: cc.arduino.cli.commands.v1.LibraryDownloadRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 42, // 1: cc.arduino.cli.commands.v1.LibraryDownloadResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 31, // 2: cc.arduino.cli.commands.v1.LibraryDownloadResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryDownloadResponse.Result + 41, // 3: cc.arduino.cli.commands.v1.LibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 0, // 4: cc.arduino.cli.commands.v1.LibraryInstallRequest.install_location:type_name -> cc.arduino.cli.commands.v1.LibraryInstallLocation + 42, // 5: cc.arduino.cli.commands.v1.LibraryInstallResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 43, // 6: cc.arduino.cli.commands.v1.LibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 32, // 7: cc.arduino.cli.commands.v1.LibraryInstallResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryInstallResponse.Result + 41, // 8: cc.arduino.cli.commands.v1.LibraryUpgradeRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 42, // 9: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 43, // 10: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 33, // 11: cc.arduino.cli.commands.v1.LibraryUpgradeResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryUpgradeResponse.Result + 41, // 12: cc.arduino.cli.commands.v1.LibraryUninstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 43, // 13: cc.arduino.cli.commands.v1.LibraryUninstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 34, // 14: cc.arduino.cli.commands.v1.LibraryUninstallResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryUninstallResponse.Result + 41, // 15: cc.arduino.cli.commands.v1.LibraryUpgradeAllRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 42, // 16: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.progress:type_name -> cc.arduino.cli.commands.v1.DownloadProgress + 43, // 17: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 35, // 18: cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.result:type_name -> cc.arduino.cli.commands.v1.LibraryUpgradeAllResponse.Result + 41, // 19: cc.arduino.cli.commands.v1.LibraryResolveDependenciesRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 16, // 20: cc.arduino.cli.commands.v1.LibraryResolveDependenciesResponse.dependencies:type_name -> cc.arduino.cli.commands.v1.LibraryDependencyStatus + 41, // 21: cc.arduino.cli.commands.v1.LibrarySearchRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 19, // 22: cc.arduino.cli.commands.v1.LibrarySearchResponse.libraries:type_name -> cc.arduino.cli.commands.v1.SearchedLibrary + 1, // 23: cc.arduino.cli.commands.v1.LibrarySearchResponse.status:type_name -> cc.arduino.cli.commands.v1.LibrarySearchStatus + 36, // 24: cc.arduino.cli.commands.v1.SearchedLibrary.releases:type_name -> cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry + 20, // 25: cc.arduino.cli.commands.v1.SearchedLibrary.latest:type_name -> cc.arduino.cli.commands.v1.LibraryRelease + 22, // 26: cc.arduino.cli.commands.v1.LibraryRelease.resources:type_name -> cc.arduino.cli.commands.v1.DownloadResource + 21, // 27: cc.arduino.cli.commands.v1.LibraryRelease.dependencies:type_name -> cc.arduino.cli.commands.v1.LibraryDependency + 41, // 28: cc.arduino.cli.commands.v1.LibraryListRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 25, // 29: cc.arduino.cli.commands.v1.LibraryListResponse.installed_libraries:type_name -> cc.arduino.cli.commands.v1.InstalledLibrary + 26, // 30: cc.arduino.cli.commands.v1.InstalledLibrary.library:type_name -> cc.arduino.cli.commands.v1.Library + 20, // 31: cc.arduino.cli.commands.v1.InstalledLibrary.release:type_name -> cc.arduino.cli.commands.v1.LibraryRelease + 37, // 32: cc.arduino.cli.commands.v1.Library.properties:type_name -> cc.arduino.cli.commands.v1.Library.PropertiesEntry + 3, // 33: cc.arduino.cli.commands.v1.Library.location:type_name -> cc.arduino.cli.commands.v1.LibraryLocation + 2, // 34: cc.arduino.cli.commands.v1.Library.layout:type_name -> cc.arduino.cli.commands.v1.LibraryLayout + 38, // 35: cc.arduino.cli.commands.v1.Library.compatible_with:type_name -> cc.arduino.cli.commands.v1.Library.CompatibleWithEntry + 41, // 36: cc.arduino.cli.commands.v1.ZipLibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 43, // 37: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 39, // 38: cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.result:type_name -> cc.arduino.cli.commands.v1.ZipLibraryInstallResponse.Result + 41, // 39: cc.arduino.cli.commands.v1.GitLibraryInstallRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 43, // 40: cc.arduino.cli.commands.v1.GitLibraryInstallResponse.task_progress:type_name -> cc.arduino.cli.commands.v1.TaskProgress + 40, // 41: cc.arduino.cli.commands.v1.GitLibraryInstallResponse.result:type_name -> cc.arduino.cli.commands.v1.GitLibraryInstallResponse.Result + 20, // 42: cc.arduino.cli.commands.v1.SearchedLibrary.ReleasesEntry.value:type_name -> cc.arduino.cli.commands.v1.LibraryRelease + 43, // [43:43] is the sub-list for method output_type + 43, // [43:43] is the sub-list for method input_type + 43, // [43:43] is the sub-list for extension type_name + 43, // [43:43] is the sub-list for extension extendee + 0, // [0:43] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_lib_proto_init() } @@ -2746,7 +3344,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { } file_cc_arduino_cli_commands_v1_common_proto_init() if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*LibraryDownloadRequest); i { case 0: return &v.state @@ -2758,7 +3356,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*LibraryDownloadResponse); i { case 0: return &v.state @@ -2770,7 +3368,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*LibraryInstallRequest); i { case 0: return &v.state @@ -2782,7 +3380,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*LibraryInstallResponse); i { case 0: return &v.state @@ -2794,7 +3392,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*LibraryUpgradeRequest); i { case 0: return &v.state @@ -2806,7 +3404,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*LibraryUpgradeResponse); i { case 0: return &v.state @@ -2818,7 +3416,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*LibraryUninstallRequest); i { case 0: return &v.state @@ -2830,7 +3428,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*LibraryUninstallResponse); i { case 0: return &v.state @@ -2842,7 +3440,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*LibraryUpgradeAllRequest); i { case 0: return &v.state @@ -2854,7 +3452,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*LibraryUpgradeAllResponse); i { case 0: return &v.state @@ -2866,7 +3464,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*LibraryResolveDependenciesRequest); i { case 0: return &v.state @@ -2878,7 +3476,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*LibraryResolveDependenciesResponse); i { case 0: return &v.state @@ -2890,7 +3488,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*LibraryDependencyStatus); i { case 0: return &v.state @@ -2902,7 +3500,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*LibrarySearchRequest); i { case 0: return &v.state @@ -2914,7 +3512,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*LibrarySearchResponse); i { case 0: return &v.state @@ -2926,7 +3524,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*SearchedLibrary); i { case 0: return &v.state @@ -2938,7 +3536,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*LibraryRelease); i { case 0: return &v.state @@ -2950,7 +3548,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*LibraryDependency); i { case 0: return &v.state @@ -2962,7 +3560,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*DownloadResource); i { case 0: return &v.state @@ -2974,7 +3572,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*LibraryListRequest); i { case 0: return &v.state @@ -2986,7 +3584,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*LibraryListResponse); i { case 0: return &v.state @@ -2998,7 +3596,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*InstalledLibrary); i { case 0: return &v.state @@ -3010,7 +3608,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*Library); i { case 0: return &v.state @@ -3022,7 +3620,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*ZipLibraryInstallRequest); i { case 0: return &v.state @@ -3034,7 +3632,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*ZipLibraryInstallResponse); i { case 0: return &v.state @@ -3046,7 +3644,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*GitLibraryInstallRequest); i { case 0: return &v.state @@ -3058,7 +3656,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*GitLibraryInstallResponse); i { case 0: return &v.state @@ -3070,6 +3668,121 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { return nil } } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[27].Exporter = func(v any, i int) any { + switch v := v.(*LibraryDownloadResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[28].Exporter = func(v any, i int) any { + switch v := v.(*LibraryInstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[29].Exporter = func(v any, i int) any { + switch v := v.(*LibraryUpgradeResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[30].Exporter = func(v any, i int) any { + switch v := v.(*LibraryUninstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[31].Exporter = func(v any, i int) any { + switch v := v.(*LibraryUpgradeAllResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[35].Exporter = func(v any, i int) any { + switch v := v.(*ZipLibraryInstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[36].Exporter = func(v any, i int) any { + switch v := v.(*GitLibraryInstallResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[1].OneofWrappers = []any{ + (*LibraryDownloadResponse_Progress)(nil), + (*LibraryDownloadResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[3].OneofWrappers = []any{ + (*LibraryInstallResponse_Progress)(nil), + (*LibraryInstallResponse_TaskProgress)(nil), + (*LibraryInstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[5].OneofWrappers = []any{ + (*LibraryUpgradeResponse_Progress)(nil), + (*LibraryUpgradeResponse_TaskProgress)(nil), + (*LibraryUpgradeResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[7].OneofWrappers = []any{ + (*LibraryUninstallResponse_TaskProgress)(nil), + (*LibraryUninstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[9].OneofWrappers = []any{ + (*LibraryUpgradeAllResponse_Progress)(nil), + (*LibraryUpgradeAllResponse_TaskProgress)(nil), + (*LibraryUpgradeAllResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[24].OneofWrappers = []any{ + (*ZipLibraryInstallResponse_TaskProgress)(nil), + (*ZipLibraryInstallResponse_Result_)(nil), + } + file_cc_arduino_cli_commands_v1_lib_proto_msgTypes[26].OneofWrappers = []any{ + (*GitLibraryInstallResponse_TaskProgress)(nil), + (*GitLibraryInstallResponse_Result_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -3077,7 +3790,7 @@ func file_cc_arduino_cli_commands_v1_lib_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_lib_proto_rawDesc, NumEnums: 4, - NumMessages: 30, + NumMessages: 37, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/lib.proto b/rpc/cc/arduino/cli/commands/v1/lib.proto index dffcf886153..1878b07ec53 100644 --- a/rpc/cc/arduino/cli/commands/v1/lib.proto +++ b/rpc/cc/arduino/cli/commands/v1/lib.proto @@ -1,26 +1,27 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; package cc.arduino.cli.commands.v1; -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; - import "cc/arduino/cli/commands/v1/common.proto"; +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; + message LibraryDownloadRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; @@ -31,8 +32,15 @@ message LibraryDownloadRequest { } message LibraryDownloadResponse { - // Progress of the library download. - DownloadProgress progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the library download. + DownloadProgress progress = 1; + // Download result. + Result result = 2; + } } message LibraryInstallRequest { @@ -48,10 +56,11 @@ message LibraryInstallRequest { // Set to true to skip installation if a different version of the library or // one of its dependencies is already installed, defaults to false. bool no_overwrite = 5; - // Install the library and dependencies in the specified location + // Install the library and dependencies in the specified location. LibraryInstallLocation install_location = 6; } +// Represent a library installation location. enum LibraryInstallLocation { // In the `libraries` subdirectory of the user directory (sketchbook). This is // the default if not specified. @@ -61,10 +70,17 @@ enum LibraryInstallLocation { } message LibraryInstallResponse { - // Progress of the library download. - DownloadProgress progress = 1; - // Description of the current stage of the installation. - TaskProgress task_progress = 2; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the library download. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; + // Download result. + Result result = 3; + } } message LibraryUpgradeRequest { @@ -78,10 +94,17 @@ message LibraryUpgradeRequest { } message LibraryUpgradeResponse { - // Progress of the library download. - DownloadProgress progress = 1; - // Description of the current stage of the installation. - TaskProgress task_progress = 2; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the library download. + DownloadProgress progress = 1; + // Description of the current stage of the installation. + TaskProgress task_progress = 2; + // Download result. + Result result = 3; + } } message LibraryUninstallRequest { @@ -94,8 +117,15 @@ message LibraryUninstallRequest { } message LibraryUninstallResponse { - // Description of the current stage of the uninstallation. - TaskProgress task_progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Description of the current stage of the uninstallation. + TaskProgress task_progress = 1; + // Uninstall result. + Result result = 2; + } } message LibraryUpgradeAllRequest { @@ -104,10 +134,17 @@ message LibraryUpgradeAllRequest { } message LibraryUpgradeAllResponse { - // Progress of the downloads of files needed for the upgrades. - DownloadProgress progress = 1; - // Description of the current stage of the upgrade. - TaskProgress task_progress = 2; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Progress of the downloads of files needed for the upgrades. + DownloadProgress progress = 1; + // Description of the current stage of the upgrade. + TaskProgress task_progress = 2; + // Upgrade result. + Result result = 3; + } } message LibraryResolveDependenciesRequest { @@ -118,6 +155,9 @@ message LibraryResolveDependenciesRequest { // The version of the library to check dependencies of. If no version is // specified, dependencies of the newest version will be listed. string version = 3; + // If true the computed solution will try to keep exising libraries + // at their current version. + bool do_not_update_installed_libraries = 4; } message LibraryResolveDependenciesResponse { @@ -137,15 +177,14 @@ message LibraryDependencyStatus { message LibrarySearchRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; - // Deprecated. Use search_args instead. - string query = 2 [ deprecated = true ]; // Set to true to not populate the releases field in the response (may save a // lot of bandwidth/CPU). - bool omit_releases_details = 3; + bool omit_releases_details = 2; // Keywords for the search. - string search_args = 4; + string search_args = 3; } +// Represent the result of the library search. enum LibrarySearchStatus { // No search results were found. LIBRARY_SEARCH_STATUS_FAILED = 0; @@ -234,7 +273,7 @@ message LibraryListRequest { // Whether to list only libraries for which there is a newer version than // the installed version available in the libraries index. bool updatable = 3; - // If set filters out the libraries not matching name + // If set filters out the libraries not matching name. string name = 4; // By setting this field all duplicate libraries are filtered out leaving // only the libraries that will be used to compile for the specified board @@ -305,12 +344,12 @@ message Library { LibraryLocation location = 24; // The library format type. LibraryLayout layout = 25; - // The example sketches provided by the library + // The example sketches provided by the library. repeated string examples = 26; // Value of the `includes` field in library.properties or, if missing, the // list of include files available on the library source root directory. repeated string provides_includes = 27; - // Map of FQBNs that specifies if library is compatible with this library + // Map of FQBNs that specifies if library is compatible with this library. map<string, bool> compatible_with = 28; // This value is set to true if the library is in development and should not // be treated as read-only. This status is determined by the presence of a @@ -318,6 +357,7 @@ message Library { bool in_development = 29; } +// Represent the library layout. enum LibraryLayout { // Library is in the 1.0 Arduino library format. LIBRARY_LAYOUT_FLAT = 0; @@ -325,6 +365,7 @@ enum LibraryLayout { LIBRARY_LAYOUT_RECURSIVE = 1; } +// Represent the location of the library. enum LibraryLocation { // In the configured 'builtin.libraries' directory. LIBRARY_LOCATION_BUILTIN = 0; @@ -343,7 +384,7 @@ enum LibraryLocation { message ZipLibraryInstallRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; - // Path to the archived library + // Path to the archived library. string path = 2; // Set to true to overwrite an already installed library with the same name. // Defaults to false. @@ -351,14 +392,21 @@ message ZipLibraryInstallRequest { } message ZipLibraryInstallResponse { - // Description of the current stage of the installation. - TaskProgress task_progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Description of the current stage of the installation. + TaskProgress task_progress = 1; + // Installation result. + Result result = 2; + } } message GitLibraryInstallRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; - // URL to the repository containing the library + // URL to the repository containing the library. string url = 2; // Set to true to overwrite an already installed library with the same name. // Defaults to false. @@ -366,6 +414,13 @@ message GitLibraryInstallRequest { } message GitLibraryInstallResponse { - // Description of the current stage of the installation. - TaskProgress task_progress = 1; + message Result { + // Empty message, reserved for future expansion. + } + oneof message { + // Description of the current stage of the installation. + TaskProgress task_progress = 1; + // Installation result. + Result result = 2; + } } diff --git a/rpc/cc/arduino/cli/commands/v1/monitor.pb.go b/rpc/cc/arduino/cli/commands/v1/monitor.pb.go index 39ce46f4784..465ed17235e 100644 --- a/rpc/cc/arduino/cli/commands/v1/monitor.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/monitor.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/monitor.proto package commands @@ -40,18 +41,13 @@ type MonitorRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Arduino Core Service instance from the `Init` response. - Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - // Port to open, must be filled only on the first request - Port *Port `protobuf:"bytes,2,opt,name=port,proto3" json:"port,omitempty"` - // The board FQBN we are trying to connect to. This is optional, and it's - // needed to disambiguate if more than one platform provides the pluggable - // monitor for a given port protocol. - Fqbn string `protobuf:"bytes,3,opt,name=fqbn,proto3" json:"fqbn,omitempty"` - // Data to send to the port - TxData []byte `protobuf:"bytes,4,opt,name=tx_data,json=txData,proto3" json:"tx_data,omitempty"` - // Port configuration, optional, contains settings of the port to be applied - PortConfiguration *MonitorPortConfiguration `protobuf:"bytes,5,opt,name=port_configuration,json=portConfiguration,proto3" json:"port_configuration,omitempty"` + // Types that are assignable to Message: + // + // *MonitorRequest_OpenRequest + // *MonitorRequest_TxData + // *MonitorRequest_UpdatedConfiguration + // *MonitorRequest_Close + Message isMonitorRequest_Message `protobuf_oneof:"message"` } func (x *MonitorRequest) Reset() { @@ -86,52 +82,94 @@ func (*MonitorRequest) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{0} } -func (x *MonitorRequest) GetInstance() *Instance { - if x != nil { - return x.Instance +func (m *MonitorRequest) GetMessage() isMonitorRequest_Message { + if m != nil { + return m.Message } return nil } -func (x *MonitorRequest) GetPort() *Port { - if x != nil { - return x.Port +func (x *MonitorRequest) GetOpenRequest() *MonitorPortOpenRequest { + if x, ok := x.GetMessage().(*MonitorRequest_OpenRequest); ok { + return x.OpenRequest } return nil } -func (x *MonitorRequest) GetFqbn() string { - if x != nil { - return x.Fqbn - } - return "" -} - func (x *MonitorRequest) GetTxData() []byte { - if x != nil { + if x, ok := x.GetMessage().(*MonitorRequest_TxData); ok { return x.TxData } return nil } -func (x *MonitorRequest) GetPortConfiguration() *MonitorPortConfiguration { - if x != nil { - return x.PortConfiguration +func (x *MonitorRequest) GetUpdatedConfiguration() *MonitorPortConfiguration { + if x, ok := x.GetMessage().(*MonitorRequest_UpdatedConfiguration); ok { + return x.UpdatedConfiguration } return nil } -type MonitorPortConfiguration struct { +func (x *MonitorRequest) GetClose() bool { + if x, ok := x.GetMessage().(*MonitorRequest_Close); ok { + return x.Close + } + return false +} + +type isMonitorRequest_Message interface { + isMonitorRequest_Message() +} + +type MonitorRequest_OpenRequest struct { + // Open request, it must be the first incoming message. + OpenRequest *MonitorPortOpenRequest `protobuf:"bytes,1,opt,name=open_request,json=openRequest,proto3,oneof"` +} + +type MonitorRequest_TxData struct { + // Data to send to the port. + TxData []byte `protobuf:"bytes,2,opt,name=tx_data,json=txData,proto3,oneof"` +} + +type MonitorRequest_UpdatedConfiguration struct { + // Port configuration, contains settings of the port to be changed. + UpdatedConfiguration *MonitorPortConfiguration `protobuf:"bytes,3,opt,name=updated_configuration,json=updatedConfiguration,proto3,oneof"` +} + +type MonitorRequest_Close struct { + // Close message, set to true to gracefully close a port (this ensure + // that the gRPC streaming call is closed by the daemon AFTER the port + // has been successfully closed). + Close bool `protobuf:"varint,4,opt,name=close,proto3,oneof"` +} + +func (*MonitorRequest_OpenRequest) isMonitorRequest_Message() {} + +func (*MonitorRequest_TxData) isMonitorRequest_Message() {} + +func (*MonitorRequest_UpdatedConfiguration) isMonitorRequest_Message() {} + +func (*MonitorRequest_Close) isMonitorRequest_Message() {} + +type MonitorPortOpenRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The port configuration parameters to configure - Settings []*MonitorPortSetting `protobuf:"bytes,1,rep,name=settings,proto3" json:"settings,omitempty"` + // Arduino Core Service instance from the `Init` response. + Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` + // Port to open, must be filled only on the first request. + Port *Port `protobuf:"bytes,2,opt,name=port,proto3" json:"port,omitempty"` + // The board FQBN we are trying to connect to. This is optional, and it's + // needed to disambiguate if more than one platform provides the pluggable + // monitor for a given port protocol. + Fqbn string `protobuf:"bytes,3,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // Port configuration, optional, contains settings of the port to be applied. + PortConfiguration *MonitorPortConfiguration `protobuf:"bytes,4,opt,name=port_configuration,json=portConfiguration,proto3" json:"port_configuration,omitempty"` } -func (x *MonitorPortConfiguration) Reset() { - *x = MonitorPortConfiguration{} +func (x *MonitorPortOpenRequest) Reset() { + *x = MonitorPortOpenRequest{} if protoimpl.UnsafeEnabled { mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -139,13 +177,13 @@ func (x *MonitorPortConfiguration) Reset() { } } -func (x *MonitorPortConfiguration) String() string { +func (x *MonitorPortOpenRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MonitorPortConfiguration) ProtoMessage() {} +func (*MonitorPortOpenRequest) ProtoMessage() {} -func (x *MonitorPortConfiguration) ProtoReflect() protoreflect.Message { +func (x *MonitorPortOpenRequest) ProtoReflect() protoreflect.Message { mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -157,14 +195,35 @@ func (x *MonitorPortConfiguration) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MonitorPortConfiguration.ProtoReflect.Descriptor instead. -func (*MonitorPortConfiguration) Descriptor() ([]byte, []int) { +// Deprecated: Use MonitorPortOpenRequest.ProtoReflect.Descriptor instead. +func (*MonitorPortOpenRequest) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{1} } -func (x *MonitorPortConfiguration) GetSettings() []*MonitorPortSetting { +func (x *MonitorPortOpenRequest) GetInstance() *Instance { if x != nil { - return x.Settings + return x.Instance + } + return nil +} + +func (x *MonitorPortOpenRequest) GetPort() *Port { + if x != nil { + return x.Port + } + return nil +} + +func (x *MonitorPortOpenRequest) GetFqbn() string { + if x != nil { + return x.Fqbn + } + return "" +} + +func (x *MonitorPortOpenRequest) GetPortConfiguration() *MonitorPortConfiguration { + if x != nil { + return x.PortConfiguration } return nil } @@ -174,17 +233,13 @@ type MonitorResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Eventual errors dealing with monitor port - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - // Data received from the port - RxData []byte `protobuf:"bytes,2,opt,name=rx_data,json=rxData,proto3" json:"rx_data,omitempty"` - // Settings applied to the port, may be returned after a port is opened (to - // report the default settings) or after a new port_configuration is sent - // (to report the new settings applied) - AppliedSettings []*MonitorPortSetting `protobuf:"bytes,3,rep,name=applied_settings,json=appliedSettings,proto3" json:"applied_settings,omitempty"` - // A message with this field set to true is sent as soon as the port is - // succesfully opened - Success bool `protobuf:"varint,4,opt,name=success,proto3" json:"success,omitempty"` + // Types that are assignable to Message: + // + // *MonitorResponse_Error + // *MonitorResponse_RxData + // *MonitorResponse_AppliedSettings + // *MonitorResponse_Success + Message isMonitorResponse_Message `protobuf_oneof:"message"` } func (x *MonitorResponse) Reset() { @@ -219,88 +274,75 @@ func (*MonitorResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{2} } +func (m *MonitorResponse) GetMessage() isMonitorResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *MonitorResponse) GetError() string { - if x != nil { + if x, ok := x.GetMessage().(*MonitorResponse_Error); ok { return x.Error } return "" } func (x *MonitorResponse) GetRxData() []byte { - if x != nil { + if x, ok := x.GetMessage().(*MonitorResponse_RxData); ok { return x.RxData } return nil } -func (x *MonitorResponse) GetAppliedSettings() []*MonitorPortSetting { - if x != nil { +func (x *MonitorResponse) GetAppliedSettings() *MonitorPortConfiguration { + if x, ok := x.GetMessage().(*MonitorResponse_AppliedSettings); ok { return x.AppliedSettings } return nil } func (x *MonitorResponse) GetSuccess() bool { - if x != nil { + if x, ok := x.GetMessage().(*MonitorResponse_Success); ok { return x.Success } return false } -type MonitorPortSetting struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SettingId string `protobuf:"bytes,1,opt,name=setting_id,json=settingId,proto3" json:"setting_id,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +type isMonitorResponse_Message interface { + isMonitorResponse_Message() } -func (x *MonitorPortSetting) Reset() { - *x = MonitorPortSetting{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +type MonitorResponse_Error struct { + // Eventual errors dealing with monitor port. + Error string `protobuf:"bytes,1,opt,name=error,proto3,oneof"` } -func (x *MonitorPortSetting) String() string { - return protoimpl.X.MessageStringOf(x) +type MonitorResponse_RxData struct { + // Data received from the port. + RxData []byte `protobuf:"bytes,2,opt,name=rx_data,json=rxData,proto3,oneof"` } -func (*MonitorPortSetting) ProtoMessage() {} - -func (x *MonitorPortSetting) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type MonitorResponse_AppliedSettings struct { + // Settings applied to the port, may be returned after a port is opened (to + // report the default settings) or after a new port_configuration is sent + // (to report the new settings applied). + AppliedSettings *MonitorPortConfiguration `protobuf:"bytes,3,opt,name=applied_settings,json=appliedSettings,proto3,oneof"` } -// Deprecated: Use MonitorPortSetting.ProtoReflect.Descriptor instead. -func (*MonitorPortSetting) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{3} +type MonitorResponse_Success struct { + // A message with this field set to true is sent as soon as the port is + // succesfully opened. + Success bool `protobuf:"varint,4,opt,name=success,proto3,oneof"` } -func (x *MonitorPortSetting) GetSettingId() string { - if x != nil { - return x.SettingId - } - return "" -} +func (*MonitorResponse_Error) isMonitorResponse_Message() {} -func (x *MonitorPortSetting) GetValue() string { - if x != nil { - return x.Value - } - return "" -} +func (*MonitorResponse_RxData) isMonitorResponse_Message() {} + +func (*MonitorResponse_AppliedSettings) isMonitorResponse_Message() {} + +func (*MonitorResponse_Success) isMonitorResponse_Message() {} type EnumerateMonitorPortSettingsRequest struct { state protoimpl.MessageState @@ -320,7 +362,7 @@ type EnumerateMonitorPortSettingsRequest struct { func (x *EnumerateMonitorPortSettingsRequest) Reset() { *x = EnumerateMonitorPortSettingsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -333,7 +375,7 @@ func (x *EnumerateMonitorPortSettingsRequest) String() string { func (*EnumerateMonitorPortSettingsRequest) ProtoMessage() {} func (x *EnumerateMonitorPortSettingsRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -346,7 +388,7 @@ func (x *EnumerateMonitorPortSettingsRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use EnumerateMonitorPortSettingsRequest.ProtoReflect.Descriptor instead. func (*EnumerateMonitorPortSettingsRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{4} + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{3} } func (x *EnumerateMonitorPortSettingsRequest) GetInstance() *Instance { @@ -383,7 +425,7 @@ type EnumerateMonitorPortSettingsResponse struct { func (x *EnumerateMonitorPortSettingsResponse) Reset() { *x = EnumerateMonitorPortSettingsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -396,7 +438,7 @@ func (x *EnumerateMonitorPortSettingsResponse) String() string { func (*EnumerateMonitorPortSettingsResponse) ProtoMessage() {} func (x *EnumerateMonitorPortSettingsResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -409,7 +451,7 @@ func (x *EnumerateMonitorPortSettingsResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use EnumerateMonitorPortSettingsResponse.ProtoReflect.Descriptor instead. func (*EnumerateMonitorPortSettingsResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{5} + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{4} } func (x *EnumerateMonitorPortSettingsResponse) GetSettings() []*MonitorPortSettingDescriptor { @@ -424,22 +466,22 @@ type MonitorPortSettingDescriptor struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The setting identifier + // The setting identifier. SettingId string `protobuf:"bytes,1,opt,name=setting_id,json=settingId,proto3" json:"setting_id,omitempty"` - // A human-readable label of the setting (to be displayed on the GUI) + // A human-readable label of the setting (to be displayed on the GUI). Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` - // The setting type (at the moment only "enum" is avaiable) + // The setting type (at the moment only "enum" is avaiable). Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` - // The values allowed on "enum" types + // The values allowed on "enum" types. EnumValues []string `protobuf:"bytes,4,rep,name=enum_values,json=enumValues,proto3" json:"enum_values,omitempty"` - // The selected or default value + // The selected or default value. Value string `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"` } func (x *MonitorPortSettingDescriptor) Reset() { *x = MonitorPortSettingDescriptor{} if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[6] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -452,7 +494,7 @@ func (x *MonitorPortSettingDescriptor) String() string { func (*MonitorPortSettingDescriptor) ProtoMessage() {} func (x *MonitorPortSettingDescriptor) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[6] + mi := &file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -465,7 +507,7 @@ func (x *MonitorPortSettingDescriptor) ProtoReflect() protoreflect.Message { // Deprecated: Use MonitorPortSettingDescriptor.ProtoReflect.Descriptor instead. func (*MonitorPortSettingDescriptor) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{6} + return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP(), []int{5} } func (x *MonitorPortSettingDescriptor) GetSettingId() string { @@ -515,81 +557,87 @@ var file_cc_arduino_cli_commands_v1_monitor_proto_rawDesc = []byte{ 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9a, 0x02, 0x0a, 0x0e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, 0x63, - 0x0a, 0x12, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x94, 0x02, 0x0a, 0x0e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, + 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x0c, 0x6f, 0x70, 0x65, + 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, + 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x06, 0x74, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, 0x6b, 0x0a, + 0x15, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x50, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x05, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x89, 0x02, + 0x0a, 0x16, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x66, 0x71, 0x62, 0x6e, 0x12, 0x63, 0x0a, 0x12, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xce, 0x01, 0x0a, 0x0f, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x19, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x06, 0x72, 0x78, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x61, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x11, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x18, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, - 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x4a, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, - 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xb5, 0x01, 0x0a, 0x0f, - 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x72, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, 0x59, - 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, - 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, - 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x22, 0x49, 0x0a, 0x12, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, - 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa0, - 0x01, 0x0a, 0x23, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x69, - 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, - 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6f, 0x72, 0x74, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12, 0x0a, - 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, - 0x6e, 0x22, 0x7c, 0x0a, 0x24, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, - 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x08, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, - 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, - 0x9e, 0x01, 0x0a, 0x1c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, - 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, - 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x48, 0x00, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x42, + 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x23, 0x45, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, + 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x72, + 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x7c, 0x0a, + 0x24, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, + 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, + 0x72, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x1c, + 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x48, 0x5a, 0x46, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, + 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, + 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -604,31 +652,32 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_rawDescGZIP() []byte { return file_cc_arduino_cli_commands_v1_monitor_proto_rawDescData } -var file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_cc_arduino_cli_commands_v1_monitor_proto_goTypes = []interface{}{ +var file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_cc_arduino_cli_commands_v1_monitor_proto_goTypes = []any{ (*MonitorRequest)(nil), // 0: cc.arduino.cli.commands.v1.MonitorRequest - (*MonitorPortConfiguration)(nil), // 1: cc.arduino.cli.commands.v1.MonitorPortConfiguration + (*MonitorPortOpenRequest)(nil), // 1: cc.arduino.cli.commands.v1.MonitorPortOpenRequest (*MonitorResponse)(nil), // 2: cc.arduino.cli.commands.v1.MonitorResponse - (*MonitorPortSetting)(nil), // 3: cc.arduino.cli.commands.v1.MonitorPortSetting - (*EnumerateMonitorPortSettingsRequest)(nil), // 4: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest - (*EnumerateMonitorPortSettingsResponse)(nil), // 5: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse - (*MonitorPortSettingDescriptor)(nil), // 6: cc.arduino.cli.commands.v1.MonitorPortSettingDescriptor + (*EnumerateMonitorPortSettingsRequest)(nil), // 3: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest + (*EnumerateMonitorPortSettingsResponse)(nil), // 4: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse + (*MonitorPortSettingDescriptor)(nil), // 5: cc.arduino.cli.commands.v1.MonitorPortSettingDescriptor + (*MonitorPortConfiguration)(nil), // 6: cc.arduino.cli.commands.v1.MonitorPortConfiguration (*Instance)(nil), // 7: cc.arduino.cli.commands.v1.Instance (*Port)(nil), // 8: cc.arduino.cli.commands.v1.Port } var file_cc_arduino_cli_commands_v1_monitor_proto_depIdxs = []int32{ - 7, // 0: cc.arduino.cli.commands.v1.MonitorRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 8, // 1: cc.arduino.cli.commands.v1.MonitorRequest.port:type_name -> cc.arduino.cli.commands.v1.Port - 1, // 2: cc.arduino.cli.commands.v1.MonitorRequest.port_configuration:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration - 3, // 3: cc.arduino.cli.commands.v1.MonitorPortConfiguration.settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSetting - 3, // 4: cc.arduino.cli.commands.v1.MonitorResponse.applied_settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSetting - 7, // 5: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance - 6, // 6: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse.settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSettingDescriptor - 7, // [7:7] is the sub-list for method output_type - 7, // [7:7] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 1, // 0: cc.arduino.cli.commands.v1.MonitorRequest.open_request:type_name -> cc.arduino.cli.commands.v1.MonitorPortOpenRequest + 6, // 1: cc.arduino.cli.commands.v1.MonitorRequest.updated_configuration:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration + 7, // 2: cc.arduino.cli.commands.v1.MonitorPortOpenRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 8, // 3: cc.arduino.cli.commands.v1.MonitorPortOpenRequest.port:type_name -> cc.arduino.cli.commands.v1.Port + 6, // 4: cc.arduino.cli.commands.v1.MonitorPortOpenRequest.port_configuration:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration + 6, // 5: cc.arduino.cli.commands.v1.MonitorResponse.applied_settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortConfiguration + 7, // 6: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest.instance:type_name -> cc.arduino.cli.commands.v1.Instance + 5, // 7: cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse.settings:type_name -> cc.arduino.cli.commands.v1.MonitorPortSettingDescriptor + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_cc_arduino_cli_commands_v1_monitor_proto_init() } @@ -639,7 +688,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { file_cc_arduino_cli_commands_v1_common_proto_init() file_cc_arduino_cli_commands_v1_port_proto_init() if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*MonitorRequest); i { case 0: return &v.state @@ -651,8 +700,8 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MonitorPortConfiguration); i { + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*MonitorPortOpenRequest); i { case 0: return &v.state case 1: @@ -663,7 +712,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*MonitorResponse); i { case 0: return &v.state @@ -675,19 +724,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MonitorPortSetting); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*EnumerateMonitorPortSettingsRequest); i { case 0: return &v.state @@ -699,7 +736,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*EnumerateMonitorPortSettingsResponse); i { case 0: return &v.state @@ -711,7 +748,7 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*MonitorPortSettingDescriptor); i { case 0: return &v.state @@ -724,13 +761,25 @@ func file_cc_arduino_cli_commands_v1_monitor_proto_init() { } } } + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[0].OneofWrappers = []any{ + (*MonitorRequest_OpenRequest)(nil), + (*MonitorRequest_TxData)(nil), + (*MonitorRequest_UpdatedConfiguration)(nil), + (*MonitorRequest_Close)(nil), + } + file_cc_arduino_cli_commands_v1_monitor_proto_msgTypes[2].OneofWrappers = []any{ + (*MonitorResponse_Error)(nil), + (*MonitorResponse_RxData)(nil), + (*MonitorResponse_AppliedSettings)(nil), + (*MonitorResponse_Success)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cc_arduino_cli_commands_v1_monitor_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 6, NumExtensions: 0, NumServices: 0, }, diff --git a/rpc/cc/arduino/cli/commands/v1/monitor.proto b/rpc/cc/arduino/cli/commands/v1/monitor.proto index 68d52fa02ae..58acff0a78d 100644 --- a/rpc/cc/arduino/cli/commands/v1/monitor.proto +++ b/rpc/cc/arduino/cli/commands/v1/monitor.proto @@ -1,64 +1,70 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; package cc.arduino.cli.commands.v1; -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; - import "cc/arduino/cli/commands/v1/common.proto"; import "cc/arduino/cli/commands/v1/port.proto"; +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; + message MonitorRequest { + oneof message { + // Open request, it must be the first incoming message. + MonitorPortOpenRequest open_request = 1; + // Data to send to the port. + bytes tx_data = 2; + // Port configuration, contains settings of the port to be changed. + MonitorPortConfiguration updated_configuration = 3; + // Close message, set to true to gracefully close a port (this ensure + // that the gRPC streaming call is closed by the daemon AFTER the port + // has been successfully closed). + bool close = 4; + } +} + +message MonitorPortOpenRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; - // Port to open, must be filled only on the first request + // Port to open, must be filled only on the first request. Port port = 2; // The board FQBN we are trying to connect to. This is optional, and it's // needed to disambiguate if more than one platform provides the pluggable // monitor for a given port protocol. string fqbn = 3; - // Data to send to the port - bytes tx_data = 4; - // Port configuration, optional, contains settings of the port to be applied - MonitorPortConfiguration port_configuration = 5; -} - -message MonitorPortConfiguration { - // The port configuration parameters to configure - repeated MonitorPortSetting settings = 1; + // Port configuration, optional, contains settings of the port to be applied. + MonitorPortConfiguration port_configuration = 4; } message MonitorResponse { - // Eventual errors dealing with monitor port - string error = 1; - // Data received from the port - bytes rx_data = 2; - // Settings applied to the port, may be returned after a port is opened (to - // report the default settings) or after a new port_configuration is sent - // (to report the new settings applied) - repeated MonitorPortSetting applied_settings = 3; - // A message with this field set to true is sent as soon as the port is - // succesfully opened - bool success = 4; -} - -message MonitorPortSetting { - string setting_id = 1; - string value = 2; + oneof message { + // Eventual errors dealing with monitor port. + string error = 1; + // Data received from the port. + bytes rx_data = 2; + // Settings applied to the port, may be returned after a port is opened (to + // report the default settings) or after a new port_configuration is sent + // (to report the new settings applied). + MonitorPortConfiguration applied_settings = 3; + // A message with this field set to true is sent as soon as the port is + // succesfully opened. + bool success = 4; + } } message EnumerateMonitorPortSettingsRequest { @@ -79,14 +85,14 @@ message EnumerateMonitorPortSettingsResponse { } message MonitorPortSettingDescriptor { - // The setting identifier + // The setting identifier. string setting_id = 1; - // A human-readable label of the setting (to be displayed on the GUI) + // A human-readable label of the setting (to be displayed on the GUI). string label = 2; - // The setting type (at the moment only "enum" is avaiable) + // The setting type (at the moment only "enum" is avaiable). string type = 3; - // The values allowed on "enum" types + // The values allowed on "enum" types. repeated string enum_values = 4; - // The selected or default value + // The selected or default value. string value = 5; } diff --git a/rpc/cc/arduino/cli/commands/v1/port.pb.go b/rpc/cc/arduino/cli/commands/v1/port.pb.go index 6af9d70f214..85a86a521a5 100644 --- a/rpc/cc/arduino/cli/commands/v1/port.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/port.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2021 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/port.proto package commands @@ -35,7 +36,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Port represents a board port that may be used to upload or to monitor a board +// Port represents a board port that may be used to upload or to monitor a board. type Port struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -43,15 +44,15 @@ type Port struct { // Address of the port (e.g., `/dev/ttyACM0`). Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - // The port label to show on the GUI (e.g. "ttyACM0") + // The port label to show on the GUI (e.g. "ttyACM0"). Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` // Protocol of the port (e.g., `serial`, `network`, ...). Protocol string `protobuf:"bytes,3,opt,name=protocol,proto3" json:"protocol,omitempty"` // A human friendly description of the protocol (e.g., "Serial Port (USB)"). ProtocolLabel string `protobuf:"bytes,4,opt,name=protocol_label,json=protocolLabel,proto3" json:"protocol_label,omitempty"` - // A set of properties of the port + // A set of properties of the port. Properties map[string]string `protobuf:"bytes,5,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The hardware ID (serial number) of the board attached to the port + // The hardware ID (serial number) of the board attached to the port. HardwareId string `protobuf:"bytes,6,opt,name=hardware_id,json=hardwareId,proto3" json:"hardware_id,omitempty"` } @@ -176,7 +177,7 @@ func file_cc_arduino_cli_commands_v1_port_proto_rawDescGZIP() []byte { } var file_cc_arduino_cli_commands_v1_port_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_cc_arduino_cli_commands_v1_port_proto_goTypes = []interface{}{ +var file_cc_arduino_cli_commands_v1_port_proto_goTypes = []any{ (*Port)(nil), // 0: cc.arduino.cli.commands.v1.Port nil, // 1: cc.arduino.cli.commands.v1.Port.PropertiesEntry } @@ -195,7 +196,7 @@ func file_cc_arduino_cli_commands_v1_port_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_port_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_port_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Port); i { case 0: return &v.state diff --git a/rpc/cc/arduino/cli/commands/v1/port.proto b/rpc/cc/arduino/cli/commands/v1/port.proto index 1a077a1df5a..ebdcd785fea 100644 --- a/rpc/cc/arduino/cli/commands/v1/port.proto +++ b/rpc/cc/arduino/cli/commands/v1/port.proto @@ -1,17 +1,18 @@ // This file is part of arduino-cli. // -// Copyright 2021 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; @@ -19,18 +20,18 @@ package cc.arduino.cli.commands.v1; option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; -// Port represents a board port that may be used to upload or to monitor a board +// Port represents a board port that may be used to upload or to monitor a board. message Port { // Address of the port (e.g., `/dev/ttyACM0`). string address = 1; - // The port label to show on the GUI (e.g. "ttyACM0") + // The port label to show on the GUI (e.g. "ttyACM0"). string label = 2; // Protocol of the port (e.g., `serial`, `network`, ...). string protocol = 3; // A human friendly description of the protocol (e.g., "Serial Port (USB)"). string protocol_label = 4; - // A set of properties of the port + // A set of properties of the port. map<string, string> properties = 5; - // The hardware ID (serial number) of the board attached to the port + // The hardware ID (serial number) of the board attached to the port. string hardware_id = 6; } diff --git a/rpc/cc/arduino/cli/commands/v1/settings.pb.go b/rpc/cc/arduino/cli/commands/v1/settings.pb.go new file mode 100644 index 00000000000..be6d037a7b9 --- /dev/null +++ b/rpc/cc/arduino/cli/commands/v1/settings.pb.go @@ -0,0 +1,1986 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc (unknown) +// source: cc/arduino/cli/commands/v1/settings.proto + +package commands + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Configuration to apply to the given instance. +// Any missing field will be kept at the default value. +type Configuration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The directories configuration. + Directories *Configuration_Directories `protobuf:"bytes,1,opt,name=directories,proto3" json:"directories,omitempty"` + // The network configuration. + Network *Configuration_Network `protobuf:"bytes,2,opt,name=network,proto3" json:"network,omitempty"` + // The sketch configuration. + Sketch *Configuration_Sketch `protobuf:"bytes,3,opt,name=sketch,proto3" json:"sketch,omitempty"` + // The build cache configuration. + BuildCache *Configuration_BuildCache `protobuf:"bytes,4,opt,name=build_cache,json=buildCache,proto3" json:"build_cache,omitempty"` + // The board manager configuration. + BoardManager *Configuration_BoardManager `protobuf:"bytes,5,opt,name=board_manager,json=boardManager,proto3" json:"board_manager,omitempty"` + // The daemon configuration. + Daemon *Configuration_Daemon `protobuf:"bytes,6,opt,name=daemon,proto3" json:"daemon,omitempty"` + // The console output configuration. + Output *Configuration_Output `protobuf:"bytes,7,opt,name=output,proto3" json:"output,omitempty"` + // The logging configuration. + Logging *Configuration_Logging `protobuf:"bytes,8,opt,name=logging,proto3" json:"logging,omitempty"` + // The library configuration. + Library *Configuration_Library `protobuf:"bytes,9,opt,name=library,proto3" json:"library,omitempty"` + // The updater configuration. + Updater *Configuration_Updater `protobuf:"bytes,10,opt,name=updater,proto3" json:"updater,omitempty"` + // The language locale to use. + Locale *string `protobuf:"bytes,100,opt,name=locale,proto3,oneof" json:"locale,omitempty"` +} + +func (x *Configuration) Reset() { + *x = Configuration{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration) ProtoMessage() {} + +func (x *Configuration) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration.ProtoReflect.Descriptor instead. +func (*Configuration) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0} +} + +func (x *Configuration) GetDirectories() *Configuration_Directories { + if x != nil { + return x.Directories + } + return nil +} + +func (x *Configuration) GetNetwork() *Configuration_Network { + if x != nil { + return x.Network + } + return nil +} + +func (x *Configuration) GetSketch() *Configuration_Sketch { + if x != nil { + return x.Sketch + } + return nil +} + +func (x *Configuration) GetBuildCache() *Configuration_BuildCache { + if x != nil { + return x.BuildCache + } + return nil +} + +func (x *Configuration) GetBoardManager() *Configuration_BoardManager { + if x != nil { + return x.BoardManager + } + return nil +} + +func (x *Configuration) GetDaemon() *Configuration_Daemon { + if x != nil { + return x.Daemon + } + return nil +} + +func (x *Configuration) GetOutput() *Configuration_Output { + if x != nil { + return x.Output + } + return nil +} + +func (x *Configuration) GetLogging() *Configuration_Logging { + if x != nil { + return x.Logging + } + return nil +} + +func (x *Configuration) GetLibrary() *Configuration_Library { + if x != nil { + return x.Library + } + return nil +} + +func (x *Configuration) GetUpdater() *Configuration_Updater { + if x != nil { + return x.Updater + } + return nil +} + +func (x *Configuration) GetLocale() string { + if x != nil && x.Locale != nil { + return *x.Locale + } + return "" +} + +type ConfigurationGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ConfigurationGetRequest) Reset() { + *x = ConfigurationGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationGetRequest) ProtoMessage() {} + +func (x *ConfigurationGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationGetRequest.ProtoReflect.Descriptor instead. +func (*ConfigurationGetRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{1} +} + +type ConfigurationGetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The current configuration. + Configuration *Configuration `protobuf:"bytes,1,opt,name=configuration,proto3" json:"configuration,omitempty"` +} + +func (x *ConfigurationGetResponse) Reset() { + *x = ConfigurationGetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationGetResponse) ProtoMessage() {} + +func (x *ConfigurationGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationGetResponse.ProtoReflect.Descriptor instead. +func (*ConfigurationGetResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{2} +} + +func (x *ConfigurationGetResponse) GetConfiguration() *Configuration { + if x != nil { + return x.Configuration + } + return nil +} + +type ConfigurationSaveRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The format of the encoded settings, allowed values are "json" and "yaml". + SettingsFormat string `protobuf:"bytes,1,opt,name=settings_format,json=settingsFormat,proto3" json:"settings_format,omitempty"` +} + +func (x *ConfigurationSaveRequest) Reset() { + *x = ConfigurationSaveRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationSaveRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationSaveRequest) ProtoMessage() {} + +func (x *ConfigurationSaveRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationSaveRequest.ProtoReflect.Descriptor instead. +func (*ConfigurationSaveRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{3} +} + +func (x *ConfigurationSaveRequest) GetSettingsFormat() string { + if x != nil { + return x.SettingsFormat + } + return "" +} + +type ConfigurationSaveResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The encoded settings. + EncodedSettings string `protobuf:"bytes,1,opt,name=encoded_settings,json=encodedSettings,proto3" json:"encoded_settings,omitempty"` +} + +func (x *ConfigurationSaveResponse) Reset() { + *x = ConfigurationSaveResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationSaveResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationSaveResponse) ProtoMessage() {} + +func (x *ConfigurationSaveResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationSaveResponse.ProtoReflect.Descriptor instead. +func (*ConfigurationSaveResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{4} +} + +func (x *ConfigurationSaveResponse) GetEncodedSettings() string { + if x != nil { + return x.EncodedSettings + } + return "" +} + +type ConfigurationOpenRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The encoded settings. + EncodedSettings string `protobuf:"bytes,1,opt,name=encoded_settings,json=encodedSettings,proto3" json:"encoded_settings,omitempty"` + // The format of the encoded settings, allowed values are "json" and "yaml". + SettingsFormat string `protobuf:"bytes,2,opt,name=settings_format,json=settingsFormat,proto3" json:"settings_format,omitempty"` +} + +func (x *ConfigurationOpenRequest) Reset() { + *x = ConfigurationOpenRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationOpenRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationOpenRequest) ProtoMessage() {} + +func (x *ConfigurationOpenRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationOpenRequest.ProtoReflect.Descriptor instead. +func (*ConfigurationOpenRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{5} +} + +func (x *ConfigurationOpenRequest) GetEncodedSettings() string { + if x != nil { + return x.EncodedSettings + } + return "" +} + +func (x *ConfigurationOpenRequest) GetSettingsFormat() string { + if x != nil { + return x.SettingsFormat + } + return "" +} + +type ConfigurationOpenResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Warnings that occurred while opening the configuration (e.g. unknown keys, + // or invalid values). + Warnings []string `protobuf:"bytes,1,rep,name=warnings,proto3" json:"warnings,omitempty"` +} + +func (x *ConfigurationOpenResponse) Reset() { + *x = ConfigurationOpenResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConfigurationOpenResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConfigurationOpenResponse) ProtoMessage() {} + +func (x *ConfigurationOpenResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConfigurationOpenResponse.ProtoReflect.Descriptor instead. +func (*ConfigurationOpenResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{6} +} + +func (x *ConfigurationOpenResponse) GetWarnings() []string { + if x != nil { + return x.Warnings + } + return nil +} + +type SettingsGetValueRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key to get. + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // The format of the encoded_value (default is "json", allowed values are + // "json" and "yaml). + ValueFormat string `protobuf:"bytes,2,opt,name=value_format,json=valueFormat,proto3" json:"value_format,omitempty"` +} + +func (x *SettingsGetValueRequest) Reset() { + *x = SettingsGetValueRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsGetValueRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsGetValueRequest) ProtoMessage() {} + +func (x *SettingsGetValueRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsGetValueRequest.ProtoReflect.Descriptor instead. +func (*SettingsGetValueRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{7} +} + +func (x *SettingsGetValueRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SettingsGetValueRequest) GetValueFormat() string { + if x != nil { + return x.ValueFormat + } + return "" +} + +type SettingsGetValueResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The value of the key (encoded). + EncodedValue string `protobuf:"bytes,1,opt,name=encoded_value,json=encodedValue,proto3" json:"encoded_value,omitempty"` +} + +func (x *SettingsGetValueResponse) Reset() { + *x = SettingsGetValueResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsGetValueResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsGetValueResponse) ProtoMessage() {} + +func (x *SettingsGetValueResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsGetValueResponse.ProtoReflect.Descriptor instead. +func (*SettingsGetValueResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{8} +} + +func (x *SettingsGetValueResponse) GetEncodedValue() string { + if x != nil { + return x.EncodedValue + } + return "" +} + +type SettingsSetValueRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key to change. + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // The new value (encoded), no objects, only scalar or array of scalars are + // allowed. + EncodedValue string `protobuf:"bytes,2,opt,name=encoded_value,json=encodedValue,proto3" json:"encoded_value,omitempty"` + // The format of the encoded_value (default is "json", allowed values are + // "json", "yaml" and "cli"). + ValueFormat string `protobuf:"bytes,3,opt,name=value_format,json=valueFormat,proto3" json:"value_format,omitempty"` +} + +func (x *SettingsSetValueRequest) Reset() { + *x = SettingsSetValueRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsSetValueRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsSetValueRequest) ProtoMessage() {} + +func (x *SettingsSetValueRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsSetValueRequest.ProtoReflect.Descriptor instead. +func (*SettingsSetValueRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{9} +} + +func (x *SettingsSetValueRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SettingsSetValueRequest) GetEncodedValue() string { + if x != nil { + return x.EncodedValue + } + return "" +} + +func (x *SettingsSetValueRequest) GetValueFormat() string { + if x != nil { + return x.ValueFormat + } + return "" +} + +type SettingsSetValueResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SettingsSetValueResponse) Reset() { + *x = SettingsSetValueResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsSetValueResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsSetValueResponse) ProtoMessage() {} + +func (x *SettingsSetValueResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsSetValueResponse.ProtoReflect.Descriptor instead. +func (*SettingsSetValueResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{10} +} + +type SettingsEnumerateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SettingsEnumerateRequest) Reset() { + *x = SettingsEnumerateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsEnumerateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsEnumerateRequest) ProtoMessage() {} + +func (x *SettingsEnumerateRequest) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsEnumerateRequest.ProtoReflect.Descriptor instead. +func (*SettingsEnumerateRequest) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{11} +} + +type SettingsEnumerateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of key/value pairs. + Entries []*SettingsEnumerateResponse_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` +} + +func (x *SettingsEnumerateResponse) Reset() { + *x = SettingsEnumerateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsEnumerateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsEnumerateResponse) ProtoMessage() {} + +func (x *SettingsEnumerateResponse) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsEnumerateResponse.ProtoReflect.Descriptor instead. +func (*SettingsEnumerateResponse) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{12} +} + +func (x *SettingsEnumerateResponse) GetEntries() []*SettingsEnumerateResponse_Entry { + if x != nil { + return x.Entries + } + return nil +} + +type Configuration_Directories struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Data directory. + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + // User directory. + User string `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` + // Downloads directory. + Downloads string `protobuf:"bytes,3,opt,name=downloads,proto3" json:"downloads,omitempty"` + // The directory where the built-in resources are installed. + Builtin *Configuration_Directories_Builtin `protobuf:"bytes,4,opt,name=builtin,proto3,oneof" json:"builtin,omitempty"` +} + +func (x *Configuration_Directories) Reset() { + *x = Configuration_Directories{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Directories) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Directories) ProtoMessage() {} + +func (x *Configuration_Directories) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Directories.ProtoReflect.Descriptor instead. +func (*Configuration_Directories) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *Configuration_Directories) GetData() string { + if x != nil { + return x.Data + } + return "" +} + +func (x *Configuration_Directories) GetUser() string { + if x != nil { + return x.User + } + return "" +} + +func (x *Configuration_Directories) GetDownloads() string { + if x != nil { + return x.Downloads + } + return "" +} + +func (x *Configuration_Directories) GetBuiltin() *Configuration_Directories_Builtin { + if x != nil { + return x.Builtin + } + return nil +} + +type Configuration_Network struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Extra user-agent information to be appended in network requests. + ExtraUserAgent *string `protobuf:"bytes,1,opt,name=extra_user_agent,json=extraUserAgent,proto3,oneof" json:"extra_user_agent,omitempty"` + // The proxy to use for network requests. + Proxy *string `protobuf:"bytes,2,opt,name=proxy,proto3,oneof" json:"proxy,omitempty"` +} + +func (x *Configuration_Network) Reset() { + *x = Configuration_Network{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Network) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Network) ProtoMessage() {} + +func (x *Configuration_Network) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Network.ProtoReflect.Descriptor instead. +func (*Configuration_Network) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *Configuration_Network) GetExtraUserAgent() string { + if x != nil && x.ExtraUserAgent != nil { + return *x.ExtraUserAgent + } + return "" +} + +func (x *Configuration_Network) GetProxy() string { + if x != nil && x.Proxy != nil { + return *x.Proxy + } + return "" +} + +type Configuration_Sketch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Set to true to always export binaries to the sketch directory. + AlwaysExportBinaries bool `protobuf:"varint,1,opt,name=always_export_binaries,json=alwaysExportBinaries,proto3" json:"always_export_binaries,omitempty"` +} + +func (x *Configuration_Sketch) Reset() { + *x = Configuration_Sketch{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Sketch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Sketch) ProtoMessage() {} + +func (x *Configuration_Sketch) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Sketch.ProtoReflect.Descriptor instead. +func (*Configuration_Sketch) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *Configuration_Sketch) GetAlwaysExportBinaries() bool { + if x != nil { + return x.AlwaysExportBinaries + } + return false +} + +type Configuration_BuildCache struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The minimum number of compilations before the cache is purged. + CompilationsBeforePurge uint64 `protobuf:"varint,1,opt,name=compilations_before_purge,json=compilationsBeforePurge,proto3" json:"compilations_before_purge,omitempty"` + // Time to live of the cache in seconds. + TtlSecs uint64 `protobuf:"varint,2,opt,name=ttl_secs,json=ttlSecs,proto3" json:"ttl_secs,omitempty"` +} + +func (x *Configuration_BuildCache) Reset() { + *x = Configuration_BuildCache{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_BuildCache) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_BuildCache) ProtoMessage() {} + +func (x *Configuration_BuildCache) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_BuildCache.ProtoReflect.Descriptor instead. +func (*Configuration_BuildCache) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 3} +} + +func (x *Configuration_BuildCache) GetCompilationsBeforePurge() uint64 { + if x != nil { + return x.CompilationsBeforePurge + } + return 0 +} + +func (x *Configuration_BuildCache) GetTtlSecs() uint64 { + if x != nil { + return x.TtlSecs + } + return 0 +} + +type Configuration_BoardManager struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Additional URLs to be used for the board manager. + AdditionalUrls []string `protobuf:"bytes,1,rep,name=additional_urls,json=additionalUrls,proto3" json:"additional_urls,omitempty"` +} + +func (x *Configuration_BoardManager) Reset() { + *x = Configuration_BoardManager{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_BoardManager) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_BoardManager) ProtoMessage() {} + +func (x *Configuration_BoardManager) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_BoardManager.ProtoReflect.Descriptor instead. +func (*Configuration_BoardManager) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 4} +} + +func (x *Configuration_BoardManager) GetAdditionalUrls() []string { + if x != nil { + return x.AdditionalUrls + } + return nil +} + +type Configuration_Daemon struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The TCP port of the daemon. + Port string `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` +} + +func (x *Configuration_Daemon) Reset() { + *x = Configuration_Daemon{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Daemon) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Daemon) ProtoMessage() {} + +func (x *Configuration_Daemon) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Daemon.ProtoReflect.Descriptor instead. +func (*Configuration_Daemon) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 5} +} + +func (x *Configuration_Daemon) GetPort() string { + if x != nil { + return x.Port + } + return "" +} + +type Configuration_Output struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Set to true to disable coloring of the output. + NoColor bool `protobuf:"varint,1,opt,name=no_color,json=noColor,proto3" json:"no_color,omitempty"` +} + +func (x *Configuration_Output) Reset() { + *x = Configuration_Output{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Output) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Output) ProtoMessage() {} + +func (x *Configuration_Output) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Output.ProtoReflect.Descriptor instead. +func (*Configuration_Output) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 6} +} + +func (x *Configuration_Output) GetNoColor() bool { + if x != nil { + return x.NoColor + } + return false +} + +type Configuration_Logging struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The logging level. + Level string `protobuf:"bytes,1,opt,name=level,proto3" json:"level,omitempty"` + // The logging format. + Format string `protobuf:"bytes,2,opt,name=format,proto3" json:"format,omitempty"` + // The logging file. + File *string `protobuf:"bytes,3,opt,name=file,proto3,oneof" json:"file,omitempty"` +} + +func (x *Configuration_Logging) Reset() { + *x = Configuration_Logging{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Logging) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Logging) ProtoMessage() {} + +func (x *Configuration_Logging) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Logging.ProtoReflect.Descriptor instead. +func (*Configuration_Logging) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 7} +} + +func (x *Configuration_Logging) GetLevel() string { + if x != nil { + return x.Level + } + return "" +} + +func (x *Configuration_Logging) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *Configuration_Logging) GetFile() string { + if x != nil && x.File != nil { + return *x.File + } + return "" +} + +type Configuration_Library struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Set to true to enable library installation from zip archives or git + // repositories. + EnableUnsafeInstall bool `protobuf:"varint,1,opt,name=enable_unsafe_install,json=enableUnsafeInstall,proto3" json:"enable_unsafe_install,omitempty"` +} + +func (x *Configuration_Library) Reset() { + *x = Configuration_Library{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Library) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Library) ProtoMessage() {} + +func (x *Configuration_Library) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Library.ProtoReflect.Descriptor instead. +func (*Configuration_Library) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 8} +} + +func (x *Configuration_Library) GetEnableUnsafeInstall() bool { + if x != nil { + return x.EnableUnsafeInstall + } + return false +} + +type Configuration_Updater struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Set to true to enable notifications for updates. + EnableNotification bool `protobuf:"varint,1,opt,name=enable_notification,json=enableNotification,proto3" json:"enable_notification,omitempty"` +} + +func (x *Configuration_Updater) Reset() { + *x = Configuration_Updater{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Updater) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Updater) ProtoMessage() {} + +func (x *Configuration_Updater) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Updater.ProtoReflect.Descriptor instead. +func (*Configuration_Updater) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 9} +} + +func (x *Configuration_Updater) GetEnableNotification() bool { + if x != nil { + return x.EnableNotification + } + return false +} + +type Configuration_Directories_Builtin struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The directory where the built-in libraries are installed. + Libraries *string `protobuf:"bytes,1,opt,name=libraries,proto3,oneof" json:"libraries,omitempty"` +} + +func (x *Configuration_Directories_Builtin) Reset() { + *x = Configuration_Directories_Builtin{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Configuration_Directories_Builtin) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Configuration_Directories_Builtin) ProtoMessage() {} + +func (x *Configuration_Directories_Builtin) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Configuration_Directories_Builtin.ProtoReflect.Descriptor instead. +func (*Configuration_Directories_Builtin) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{0, 0, 0} +} + +func (x *Configuration_Directories_Builtin) GetLibraries() string { + if x != nil && x.Libraries != nil { + return *x.Libraries + } + return "" +} + +type SettingsEnumerateResponse_Entry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key. + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // The key type. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *SettingsEnumerateResponse_Entry) Reset() { + *x = SettingsEnumerateResponse_Entry{} + if protoimpl.UnsafeEnabled { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingsEnumerateResponse_Entry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsEnumerateResponse_Entry) ProtoMessage() {} + +func (x *SettingsEnumerateResponse_Entry) ProtoReflect() protoreflect.Message { + mi := &file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsEnumerateResponse_Entry.ProtoReflect.Descriptor instead. +func (*SettingsEnumerateResponse_Entry) Descriptor() ([]byte, []int) { + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP(), []int{12, 0} +} + +func (x *SettingsEnumerateResponse_Entry) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SettingsEnumerateResponse_Entry) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +var File_cc_arduino_cli_commands_v1_settings_proto protoreflect.FileDescriptor + +var file_cc_arduino_cli_commands_v1_settings_proto_rawDesc = []byte{ + 0x0a, 0x29, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, + 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x22, 0xbd, 0x0d, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x0b, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, + 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, + 0x48, 0x0a, 0x06, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x6b, 0x65, 0x74, 0x63, + 0x68, 0x52, 0x06, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x55, 0x0a, 0x0b, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x52, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x12, 0x5b, 0x0a, 0x0d, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x52, + 0x0c, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x48, 0x0a, + 0x06, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x52, + 0x06, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, + 0x67, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x4b, + 0x0a, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x79, 0x52, 0x07, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x4b, 0x0a, 0x07, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x72, 0x52, + 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x18, 0x64, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x88, 0x01, 0x01, 0x1a, 0xf9, 0x01, 0x0a, 0x0b, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x0a, + 0x09, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x5c, 0x0a, 0x07, 0x62, + 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, + 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x69, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x62, + 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x1a, 0x3a, 0x0a, 0x07, 0x42, 0x75, 0x69, + 0x6c, 0x74, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x69, 0x62, 0x72, 0x61, + 0x72, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6c, 0x69, 0x62, 0x72, + 0x61, 0x72, 0x69, 0x65, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, + 0x6e, 0x1a, 0x72, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2d, 0x0a, 0x10, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x55, + 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x70, + 0x72, 0x6f, 0x78, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x70, 0x72, + 0x6f, 0x78, 0x79, 0x88, 0x01, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, + 0x70, 0x72, 0x6f, 0x78, 0x79, 0x1a, 0x3e, 0x0a, 0x06, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, + 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x14, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x69, 0x6e, + 0x61, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x63, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x75, 0x72, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x50, 0x75, 0x72, 0x67, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x74, 0x74, 0x6c, 0x5f, 0x73, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x74, 0x74, 0x6c, 0x53, 0x65, 0x63, 0x73, 0x1a, 0x37, 0x0a, 0x0c, 0x42, 0x6f, + 0x61, 0x72, 0x64, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, + 0x72, 0x6c, 0x73, 0x1a, 0x1c, 0x0a, 0x06, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x1a, 0x23, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6e, + 0x6f, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6e, + 0x6f, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x1a, 0x59, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, + 0x67, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x17, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x04, 0x66, 0x69, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x66, 0x69, 0x6c, + 0x65, 0x1a, 0x3d, 0x0a, 0x07, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x15, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x55, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x1a, 0x3a, 0x0a, 0x07, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x13, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x6b, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, + 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x43, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x22, 0x46, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x6e, 0x0a, 0x18, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x5f, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x37, 0x0a, 0x19, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, + 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, + 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x4e, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x3f, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x73, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x55, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, + 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x2d, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, + 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_cc_arduino_cli_commands_v1_settings_proto_rawDescOnce sync.Once + file_cc_arduino_cli_commands_v1_settings_proto_rawDescData = file_cc_arduino_cli_commands_v1_settings_proto_rawDesc +) + +func file_cc_arduino_cli_commands_v1_settings_proto_rawDescGZIP() []byte { + file_cc_arduino_cli_commands_v1_settings_proto_rawDescOnce.Do(func() { + file_cc_arduino_cli_commands_v1_settings_proto_rawDescData = protoimpl.X.CompressGZIP(file_cc_arduino_cli_commands_v1_settings_proto_rawDescData) + }) + return file_cc_arduino_cli_commands_v1_settings_proto_rawDescData +} + +var file_cc_arduino_cli_commands_v1_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_cc_arduino_cli_commands_v1_settings_proto_goTypes = []any{ + (*Configuration)(nil), // 0: cc.arduino.cli.commands.v1.Configuration + (*ConfigurationGetRequest)(nil), // 1: cc.arduino.cli.commands.v1.ConfigurationGetRequest + (*ConfigurationGetResponse)(nil), // 2: cc.arduino.cli.commands.v1.ConfigurationGetResponse + (*ConfigurationSaveRequest)(nil), // 3: cc.arduino.cli.commands.v1.ConfigurationSaveRequest + (*ConfigurationSaveResponse)(nil), // 4: cc.arduino.cli.commands.v1.ConfigurationSaveResponse + (*ConfigurationOpenRequest)(nil), // 5: cc.arduino.cli.commands.v1.ConfigurationOpenRequest + (*ConfigurationOpenResponse)(nil), // 6: cc.arduino.cli.commands.v1.ConfigurationOpenResponse + (*SettingsGetValueRequest)(nil), // 7: cc.arduino.cli.commands.v1.SettingsGetValueRequest + (*SettingsGetValueResponse)(nil), // 8: cc.arduino.cli.commands.v1.SettingsGetValueResponse + (*SettingsSetValueRequest)(nil), // 9: cc.arduino.cli.commands.v1.SettingsSetValueRequest + (*SettingsSetValueResponse)(nil), // 10: cc.arduino.cli.commands.v1.SettingsSetValueResponse + (*SettingsEnumerateRequest)(nil), // 11: cc.arduino.cli.commands.v1.SettingsEnumerateRequest + (*SettingsEnumerateResponse)(nil), // 12: cc.arduino.cli.commands.v1.SettingsEnumerateResponse + (*Configuration_Directories)(nil), // 13: cc.arduino.cli.commands.v1.Configuration.Directories + (*Configuration_Network)(nil), // 14: cc.arduino.cli.commands.v1.Configuration.Network + (*Configuration_Sketch)(nil), // 15: cc.arduino.cli.commands.v1.Configuration.Sketch + (*Configuration_BuildCache)(nil), // 16: cc.arduino.cli.commands.v1.Configuration.BuildCache + (*Configuration_BoardManager)(nil), // 17: cc.arduino.cli.commands.v1.Configuration.BoardManager + (*Configuration_Daemon)(nil), // 18: cc.arduino.cli.commands.v1.Configuration.Daemon + (*Configuration_Output)(nil), // 19: cc.arduino.cli.commands.v1.Configuration.Output + (*Configuration_Logging)(nil), // 20: cc.arduino.cli.commands.v1.Configuration.Logging + (*Configuration_Library)(nil), // 21: cc.arduino.cli.commands.v1.Configuration.Library + (*Configuration_Updater)(nil), // 22: cc.arduino.cli.commands.v1.Configuration.Updater + (*Configuration_Directories_Builtin)(nil), // 23: cc.arduino.cli.commands.v1.Configuration.Directories.Builtin + (*SettingsEnumerateResponse_Entry)(nil), // 24: cc.arduino.cli.commands.v1.SettingsEnumerateResponse.Entry +} +var file_cc_arduino_cli_commands_v1_settings_proto_depIdxs = []int32{ + 13, // 0: cc.arduino.cli.commands.v1.Configuration.directories:type_name -> cc.arduino.cli.commands.v1.Configuration.Directories + 14, // 1: cc.arduino.cli.commands.v1.Configuration.network:type_name -> cc.arduino.cli.commands.v1.Configuration.Network + 15, // 2: cc.arduino.cli.commands.v1.Configuration.sketch:type_name -> cc.arduino.cli.commands.v1.Configuration.Sketch + 16, // 3: cc.arduino.cli.commands.v1.Configuration.build_cache:type_name -> cc.arduino.cli.commands.v1.Configuration.BuildCache + 17, // 4: cc.arduino.cli.commands.v1.Configuration.board_manager:type_name -> cc.arduino.cli.commands.v1.Configuration.BoardManager + 18, // 5: cc.arduino.cli.commands.v1.Configuration.daemon:type_name -> cc.arduino.cli.commands.v1.Configuration.Daemon + 19, // 6: cc.arduino.cli.commands.v1.Configuration.output:type_name -> cc.arduino.cli.commands.v1.Configuration.Output + 20, // 7: cc.arduino.cli.commands.v1.Configuration.logging:type_name -> cc.arduino.cli.commands.v1.Configuration.Logging + 21, // 8: cc.arduino.cli.commands.v1.Configuration.library:type_name -> cc.arduino.cli.commands.v1.Configuration.Library + 22, // 9: cc.arduino.cli.commands.v1.Configuration.updater:type_name -> cc.arduino.cli.commands.v1.Configuration.Updater + 0, // 10: cc.arduino.cli.commands.v1.ConfigurationGetResponse.configuration:type_name -> cc.arduino.cli.commands.v1.Configuration + 24, // 11: cc.arduino.cli.commands.v1.SettingsEnumerateResponse.entries:type_name -> cc.arduino.cli.commands.v1.SettingsEnumerateResponse.Entry + 23, // 12: cc.arduino.cli.commands.v1.Configuration.Directories.builtin:type_name -> cc.arduino.cli.commands.v1.Configuration.Directories.Builtin + 13, // [13:13] is the sub-list for method output_type + 13, // [13:13] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name +} + +func init() { file_cc_arduino_cli_commands_v1_settings_proto_init() } +func file_cc_arduino_cli_commands_v1_settings_proto_init() { + if File_cc_arduino_cli_commands_v1_settings_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*Configuration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*ConfigurationGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*ConfigurationGetResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*ConfigurationSaveRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*ConfigurationSaveResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*ConfigurationOpenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[6].Exporter = func(v any, i int) any { + switch v := v.(*ConfigurationOpenResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*SettingsGetValueRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[8].Exporter = func(v any, i int) any { + switch v := v.(*SettingsGetValueResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[9].Exporter = func(v any, i int) any { + switch v := v.(*SettingsSetValueRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[10].Exporter = func(v any, i int) any { + switch v := v.(*SettingsSetValueResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[11].Exporter = func(v any, i int) any { + switch v := v.(*SettingsEnumerateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[12].Exporter = func(v any, i int) any { + switch v := v.(*SettingsEnumerateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[13].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_Directories); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[14].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_Network); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[15].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_Sketch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[16].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_BuildCache); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[17].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_BoardManager); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[18].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_Daemon); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[19].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_Output); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[20].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_Logging); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[21].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_Library); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[22].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_Updater); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[23].Exporter = func(v any, i int) any { + switch v := v.(*Configuration_Directories_Builtin); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[24].Exporter = func(v any, i int) any { + switch v := v.(*SettingsEnumerateResponse_Entry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[0].OneofWrappers = []any{} + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[13].OneofWrappers = []any{} + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[14].OneofWrappers = []any{} + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[20].OneofWrappers = []any{} + file_cc_arduino_cli_commands_v1_settings_proto_msgTypes[23].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_cc_arduino_cli_commands_v1_settings_proto_rawDesc, + NumEnums: 0, + NumMessages: 25, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_cc_arduino_cli_commands_v1_settings_proto_goTypes, + DependencyIndexes: file_cc_arduino_cli_commands_v1_settings_proto_depIdxs, + MessageInfos: file_cc_arduino_cli_commands_v1_settings_proto_msgTypes, + }.Build() + File_cc_arduino_cli_commands_v1_settings_proto = out.File + file_cc_arduino_cli_commands_v1_settings_proto_rawDesc = nil + file_cc_arduino_cli_commands_v1_settings_proto_goTypes = nil + file_cc_arduino_cli_commands_v1_settings_proto_depIdxs = nil +} diff --git a/rpc/cc/arduino/cli/commands/v1/settings.proto b/rpc/cc/arduino/cli/commands/v1/settings.proto new file mode 100644 index 00000000000..7d93464ce53 --- /dev/null +++ b/rpc/cc/arduino/cli/commands/v1/settings.proto @@ -0,0 +1,179 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package cc.arduino.cli.commands.v1; + +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; + +// Configuration to apply to the given instance. +// Any missing field will be kept at the default value. +message Configuration { + message Directories { + message Builtin { + // The directory where the built-in libraries are installed. + optional string libraries = 1; + } + // Data directory. + string data = 1; + // User directory. + string user = 2; + // Downloads directory. + string downloads = 3; + // The directory where the built-in resources are installed. + optional Builtin builtin = 4; + } + message Network { + // Extra user-agent information to be appended in network requests. + optional string extra_user_agent = 1; + // The proxy to use for network requests. + optional string proxy = 2; + } + message Sketch { + // Set to true to always export binaries to the sketch directory. + bool always_export_binaries = 1; + } + message BuildCache { + // The minimum number of compilations before the cache is purged. + uint64 compilations_before_purge = 1; + // Time to live of the cache in seconds. + uint64 ttl_secs = 2; + } + message BoardManager { + // Additional URLs to be used for the board manager. + repeated string additional_urls = 1; + } + message Daemon { + // The TCP port of the daemon. + string port = 1; + } + message Output { + // Set to true to disable coloring of the output. + bool no_color = 1; + } + message Logging { + // The logging level. + string level = 1; + // The logging format. + string format = 2; + // The logging file. + optional string file = 3; + } + message Library { + // Set to true to enable library installation from zip archives or git + // repositories. + bool enable_unsafe_install = 1; + } + message Updater { + // Set to true to enable notifications for updates. + bool enable_notification = 1; + } + + // The directories configuration. + Directories directories = 1; + // The network configuration. + Network network = 2; + // The sketch configuration. + Sketch sketch = 3; + // The build cache configuration. + BuildCache build_cache = 4; + // The board manager configuration. + BoardManager board_manager = 5; + // The daemon configuration. + Daemon daemon = 6; + // The console output configuration. + Output output = 7; + // The logging configuration. + Logging logging = 8; + // The library configuration. + Library library = 9; + // The updater configuration. + Updater updater = 10; + + // The language locale to use. + optional string locale = 100; +} + +message ConfigurationGetRequest {} + +message ConfigurationGetResponse { + // The current configuration. + Configuration configuration = 1; +} + +message ConfigurationSaveRequest { + // The format of the encoded settings, allowed values are "json" and "yaml". + string settings_format = 1; +} + +message ConfigurationSaveResponse { + // The encoded settings. + string encoded_settings = 1; +} + +message ConfigurationOpenRequest { + // The encoded settings. + string encoded_settings = 1; + // The format of the encoded settings, allowed values are "json" and "yaml". + string settings_format = 2; +} + +message ConfigurationOpenResponse { + // Warnings that occurred while opening the configuration (e.g. unknown keys, + // or invalid values). + repeated string warnings = 1; +} + +message SettingsGetValueRequest { + // The key to get. + string key = 1; + // The format of the encoded_value (default is "json", allowed values are + // "json" and "yaml). + string value_format = 2; +} + +message SettingsGetValueResponse { + // The value of the key (encoded). + string encoded_value = 1; +} + +message SettingsSetValueRequest { + // The key to change. + string key = 1; + // The new value (encoded), no objects, only scalar or array of scalars are + // allowed. + string encoded_value = 2; + // The format of the encoded_value (default is "json", allowed values are + // "json", "yaml" and "cli"). + string value_format = 3; +} + +message SettingsSetValueResponse {} + +message SettingsEnumerateRequest {} + +message SettingsEnumerateResponse { + message Entry { + // The key. + string key = 1; + // The key type. + string type = 2; + } + + // The list of key/value pairs. + repeated Entry entries = 1; +} diff --git a/rpc/cc/arduino/cli/commands/v1/upload.pb.go b/rpc/cc/arduino/cli/commands/v1/upload.pb.go index 6e544c62d0c..6647c641a54 100644 --- a/rpc/cc/arduino/cli/commands/v1/upload.pb.go +++ b/rpc/cc/arduino/cli/commands/v1/upload.pb.go @@ -1,22 +1,23 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 +// protoc-gen-go v1.34.2 +// protoc (unknown) // source: cc/arduino/cli/commands/v1/upload.proto package commands @@ -76,6 +77,8 @@ type UploadRequest struct { // For more info: // https://arduino.github.io/arduino-cli/latest/platform-specification/#user-provided-fields UserFields map[string]string `protobuf:"bytes,11,rep,name=user_fields,json=userFields,proto3" json:"user_fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // List of custom upload properties. + UploadProperties []string `protobuf:"bytes,12,rep,name=upload_properties,json=uploadProperties,proto3" json:"upload_properties,omitempty"` } func (x *UploadRequest) Reset() { @@ -187,6 +190,13 @@ func (x *UploadRequest) GetUserFields() map[string]string { return nil } +func (x *UploadRequest) GetUploadProperties() []string { + if x != nil { + return x.UploadProperties + } + return nil +} + type UploadResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -275,7 +285,7 @@ type UploadResponse_ErrStream struct { } type UploadResponse_Result struct { - // The upload result + // The upload result. Result *UploadResult `protobuf:"bytes,3,opt,name=result,proto3,oneof"` } @@ -411,6 +421,8 @@ type UploadUsingProgrammerRequest struct { // For more info: // https://arduino.github.io/arduino-cli/latest/platform-specification/#user-provided-fields UserFields map[string]string `protobuf:"bytes,11,rep,name=user_fields,json=userFields,proto3" json:"user_fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // List of custom upload properties. + UploadProperties []string `protobuf:"bytes,12,rep,name=upload_properties,json=uploadProperties,proto3" json:"upload_properties,omitempty"` } func (x *UploadUsingProgrammerRequest) Reset() { @@ -522,15 +534,23 @@ func (x *UploadUsingProgrammerRequest) GetUserFields() map[string]string { return nil } +func (x *UploadUsingProgrammerRequest) GetUploadProperties() []string { + if x != nil { + return x.UploadProperties + } + return nil +} + type UploadUsingProgrammerResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The output of the upload process. - OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3" json:"out_stream,omitempty"` - // The error output of the upload process. - ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3" json:"err_stream,omitempty"` + // Types that are assignable to Message: + // + // *UploadUsingProgrammerResponse_OutStream + // *UploadUsingProgrammerResponse_ErrStream + Message isUploadUsingProgrammerResponse_Message `protobuf_oneof:"message"` } func (x *UploadUsingProgrammerResponse) Reset() { @@ -565,20 +585,45 @@ func (*UploadUsingProgrammerResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_upload_proto_rawDescGZIP(), []int{5} } +func (m *UploadUsingProgrammerResponse) GetMessage() isUploadUsingProgrammerResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *UploadUsingProgrammerResponse) GetOutStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*UploadUsingProgrammerResponse_OutStream); ok { return x.OutStream } return nil } func (x *UploadUsingProgrammerResponse) GetErrStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*UploadUsingProgrammerResponse_ErrStream); ok { return x.ErrStream } return nil } +type isUploadUsingProgrammerResponse_Message interface { + isUploadUsingProgrammerResponse_Message() +} + +type UploadUsingProgrammerResponse_OutStream struct { + // The output of the upload process. + OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3,oneof"` +} + +type UploadUsingProgrammerResponse_ErrStream struct { + // The error output of the upload process. + ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3,oneof"` +} + +func (*UploadUsingProgrammerResponse_OutStream) isUploadUsingProgrammerResponse_Message() {} + +func (*UploadUsingProgrammerResponse_ErrStream) isUploadUsingProgrammerResponse_Message() {} + type BurnBootloaderRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -606,6 +651,8 @@ type BurnBootloaderRequest struct { // For more info: // https://arduino.github.io/arduino-cli/latest/platform-specification/#user-provided-fields UserFields map[string]string `protobuf:"bytes,11,rep,name=user_fields,json=userFields,proto3" json:"user_fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // List of custom upload properties. + UploadProperties []string `protobuf:"bytes,12,rep,name=upload_properties,json=uploadProperties,proto3" json:"upload_properties,omitempty"` } func (x *BurnBootloaderRequest) Reset() { @@ -696,15 +743,23 @@ func (x *BurnBootloaderRequest) GetUserFields() map[string]string { return nil } +func (x *BurnBootloaderRequest) GetUploadProperties() []string { + if x != nil { + return x.UploadProperties + } + return nil +} + type BurnBootloaderResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The output of the burn bootloader process. - OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3" json:"out_stream,omitempty"` - // The error output of the burn bootloader process. - ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3" json:"err_stream,omitempty"` + // Types that are assignable to Message: + // + // *BurnBootloaderResponse_OutStream + // *BurnBootloaderResponse_ErrStream + Message isBurnBootloaderResponse_Message `protobuf_oneof:"message"` } func (x *BurnBootloaderResponse) Reset() { @@ -739,27 +794,54 @@ func (*BurnBootloaderResponse) Descriptor() ([]byte, []int) { return file_cc_arduino_cli_commands_v1_upload_proto_rawDescGZIP(), []int{7} } +func (m *BurnBootloaderResponse) GetMessage() isBurnBootloaderResponse_Message { + if m != nil { + return m.Message + } + return nil +} + func (x *BurnBootloaderResponse) GetOutStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*BurnBootloaderResponse_OutStream); ok { return x.OutStream } return nil } func (x *BurnBootloaderResponse) GetErrStream() []byte { - if x != nil { + if x, ok := x.GetMessage().(*BurnBootloaderResponse_ErrStream); ok { return x.ErrStream } return nil } +type isBurnBootloaderResponse_Message interface { + isBurnBootloaderResponse_Message() +} + +type BurnBootloaderResponse_OutStream struct { + // The output of the burn bootloader process. + OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3,oneof"` +} + +type BurnBootloaderResponse_ErrStream struct { + // The error output of the burn bootloader process. + ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3,oneof"` +} + +func (*BurnBootloaderResponse_OutStream) isBurnBootloaderResponse_Message() {} + +func (*BurnBootloaderResponse_ErrStream) isBurnBootloaderResponse_Message() {} + type ListProgrammersAvailableForUploadRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Arduino Core Service instance from the `Init` response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // Fully qualified board name of the target board (e.g., `arduino:avr:uno`). + Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` } func (x *ListProgrammersAvailableForUploadRequest) Reset() { @@ -813,6 +895,7 @@ type ListProgrammersAvailableForUploadResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // List of programmers supported by the board. Programmers []*Programmer `protobuf:"bytes,1,rep,name=programmers,proto3" json:"programmers,omitempty"` } @@ -860,8 +943,10 @@ type SupportedUserFieldsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Arduino Core Service instance from the `Init` response. Instance *Instance `protobuf:"bytes,1,opt,name=instance,proto3" json:"instance,omitempty"` - Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` + // Fully qualified board name of the target board (e.g., `arduino:avr:uno`). + Fqbn string `protobuf:"bytes,2,opt,name=fqbn,proto3" json:"fqbn,omitempty"` // Protocol that will be used to upload, this information is // necessary to pick the right upload tool for the board specified // with the FQBN. @@ -926,14 +1011,14 @@ type UserField struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Id of the tool that supports this field + // Id of the tool that supports this field. ToolId string `protobuf:"bytes,1,opt,name=tool_id,json=toolId,proto3" json:"tool_id,omitempty"` - // Name used internally to store and retrieve this field + // Name used internally to store and retrieve this field. Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // Label is the text shown to the user when they need to input this field + // Label is the text shown to the user when they need to input this field. Label string `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"` // True if the value of the field must not be shown when typing, for example - // when the user inputs a network password + // when the user inputs a network password. Secret bool `protobuf:"varint,4,opt,name=secret,proto3" json:"secret,omitempty"` } @@ -1058,7 +1143,7 @@ var file_cc_arduino_cli_commands_v1_upload_proto_rawDesc = []byte{ 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82, 0x04, 0x0a, 0x0d, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xaf, 0x04, 0x0a, 0x0d, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, @@ -1086,145 +1171,156 @@ var file_cc_arduino_cli_commands_v1_upload_proto_rawDesc = []byte{ 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0a, 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x55, - 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa1, 0x01, 0x0a, 0x0e, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, - 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, - 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, - 0x42, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x60, - 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x50, - 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x11, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x22, 0x24, 0x0a, 0x22, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x49, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa0, 0x04, 0x0a, 0x1c, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x1f, 0x0a, - 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x34, - 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, + 0x0a, 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x75, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa1, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x6f, 0x75, + 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, + 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, 0x0a, 0x0a, 0x65, + 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, + 0x00, 0x52, 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x42, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, - 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, - 0x69, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x0b, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, - 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x55, 0x73, - 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5d, 0x0a, 0x1d, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x75, - 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, - 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, - 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, - 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0xb1, 0x03, 0x0a, 0x15, 0x42, 0x75, 0x72, - 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x60, 0x0a, 0x0c, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x50, 0x0a, 0x13, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x11, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x24, 0x0a, + 0x22, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x49, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0xcd, 0x04, 0x0a, 0x1c, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, + 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, + 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, + 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x04, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, + 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, + 0x69, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x44, 0x69, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, + 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, + 0x6d, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x69, 0x0a, 0x0b, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x48, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, + 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x75, 0x73, 0x65, + 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x75, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x10, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x6c, 0x0a, 0x1d, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x73, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x65, 0x72, 0x72, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0xde, 0x03, 0x0a, 0x15, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, + 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, + 0x6e, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, + 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, + 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, + 0x75, 0x6e, 0x12, 0x62, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x10, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x65, 0x0a, 0x16, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, + 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0a, + 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x48, 0x00, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, 0x0a, + 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x48, 0x00, 0x52, 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x09, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x28, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, + 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x75, 0x0a, 0x29, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, + 0x65, 0x72, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x1a, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, + 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, - 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, - 0x12, 0x17, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x62, 0x0a, 0x0b, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x72, 0x6e, - 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x3d, 0x0a, - 0x0f, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x56, 0x0a, 0x16, - 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x72, 0x72, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x22, 0x80, 0x01, 0x0a, 0x28, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, - 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x22, 0x75, 0x0a, 0x29, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, - 0x72, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x22, 0x8e, - 0x01, 0x0a, 0x1a, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, - 0x71, 0x62, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, - 0x66, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, - 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x65, 0x0a, 0x1b, 0x53, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x63, - 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x42, 0x48, - 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, - 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x76, 0x31, 0x3b, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x62, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x66, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x65, 0x0a, 0x1b, + 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, + 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, + 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, + 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1240,7 +1336,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_rawDescGZIP() []byte { } var file_cc_arduino_cli_commands_v1_upload_proto_msgTypes = make([]protoimpl.MessageInfo, 16) -var file_cc_arduino_cli_commands_v1_upload_proto_goTypes = []interface{}{ +var file_cc_arduino_cli_commands_v1_upload_proto_goTypes = []any{ (*UploadRequest)(nil), // 0: cc.arduino.cli.commands.v1.UploadRequest (*UploadResponse)(nil), // 1: cc.arduino.cli.commands.v1.UploadResponse (*UploadResult)(nil), // 2: cc.arduino.cli.commands.v1.UploadResult @@ -1292,7 +1388,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { file_cc_arduino_cli_commands_v1_common_proto_init() file_cc_arduino_cli_commands_v1_port_proto_init() if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UploadRequest); i { case 0: return &v.state @@ -1304,7 +1400,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*UploadResponse); i { case 0: return &v.state @@ -1316,7 +1412,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*UploadResult); i { case 0: return &v.state @@ -1328,7 +1424,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ProgrammerIsRequiredForUploadError); i { case 0: return &v.state @@ -1340,7 +1436,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UploadUsingProgrammerRequest); i { case 0: return &v.state @@ -1352,7 +1448,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UploadUsingProgrammerResponse); i { case 0: return &v.state @@ -1364,7 +1460,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*BurnBootloaderRequest); i { case 0: return &v.state @@ -1376,7 +1472,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*BurnBootloaderResponse); i { case 0: return &v.state @@ -1388,7 +1484,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ListProgrammersAvailableForUploadRequest); i { case 0: return &v.state @@ -1400,7 +1496,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*ListProgrammersAvailableForUploadResponse); i { case 0: return &v.state @@ -1412,7 +1508,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*SupportedUserFieldsRequest); i { case 0: return &v.state @@ -1424,7 +1520,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*UserField); i { case 0: return &v.state @@ -1436,7 +1532,7 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { return nil } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*SupportedUserFieldsResponse); i { case 0: return &v.state @@ -1449,11 +1545,19 @@ func file_cc_arduino_cli_commands_v1_upload_proto_init() { } } } - file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[1].OneofWrappers = []any{ (*UploadResponse_OutStream)(nil), (*UploadResponse_ErrStream)(nil), (*UploadResponse_Result)(nil), } + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[5].OneofWrappers = []any{ + (*UploadUsingProgrammerResponse_OutStream)(nil), + (*UploadUsingProgrammerResponse_ErrStream)(nil), + } + file_cc_arduino_cli_commands_v1_upload_proto_msgTypes[7].OneofWrappers = []any{ + (*BurnBootloaderResponse_OutStream)(nil), + (*BurnBootloaderResponse_ErrStream)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/rpc/cc/arduino/cli/commands/v1/upload.proto b/rpc/cc/arduino/cli/commands/v1/upload.proto index 8a2b6b0215d..b23da77f4cf 100644 --- a/rpc/cc/arduino/cli/commands/v1/upload.proto +++ b/rpc/cc/arduino/cli/commands/v1/upload.proto @@ -1,27 +1,28 @@ // This file is part of arduino-cli. // -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) +// Copyright 2024 ARDUINO SA (https://www.arduino.cc/) // -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. syntax = "proto3"; package cc.arduino.cli.commands.v1; -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; - import "cc/arduino/cli/commands/v1/common.proto"; import "cc/arduino/cli/commands/v1/port.proto"; +option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands"; + message UploadRequest { // Arduino Core Service instance from the `Init` response. Instance instance = 1; @@ -59,6 +60,8 @@ message UploadRequest { // For more info: // https://arduino.github.io/arduino-cli/latest/platform-specification/#user-provided-fields map<string, string> user_fields = 11; + // List of custom upload properties. + repeated string upload_properties = 12; } message UploadResponse { @@ -67,7 +70,7 @@ message UploadResponse { bytes out_stream = 1; // The error output of the upload process. bytes err_stream = 2; - // The upload result + // The upload result. UploadResult result = 3; } } @@ -115,13 +118,17 @@ message UploadUsingProgrammerRequest { // For more info: // https://arduino.github.io/arduino-cli/latest/platform-specification/#user-provided-fields map<string, string> user_fields = 11; + // List of custom upload properties. + repeated string upload_properties = 12; } message UploadUsingProgrammerResponse { - // The output of the upload process. - bytes out_stream = 1; - // The error output of the upload process. - bytes err_stream = 2; + oneof message { + // The output of the upload process. + bytes out_stream = 1; + // The error output of the upload process. + bytes err_stream = 2; + } } message BurnBootloaderRequest { @@ -147,26 +154,35 @@ message BurnBootloaderRequest { // For more info: // https://arduino.github.io/arduino-cli/latest/platform-specification/#user-provided-fields map<string, string> user_fields = 11; + // List of custom upload properties. + repeated string upload_properties = 12; } message BurnBootloaderResponse { - // The output of the burn bootloader process. - bytes out_stream = 1; - // The error output of the burn bootloader process. - bytes err_stream = 2; + oneof message { + // The output of the burn bootloader process. + bytes out_stream = 1; + // The error output of the burn bootloader process. + bytes err_stream = 2; + } } message ListProgrammersAvailableForUploadRequest { + // Arduino Core Service instance from the `Init` response. Instance instance = 1; + // Fully qualified board name of the target board (e.g., `arduino:avr:uno`). string fqbn = 2; } message ListProgrammersAvailableForUploadResponse { + // List of programmers supported by the board. repeated Programmer programmers = 1; } message SupportedUserFieldsRequest { + // Arduino Core Service instance from the `Init` response. Instance instance = 1; + // Fully qualified board name of the target board (e.g., `arduino:avr:uno`). string fqbn = 2; // Protocol that will be used to upload, this information is // necessary to pick the right upload tool for the board specified @@ -175,14 +191,14 @@ message SupportedUserFieldsRequest { } message UserField { - // Id of the tool that supports this field + // Id of the tool that supports this field. string tool_id = 1; - // Name used internally to store and retrieve this field + // Name used internally to store and retrieve this field. string name = 2; - // Label is the text shown to the user when they need to input this field + // Label is the text shown to the user when they need to input this field. string label = 3; // True if the value of the field must not be shown when typing, for example - // when the user inputs a network password + // when the user inputs a network password. bool secret = 4; } diff --git a/rpc/cc/arduino/cli/settings/v1/settings.pb.go b/rpc/cc/arduino/cli/settings/v1/settings.pb.go deleted file mode 100644 index 44884cec06f..00000000000 --- a/rpc/cc/arduino/cli/settings/v1/settings.pb.go +++ /dev/null @@ -1,878 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.3 -// source: cc/arduino/cli/settings/v1/settings.proto - -package settings - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type GetAllResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The settings, in JSON format. - JsonData string `protobuf:"bytes,1,opt,name=json_data,json=jsonData,proto3" json:"json_data,omitempty"` -} - -func (x *GetAllResponse) Reset() { - *x = GetAllResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetAllResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetAllResponse) ProtoMessage() {} - -func (x *GetAllResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetAllResponse.ProtoReflect.Descriptor instead. -func (*GetAllResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{0} -} - -func (x *GetAllResponse) GetJsonData() string { - if x != nil { - return x.JsonData - } - return "" -} - -type MergeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The settings, in JSON format. - JsonData string `protobuf:"bytes,1,opt,name=json_data,json=jsonData,proto3" json:"json_data,omitempty"` -} - -func (x *MergeRequest) Reset() { - *x = MergeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MergeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MergeRequest) ProtoMessage() {} - -func (x *MergeRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MergeRequest.ProtoReflect.Descriptor instead. -func (*MergeRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{1} -} - -func (x *MergeRequest) GetJsonData() string { - if x != nil { - return x.JsonData - } - return "" -} - -type GetValueResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The key of the setting. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // The setting, in JSON format. - JsonData string `protobuf:"bytes,2,opt,name=json_data,json=jsonData,proto3" json:"json_data,omitempty"` -} - -func (x *GetValueResponse) Reset() { - *x = GetValueResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetValueResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetValueResponse) ProtoMessage() {} - -func (x *GetValueResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetValueResponse.ProtoReflect.Descriptor instead. -func (*GetValueResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{2} -} - -func (x *GetValueResponse) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *GetValueResponse) GetJsonData() string { - if x != nil { - return x.JsonData - } - return "" -} - -type SetValueRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The key of the setting. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // The setting, in JSON format. - JsonData string `protobuf:"bytes,2,opt,name=json_data,json=jsonData,proto3" json:"json_data,omitempty"` -} - -func (x *SetValueRequest) Reset() { - *x = SetValueRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetValueRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetValueRequest) ProtoMessage() {} - -func (x *SetValueRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetValueRequest.ProtoReflect.Descriptor instead. -func (*SetValueRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{3} -} - -func (x *SetValueRequest) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *SetValueRequest) GetJsonData() string { - if x != nil { - return x.JsonData - } - return "" -} - -type GetAllRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *GetAllRequest) Reset() { - *x = GetAllRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetAllRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetAllRequest) ProtoMessage() {} - -func (x *GetAllRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetAllRequest.ProtoReflect.Descriptor instead. -func (*GetAllRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{4} -} - -type GetValueRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The key of the setting. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` -} - -func (x *GetValueRequest) Reset() { - *x = GetValueRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetValueRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetValueRequest) ProtoMessage() {} - -func (x *GetValueRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetValueRequest.ProtoReflect.Descriptor instead. -func (*GetValueRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{5} -} - -func (x *GetValueRequest) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -type MergeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *MergeResponse) Reset() { - *x = MergeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MergeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MergeResponse) ProtoMessage() {} - -func (x *MergeResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MergeResponse.ProtoReflect.Descriptor instead. -func (*MergeResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{6} -} - -type SetValueResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *SetValueResponse) Reset() { - *x = SetValueResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetValueResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetValueResponse) ProtoMessage() {} - -func (x *SetValueResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetValueResponse.ProtoReflect.Descriptor instead. -func (*SetValueResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{7} -} - -type WriteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Path to settings file (e.g. /path/to/arduino-cli.yaml) - FilePath string `protobuf:"bytes,1,opt,name=file_path,json=filePath,proto3" json:"file_path,omitempty"` -} - -func (x *WriteRequest) Reset() { - *x = WriteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WriteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WriteRequest) ProtoMessage() {} - -func (x *WriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WriteRequest.ProtoReflect.Descriptor instead. -func (*WriteRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{8} -} - -func (x *WriteRequest) GetFilePath() string { - if x != nil { - return x.FilePath - } - return "" -} - -type WriteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *WriteResponse) Reset() { - *x = WriteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WriteResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WriteResponse) ProtoMessage() {} - -func (x *WriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WriteResponse.ProtoReflect.Descriptor instead. -func (*WriteResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{9} -} - -type DeleteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The key of the setting to delete. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` -} - -func (x *DeleteRequest) Reset() { - *x = DeleteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteRequest) ProtoMessage() {} - -func (x *DeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteRequest.ProtoReflect.Descriptor instead. -func (*DeleteRequest) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{10} -} - -func (x *DeleteRequest) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -type DeleteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *DeleteResponse) Reset() { - *x = DeleteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteResponse) ProtoMessage() {} - -func (x *DeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteResponse.ProtoReflect.Descriptor instead. -func (*DeleteResponse) Descriptor() ([]byte, []int) { - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP(), []int{11} -} - -var File_cc_arduino_cli_settings_v1_settings_proto protoreflect.FileDescriptor - -var file_cc_arduino_cli_settings_v1_settings_proto_rawDesc = []byte{ - 0x0a, 0x29, 0x63, 0x63, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, - 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x22, 0x2d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x6c, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, - 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2b, 0x0a, 0x0c, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x22, 0x41, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, - 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6a, - 0x73, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6a, 0x73, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x0f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x23, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x0f, - 0x0a, 0x0d, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x12, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, 0x0c, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x22, 0x0f, 0x0a, 0x0d, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x21, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xdd, 0x04, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x06, 0x47, 0x65, - 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x05, 0x4d, - 0x65, 0x72, 0x67, 0x65, 0x12, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, - 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, - 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, - 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x65, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x2e, 0x63, - 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, - 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x12, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, - 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, - 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x63, 0x2e, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, - 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x63, 0x2f, - 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x2f, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_cc_arduino_cli_settings_v1_settings_proto_rawDescOnce sync.Once - file_cc_arduino_cli_settings_v1_settings_proto_rawDescData = file_cc_arduino_cli_settings_v1_settings_proto_rawDesc -) - -func file_cc_arduino_cli_settings_v1_settings_proto_rawDescGZIP() []byte { - file_cc_arduino_cli_settings_v1_settings_proto_rawDescOnce.Do(func() { - file_cc_arduino_cli_settings_v1_settings_proto_rawDescData = protoimpl.X.CompressGZIP(file_cc_arduino_cli_settings_v1_settings_proto_rawDescData) - }) - return file_cc_arduino_cli_settings_v1_settings_proto_rawDescData -} - -var file_cc_arduino_cli_settings_v1_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_cc_arduino_cli_settings_v1_settings_proto_goTypes = []interface{}{ - (*GetAllResponse)(nil), // 0: cc.arduino.cli.settings.v1.GetAllResponse - (*MergeRequest)(nil), // 1: cc.arduino.cli.settings.v1.MergeRequest - (*GetValueResponse)(nil), // 2: cc.arduino.cli.settings.v1.GetValueResponse - (*SetValueRequest)(nil), // 3: cc.arduino.cli.settings.v1.SetValueRequest - (*GetAllRequest)(nil), // 4: cc.arduino.cli.settings.v1.GetAllRequest - (*GetValueRequest)(nil), // 5: cc.arduino.cli.settings.v1.GetValueRequest - (*MergeResponse)(nil), // 6: cc.arduino.cli.settings.v1.MergeResponse - (*SetValueResponse)(nil), // 7: cc.arduino.cli.settings.v1.SetValueResponse - (*WriteRequest)(nil), // 8: cc.arduino.cli.settings.v1.WriteRequest - (*WriteResponse)(nil), // 9: cc.arduino.cli.settings.v1.WriteResponse - (*DeleteRequest)(nil), // 10: cc.arduino.cli.settings.v1.DeleteRequest - (*DeleteResponse)(nil), // 11: cc.arduino.cli.settings.v1.DeleteResponse -} -var file_cc_arduino_cli_settings_v1_settings_proto_depIdxs = []int32{ - 4, // 0: cc.arduino.cli.settings.v1.SettingsService.GetAll:input_type -> cc.arduino.cli.settings.v1.GetAllRequest - 1, // 1: cc.arduino.cli.settings.v1.SettingsService.Merge:input_type -> cc.arduino.cli.settings.v1.MergeRequest - 5, // 2: cc.arduino.cli.settings.v1.SettingsService.GetValue:input_type -> cc.arduino.cli.settings.v1.GetValueRequest - 3, // 3: cc.arduino.cli.settings.v1.SettingsService.SetValue:input_type -> cc.arduino.cli.settings.v1.SetValueRequest - 8, // 4: cc.arduino.cli.settings.v1.SettingsService.Write:input_type -> cc.arduino.cli.settings.v1.WriteRequest - 10, // 5: cc.arduino.cli.settings.v1.SettingsService.Delete:input_type -> cc.arduino.cli.settings.v1.DeleteRequest - 0, // 6: cc.arduino.cli.settings.v1.SettingsService.GetAll:output_type -> cc.arduino.cli.settings.v1.GetAllResponse - 6, // 7: cc.arduino.cli.settings.v1.SettingsService.Merge:output_type -> cc.arduino.cli.settings.v1.MergeResponse - 2, // 8: cc.arduino.cli.settings.v1.SettingsService.GetValue:output_type -> cc.arduino.cli.settings.v1.GetValueResponse - 7, // 9: cc.arduino.cli.settings.v1.SettingsService.SetValue:output_type -> cc.arduino.cli.settings.v1.SetValueResponse - 9, // 10: cc.arduino.cli.settings.v1.SettingsService.Write:output_type -> cc.arduino.cli.settings.v1.WriteResponse - 11, // 11: cc.arduino.cli.settings.v1.SettingsService.Delete:output_type -> cc.arduino.cli.settings.v1.DeleteResponse - 6, // [6:12] is the sub-list for method output_type - 0, // [0:6] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_cc_arduino_cli_settings_v1_settings_proto_init() } -func file_cc_arduino_cli_settings_v1_settings_proto_init() { - if File_cc_arduino_cli_settings_v1_settings_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MergeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetValueResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetValueRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetValueRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MergeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetValueResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cc_arduino_cli_settings_v1_settings_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_cc_arduino_cli_settings_v1_settings_proto_rawDesc, - NumEnums: 0, - NumMessages: 12, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_cc_arduino_cli_settings_v1_settings_proto_goTypes, - DependencyIndexes: file_cc_arduino_cli_settings_v1_settings_proto_depIdxs, - MessageInfos: file_cc_arduino_cli_settings_v1_settings_proto_msgTypes, - }.Build() - File_cc_arduino_cli_settings_v1_settings_proto = out.File - file_cc_arduino_cli_settings_v1_settings_proto_rawDesc = nil - file_cc_arduino_cli_settings_v1_settings_proto_goTypes = nil - file_cc_arduino_cli_settings_v1_settings_proto_depIdxs = nil -} diff --git a/rpc/cc/arduino/cli/settings/v1/settings.proto b/rpc/cc/arduino/cli/settings/v1/settings.proto deleted file mode 100644 index c05bfbef533..00000000000 --- a/rpc/cc/arduino/cli/settings/v1/settings.proto +++ /dev/null @@ -1,91 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -syntax = "proto3"; - -package cc.arduino.cli.settings.v1; - -option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1;settings"; - -// The SettingsService provides an interface to Arduino CLI configuration -// options -service SettingsService { - // List all the settings. - rpc GetAll(GetAllRequest) returns (GetAllResponse); - - // Set multiple settings values at once. - rpc Merge(MergeRequest) returns (MergeResponse); - - // Get the value of a specific setting. - rpc GetValue(GetValueRequest) returns (GetValueResponse); - - // Set the value of a specific setting. - rpc SetValue(SetValueRequest) returns (SetValueResponse); - - // Writes to file settings currently stored in memory - rpc Write(WriteRequest) returns (WriteResponse); - - // Deletes an entry and rewrites the file settings - rpc Delete(DeleteRequest) returns (DeleteResponse); -} - -message GetAllResponse { - // The settings, in JSON format. - string json_data = 1; -} - -message MergeRequest { - // The settings, in JSON format. - string json_data = 1; -} - -message GetValueResponse { - // The key of the setting. - string key = 1; - // The setting, in JSON format. - string json_data = 2; -} - -message SetValueRequest { - // The key of the setting. - string key = 1; - // The setting, in JSON format. - string json_data = 2; -} - -message GetAllRequest {} - -message GetValueRequest { - // The key of the setting. - string key = 1; -} - -message MergeResponse {} - -message SetValueResponse {} - -message WriteRequest { - // Path to settings file (e.g. /path/to/arduino-cli.yaml) - string file_path = 1; -} - -message WriteResponse {} - -message DeleteRequest { - // The key of the setting to delete. - string key = 1; -} - -message DeleteResponse {} diff --git a/rpc/cc/arduino/cli/settings/v1/settings_grpc.pb.go b/rpc/cc/arduino/cli/settings/v1/settings_grpc.pb.go deleted file mode 100644 index 82585686aa5..00000000000 --- a/rpc/cc/arduino/cli/settings/v1/settings_grpc.pb.go +++ /dev/null @@ -1,321 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.24.3 -// source: cc/arduino/cli/settings/v1/settings.proto - -package settings - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - SettingsService_GetAll_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/GetAll" - SettingsService_Merge_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/Merge" - SettingsService_GetValue_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/GetValue" - SettingsService_SetValue_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/SetValue" - SettingsService_Write_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/Write" - SettingsService_Delete_FullMethodName = "/cc.arduino.cli.settings.v1.SettingsService/Delete" -) - -// SettingsServiceClient is the client API for SettingsService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type SettingsServiceClient interface { - // List all the settings. - GetAll(ctx context.Context, in *GetAllRequest, opts ...grpc.CallOption) (*GetAllResponse, error) - // Set multiple settings values at once. - Merge(ctx context.Context, in *MergeRequest, opts ...grpc.CallOption) (*MergeResponse, error) - // Get the value of a specific setting. - GetValue(ctx context.Context, in *GetValueRequest, opts ...grpc.CallOption) (*GetValueResponse, error) - // Set the value of a specific setting. - SetValue(ctx context.Context, in *SetValueRequest, opts ...grpc.CallOption) (*SetValueResponse, error) - // Writes to file settings currently stored in memory - Write(ctx context.Context, in *WriteRequest, opts ...grpc.CallOption) (*WriteResponse, error) - // Deletes an entry and rewrites the file settings - Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) -} - -type settingsServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewSettingsServiceClient(cc grpc.ClientConnInterface) SettingsServiceClient { - return &settingsServiceClient{cc} -} - -func (c *settingsServiceClient) GetAll(ctx context.Context, in *GetAllRequest, opts ...grpc.CallOption) (*GetAllResponse, error) { - out := new(GetAllResponse) - err := c.cc.Invoke(ctx, SettingsService_GetAll_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) Merge(ctx context.Context, in *MergeRequest, opts ...grpc.CallOption) (*MergeResponse, error) { - out := new(MergeResponse) - err := c.cc.Invoke(ctx, SettingsService_Merge_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) GetValue(ctx context.Context, in *GetValueRequest, opts ...grpc.CallOption) (*GetValueResponse, error) { - out := new(GetValueResponse) - err := c.cc.Invoke(ctx, SettingsService_GetValue_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) SetValue(ctx context.Context, in *SetValueRequest, opts ...grpc.CallOption) (*SetValueResponse, error) { - out := new(SetValueResponse) - err := c.cc.Invoke(ctx, SettingsService_SetValue_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) Write(ctx context.Context, in *WriteRequest, opts ...grpc.CallOption) (*WriteResponse, error) { - out := new(WriteResponse) - err := c.cc.Invoke(ctx, SettingsService_Write_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *settingsServiceClient) Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) { - out := new(DeleteResponse) - err := c.cc.Invoke(ctx, SettingsService_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// SettingsServiceServer is the server API for SettingsService service. -// All implementations must embed UnimplementedSettingsServiceServer -// for forward compatibility -type SettingsServiceServer interface { - // List all the settings. - GetAll(context.Context, *GetAllRequest) (*GetAllResponse, error) - // Set multiple settings values at once. - Merge(context.Context, *MergeRequest) (*MergeResponse, error) - // Get the value of a specific setting. - GetValue(context.Context, *GetValueRequest) (*GetValueResponse, error) - // Set the value of a specific setting. - SetValue(context.Context, *SetValueRequest) (*SetValueResponse, error) - // Writes to file settings currently stored in memory - Write(context.Context, *WriteRequest) (*WriteResponse, error) - // Deletes an entry and rewrites the file settings - Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) - mustEmbedUnimplementedSettingsServiceServer() -} - -// UnimplementedSettingsServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSettingsServiceServer struct { -} - -func (UnimplementedSettingsServiceServer) GetAll(context.Context, *GetAllRequest) (*GetAllResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAll not implemented") -} -func (UnimplementedSettingsServiceServer) Merge(context.Context, *MergeRequest) (*MergeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Merge not implemented") -} -func (UnimplementedSettingsServiceServer) GetValue(context.Context, *GetValueRequest) (*GetValueResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetValue not implemented") -} -func (UnimplementedSettingsServiceServer) SetValue(context.Context, *SetValueRequest) (*SetValueResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetValue not implemented") -} -func (UnimplementedSettingsServiceServer) Write(context.Context, *WriteRequest) (*WriteResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Write not implemented") -} -func (UnimplementedSettingsServiceServer) Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedSettingsServiceServer) mustEmbedUnimplementedSettingsServiceServer() {} - -// UnsafeSettingsServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to SettingsServiceServer will -// result in compilation errors. -type UnsafeSettingsServiceServer interface { - mustEmbedUnimplementedSettingsServiceServer() -} - -func RegisterSettingsServiceServer(s grpc.ServiceRegistrar, srv SettingsServiceServer) { - s.RegisterService(&SettingsService_ServiceDesc, srv) -} - -func _SettingsService_GetAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetAllRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).GetAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_GetAll_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).GetAll(ctx, req.(*GetAllRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_Merge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MergeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).Merge(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_Merge_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).Merge(ctx, req.(*MergeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_GetValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetValueRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).GetValue(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_GetValue_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).GetValue(ctx, req.(*GetValueRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_SetValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetValueRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).SetValue(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_SetValue_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).SetValue(ctx, req.(*SetValueRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_Write_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(WriteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).Write(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_Write_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).Write(ctx, req.(*WriteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SettingsService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SettingsServiceServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SettingsService_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SettingsServiceServer).Delete(ctx, req.(*DeleteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// SettingsService_ServiceDesc is the grpc.ServiceDesc for SettingsService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var SettingsService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "cc.arduino.cli.settings.v1.SettingsService", - HandlerType: (*SettingsServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetAll", - Handler: _SettingsService_GetAll_Handler, - }, - { - MethodName: "Merge", - Handler: _SettingsService_Merge_Handler, - }, - { - MethodName: "GetValue", - Handler: _SettingsService_GetValue_Handler, - }, - { - MethodName: "SetValue", - Handler: _SettingsService_SetValue_Handler, - }, - { - MethodName: "Write", - Handler: _SettingsService_Write_Handler, - }, - { - MethodName: "Delete", - Handler: _SettingsService_Delete_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "cc/arduino/cli/settings/v1/settings.proto", -} diff --git a/rpc/google/rpc/status.proto b/rpc/google/rpc/status.proto deleted file mode 100644 index e3411d03a64..00000000000 --- a/rpc/google/rpc/status.proto +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.rpc; - -import "google/protobuf/any.proto"; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/rpc/status;status"; -option java_multiple_files = true; -option java_outer_classname = "StatusProto"; -option java_package = "com.google.rpc"; -option objc_class_prefix = "RPC"; - -// The `Status` type defines a logical error model that is suitable for -// different programming environments, including REST APIs and RPC APIs. It is -// used by [gRPC](https://github.com/grpc). Each `Status` message contains -// three pieces of data: error code, error message, and error details. -// -// You can find out more about this error model and how to work with it in the -// [API Design Guide](https://cloud.google.com/apis/design/errors). -message Status { - // The status code, which should be an enum value of - // [google.rpc.Code][google.rpc.Code]. - int32 code = 1; - - // A developer-facing error message, which should be in English. Any - // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized - // by the client. - string message = 2; - - // A list of messages that carry the error details. There is a common set of - // message types for APIs to use. - repeated google.protobuf.Any details = 3; -} diff --git a/client_example/README.md b/rpc/internal/client_example/README.md similarity index 100% rename from client_example/README.md rename to rpc/internal/client_example/README.md diff --git a/client_example/hello/hello.ino b/rpc/internal/client_example/hello/hello.ino similarity index 100% rename from client_example/hello/hello.ino rename to rpc/internal/client_example/hello/hello.ino diff --git a/client_example/main.go b/rpc/internal/client_example/main.go similarity index 85% rename from client_example/main.go rename to rpc/internal/client_example/main.go index 7ae3745a598..00f0acaa7f7 100644 --- a/client_example/main.go +++ b/rpc/internal/client_example/main.go @@ -29,7 +29,6 @@ import ( "time" rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" - "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ) @@ -44,7 +43,7 @@ func main() { // Establish a connection with the gRPC server, started with the command: // arduino-cli daemon - conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) + conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatal("error connecting to arduino-cli rpc server, you can start it by running `arduino-cli daemon`") } @@ -63,8 +62,6 @@ func main() { // Create an instance of the gRPC clients. client := rpc.NewArduinoCoreServiceClient(conn) - settingsClient := settings.NewSettingsServiceClient(conn) - // Now we can call various methods of the API... // `Version` can be called without any setup or init procedure. @@ -75,40 +72,24 @@ func main() { callLoadSketch(client) // Use SetValue to configure the arduino-cli directories. - log.Println("calling SetValue") - callSetValue(settingsClient) + callSetValue(client, "directories.data", `"`+dataDir+`"`) + callSetValue(client, "directories.downloads", `"`+path.Join(dataDir, "staging")+`"`) + callSetValue(client, "directories.user", `"`+path.Join(dataDir, "sketchbook")+`"`) - // List all the settings. - log.Println("calling GetAll()") - callGetAll(settingsClient) + // List all settings + callConfigurationSave(client) // Merge applies multiple settings values at once. - log.Println("calling Merge()") - callMerge(settingsClient, `{"foo": {"value": "bar"}, "daemon":{"port":"422"}, "board_manager": {"additional_urls":["https://example.com"]}}`) - - log.Println("calling GetAll()") - callGetAll(settingsClient) - - log.Println("calling Merge()") - callMerge(settingsClient, `{"foo": {} }`) - - log.Println("calling GetAll()") - callGetAll(settingsClient) + callSetValue(client, "daemon.port", `"422"`) + callSetValue(client, "board_manager.additional_urls", `[ "https://example.com" ]`) - log.Println("calling Merge()") - callMerge(settingsClient, `{"foo": "bar" }`) + callConfigurationSave(client) - // Get the value of the foo key. - log.Println("calling GetValue(foo)") - callGetValue(settingsClient) + callSetValue(client, "daemon.port", "") + callGetValue(client, "daemon.port") + callGetValue(client, "directories.data") - // List all the settings. - log.Println("calling GetAll()") - callGetAll(settingsClient) - - // Write settings to file. - log.Println("calling Write()") - callWrite(settingsClient) + callConfigurationSave(client) // Before we can do anything with the CLI, an "instance" must be created. // We keep a reference to the created instance because we will need it to @@ -121,7 +102,7 @@ func main() { // We set up the proxy and then run the update to verify that the proxy settings are currently used log.Println("calling setProxy") - callSetProxy(settingsClient) + callSetProxy(client) // With a brand new instance, the first operation should always be updating // the index. @@ -145,11 +126,6 @@ func main() { log.Println("calling PlatformInstall(arduino:samd@1.6.19)") callPlatformInstall(client, instance) - // Now list the installed platforms to double check previous installation - // went right. - log.Println("calling PlatformList()") - callPlatformList(client, instance) - // Upgrade the installed platform to the latest version. log.Println("calling PlatformUpgrade(arduino:samd)") callPlatformUpgrade(client, instance) @@ -252,24 +228,24 @@ func callVersion(client rpc.ArduinoCoreServiceClient) { log.Printf("arduino-cli version: %v", versionResp.GetVersion()) } -func callSetValue(client settings.SettingsServiceClient) { - _, err := client.SetValue(context.Background(), - &settings.SetValueRequest{ - Key: "directories", - JsonData: `{"data": "` + dataDir + `", "downloads": "` + path.Join(dataDir, "staging") + `", "user": "` + path.Join(dataDir, "sketchbook") + `"}`, +func callSetValue(client rpc.ArduinoCoreServiceClient, key, jsonValue string) { + log.Printf("Calling SetValue: %s = %s", key, jsonValue) + _, err := client.SettingsSetValue(context.Background(), + &rpc.SettingsSetValueRequest{ + Key: key, + EncodedValue: jsonValue, }) if err != nil { log.Fatalf("Error setting settings value: %s", err) - } } -func callSetProxy(client settings.SettingsServiceClient) { - _, err := client.SetValue(context.Background(), - &settings.SetValueRequest{ - Key: "network.proxy", - JsonData: `"http://localhost:3128"`, +func callSetProxy(client rpc.ArduinoCoreServiceClient) { + _, err := client.SettingsSetValue(context.Background(), + &rpc.SettingsSetValueRequest{ + Key: "network.proxy", + EncodedValue: `"http://localhost:3128"`, }) if err != nil { @@ -277,11 +253,10 @@ func callSetProxy(client settings.SettingsServiceClient) { } } -func callUnsetProxy(client settings.SettingsServiceClient) { - _, err := client.SetValue(context.Background(), - &settings.SetValueRequest{ - Key: "network.proxy", - JsonData: `""`, +func callUnsetProxy(client rpc.ArduinoCoreServiceClient) { + _, err := client.SettingsSetValue(context.Background(), + &rpc.SettingsSetValueRequest{ + Key: "network.proxy", }) if err != nil { @@ -289,49 +264,30 @@ func callUnsetProxy(client settings.SettingsServiceClient) { } } -func callMerge(client settings.SettingsServiceClient, jsonData string) { - _, err := client.Merge(context.Background(), - &settings.MergeRequest{ - JsonData: jsonData, - }) - - if err != nil { - log.Fatalf("Error merging settings: %s", err) - } -} - -func callGetValue(client settings.SettingsServiceClient) { - getValueResp, err := client.GetValue(context.Background(), - &settings.GetValueRequest{ - Key: "foo", +func callGetValue(client rpc.ArduinoCoreServiceClient, key string) { + getValueResp, err := client.SettingsGetValue(context.Background(), + &rpc.SettingsGetValueRequest{ + Key: key, }) if err != nil { log.Fatalf("Error getting settings value: %s", err) } - log.Printf("Value: %s: %s", getValueResp.GetKey(), getValueResp.GetJsonData()) + log.Printf("%s = %s", key, getValueResp.GetEncodedValue()) } -func callGetAll(client settings.SettingsServiceClient) { - getAllResp, err := client.GetAll(context.Background(), &settings.GetAllRequest{}) +func callConfigurationSave(client rpc.ArduinoCoreServiceClient) { + log.Println("calling ConfigurationSave() >>") + getAllResp, err := client.ConfigurationSave(context.Background(), &rpc.ConfigurationSaveRequest{ + SettingsFormat: "json", + }) if err != nil { log.Fatalf("Error getting settings: %s", err) } - log.Printf("Settings: %s", getAllResp.GetJsonData()) -} - -func callWrite(client settings.SettingsServiceClient) { - _, err := client.Write(context.Background(), - &settings.WriteRequest{ - FilePath: path.Join(dataDir, "written-settings.yml"), - }) - - if err != nil { - log.Fatalf("Error writing settings: %s", err) - } + log.Printf("Settings follow:\n\n%s", getAllResp.GetEncodedSettings()) } func createInstance(client rpc.ArduinoCoreServiceClient) *rpc.Instance { @@ -339,7 +295,7 @@ func createInstance(client rpc.ArduinoCoreServiceClient) *rpc.Instance { if err != nil { log.Fatalf("Error creating server instance: %s", err) } - return res.Instance + return res.GetInstance() } func initInstance(client rpc.ArduinoCoreServiceClient, instance *rpc.Instance) { @@ -420,7 +376,7 @@ func callPlatformSearch(client rpc.ArduinoCoreServiceClient, instance *rpc.Insta for _, plat := range platforms { // We only print ID and version of the platforms found but you can look // at the definition for the rpc.Platform struct for more fields. - log.Printf("Search result: %+v - %+v", plat.GetId(), plat.GetLatest()) + log.Printf("Search result: %+v - %+v", plat.GetMetadata().GetId(), plat.GetLatestVersion()) } } @@ -464,21 +420,6 @@ func callPlatformInstall(client rpc.ArduinoCoreServiceClient, instance *rpc.Inst } } -func callPlatformList(client rpc.ArduinoCoreServiceClient, instance *rpc.Instance) { - listResp, err := client.PlatformList(context.Background(), - &rpc.PlatformListRequest{Instance: instance}) - - if err != nil { - log.Fatalf("List error: %s", err) - } - - for _, plat := range listResp.GetInstalledPlatforms() { - // We only print ID and version of the installed platforms but you can look - // at the definition for the rpc.Platform struct for more fields. - log.Printf("Installed platform: %s - %s", plat.GetId(), plat.GetInstalled()) - } -} - func callPlatformUpgrade(client rpc.ArduinoCoreServiceClient, instance *rpc.Instance) { upgradeRespStream, err := client.PlatformUpgrade(context.Background(), &rpc.PlatformUpgradeRequest{ @@ -545,8 +486,8 @@ func callBoardSearch(client rpc.ArduinoCoreServiceClient, instance *rpc.Instance log.Fatalf("Error getting board data: %s\n", err) } - for _, board := range res.Boards { - log.Printf("Board Name: %s, Board Platform: %s\n", board.Name, board.Platform.Id) + for _, board := range res.GetBoards() { + log.Printf("Board Name: %s, Board Platform: %s\n", board.GetName(), board.GetPlatform().GetMetadata().GetId()) } } @@ -674,16 +615,16 @@ func callBoardListWatch(client rpc.ArduinoCoreServiceClient, instance *rpc.Insta } else if err != nil { log.Fatalf("Board list watch error: %s\n", err) } - if res.EventType == "error" { - log.Printf("res: %s\n", res.Error) + if res.GetEventType() == "error" { + log.Printf("res: %s\n", res.GetError()) continue } - log.Printf("event: %s, address: %s\n", res.EventType, res.Port.Port.Address) - if res.EventType == "add" { - log.Printf("protocol: %s, ", res.Port.Port.Protocol) - log.Printf("protocolLabel: %s, ", res.Port.Port.ProtocolLabel) - log.Printf("boards: %s\n\n", res.Port.MatchingBoards) + log.Printf("event: %s, address: %s\n", res.GetEventType(), res.GetPort().GetPort().GetAddress()) + if res.GetEventType() == "add" { + log.Printf("protocol: %s, ", res.GetPort().GetPort().GetProtocol()) + log.Printf("protocolLabel: %s, ", res.GetPort().GetPort().GetProtocolLabel()) + log.Printf("boards: %s\n\n", res.GetPort().GetMatchingBoards()) } } }() @@ -1019,13 +960,14 @@ func waitForPrompt(debugStreamingOpenClient rpc.ArduinoCoreService_DebugClient, func callLoadSketch(client rpc.ArduinoCoreServiceClient) { currDir, _ := os.Getwd() - sketch, err := client.LoadSketch(context.Background(), &rpc.LoadSketchRequest{ + sketchResp, err := client.LoadSketch(context.Background(), &rpc.LoadSketchRequest{ SketchPath: filepath.Join(currDir, "hello"), }) if err != nil { log.Fatalf("Error getting version: %s", err) } + sketch := sketchResp.GetSketch() log.Printf("Sketch main file: %s", sketch.GetMainFile()) log.Printf("Sketch location: %s", sketch.GetLocationPath()) log.Printf("Other sketch files: %v", sketch.GetOtherSketchFiles()) diff --git a/client_example/squid.conf b/rpc/internal/client_example/squid.conf similarity index 100% rename from client_example/squid.conf rename to rpc/internal/client_example/squid.conf diff --git a/rpc/internal/get_version_example/main.go b/rpc/internal/get_version_example/main.go new file mode 100644 index 00000000000..0143a14d1e1 --- /dev/null +++ b/rpc/internal/get_version_example/main.go @@ -0,0 +1,45 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "context" + "log" + + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +func main() { + // Establish a connection with the gRPC server + conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + log.Println(err) + log.Fatal("error connecting to arduino-cli rpc server, you can start it by running `arduino-cli daemon`") + } + defer conn.Close() + + // Create an instance of the gRPC clients. + cli := rpc.NewArduinoCoreServiceClient(conn) + + // Now we can call various methods of the API... + versionResp, err := cli.Version(context.Background(), &rpc.VersionRequest{}) + if err != nil { + log.Fatalf("Error getting version: %s", err) + } + log.Printf("arduino-cli version: %v", versionResp.GetVersion()) +} diff --git a/rpc/internal/list_cores_example/main.go b/rpc/internal/list_cores_example/main.go new file mode 100644 index 00000000000..f627ee6e448 --- /dev/null +++ b/rpc/internal/list_cores_example/main.go @@ -0,0 +1,71 @@ +// This file is part of arduino-cli. +// +// Copyright 2024 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package main + +import ( + "context" + "fmt" + "io" + "log" + + "github.com/arduino/arduino-cli/commands" + rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + "github.com/sirupsen/logrus" +) + +func main() { + // Create a new ArduinoCoreServer + srv := commands.NewArduinoCoreServer() + + // Disable logging + logrus.SetOutput(io.Discard) + + // Create a new instance in the server + ctx := context.Background() + resp, err := srv.Create(ctx, &rpc.CreateRequest{}) + if err != nil { + log.Fatal("Error creating instance:", err) + } + instance := resp.GetInstance() + + // Defer the destruction of the instance + defer func() { + if _, err := srv.Destroy(ctx, &rpc.DestroyRequest{Instance: instance}); err != nil { + log.Fatal("Error destroying instance:", err) + } + fmt.Println("Instance successfully destroyed") + }() + + // Initialize the instance + initStream := commands.InitStreamResponseToCallbackFunction(ctx, func(r *rpc.InitResponse) error { + fmt.Println("INIT> ", r) + return nil + }) + if err := srv.Init(&rpc.InitRequest{Instance: instance}, initStream); err != nil { + log.Fatal("Error during initialization:", err) + } + + // Search for platforms and output the result + searchResp, err := srv.PlatformSearch(ctx, &rpc.PlatformSearchRequest{Instance: instance}) + if err != nil { + log.Fatal("Error searching for platforms:", err) + } + for _, platformSummary := range searchResp.GetSearchOutput() { + installed := platformSummary.GetInstalledRelease() + meta := platformSummary.GetMetadata() + fmt.Printf("%30s %8s %s\n", meta.GetId(), installed.GetVersion(), installed.GetName()) + } +}